diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..ab03fb2f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +# Keep the third-party parser separate in reviews and preserve upstream bytes. +src/bin/nlohmann/json.hpp linguist-vendored +src/bin/nlohmann/LICENSE.MIT linguist-vendored -whitespace +gui/vendor/plotly-cartesian.min.js linguist-vendored +gui/vendor/plotly.css linguist-vendored +gui/vendor/plotly-LICENSE.txt linguist-vendored -whitespace diff --git a/.github/workflows/build-wasm.yml b/.github/workflows/build-wasm.yml new file mode 100644 index 00000000..f951d568 --- /dev/null +++ b/.github/workflows/build-wasm.yml @@ -0,0 +1,123 @@ +name: WebAssembly and web interface + +on: + pull_request: + push: + branches: [master] + workflow_dispatch: + +permissions: + contents: read + +jobs: + documentation: + uses: ./.github/workflows/documentation.yml + + build: + runs-on: ubuntu-24.04 + timeout-minutes: 60 + steps: + - uses: actions/checkout@v7 + - uses: emscripten-core/setup-emsdk@v15 + with: + version: '4.0.23' + actions-cache-folder: emsdk-cache + - name: Install native build tools + run: sudo apt-get update && sudo apt-get install --yes autoconf automake libtool pkg-config + - uses: actions/setup-node@v6 + with: + node-version: '24' + - uses: actions/setup-python@v6 + with: + python-version: '3.12' + - name: Test dependency download integrity and cache recovery + run: | + python scripts/wasm/test-downloads.py + python scripts/wasm/test-vienna-release.py + - name: Test input, worker lifecycle and CSV handling + run: npm test --prefix gui + - name: Resolve newest stable ViennaRNA 2.x release and checksum + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + python scripts/wasm/vienna-release.py --latest > "$RUNNER_TEMP/vienna-release.json" + cat "$RUNNER_TEMP/vienna-release.json" + echo "WASM_VIENNA_RELEASE=$RUNNER_TEMP/vienna-release.json" >> "$GITHUB_ENV" + - name: Cross-compile dependencies and IntaRNA + run: bash scripts/wasm/build.sh + - name: Check real WASM predictions against the native reference + run: | + node scripts/wasm/smoke.mjs + node scripts/wasm/smoke-protocol.mjs + - name: Stage the static site and notices + run: bash scripts/wasm/stage.sh + - name: Install browser test tools + run: | + python -m pip install -r scripts/wasm/requirements-browser.txt + python -m playwright install --with-deps chromium firefox + - name: Exercise the browser with real WASM + run: | + python -m http.server 8765 --bind 127.0.0.1 --directory build-wasm > /tmp/intarna-http.log 2>&1 & + server_pid=$! + trap 'kill "$server_pid"' EXIT + for attempt in {1..30}; do + if curl --fail --silent http://127.0.0.1:8765/site/ > /dev/null; then break; fi + sleep 1 + done + python scripts/wasm/test-browser.py http://127.0.0.1:8765/site/ --screenshot build-wasm/browser.png + python scripts/wasm/test-browser.py http://127.0.0.1:8765/site/ --browser firefox + - uses: actions/upload-artifact@v4 + with: + name: intarna-gui + path: build-wasm/site + if-no-files-found: error + + package: + needs: [build, documentation] + runs-on: ubuntu-24.04 + steps: + - uses: actions/download-artifact@v4 + with: + name: intarna-documentation + path: _site + - uses: actions/download-artifact@v4 + with: + name: intarna-gui + path: _site/gui + - name: Verify documentation and browser interface coexist + run: | + test -s _site/index.html + test -s _site/api/index.html + test -s _site/gui/index.html + test -s _site/gui/wasm/intarna.wasm + test -s _site/gui/vendor/plotly-cartesian.min.js + test -s _site/gui/vendor/plotly.css + test -s _site/gui/licenses/Plotly.txt + - uses: actions/upload-artifact@v4 + with: + name: intarna-pages-preview + path: _site + - name: Upload GitHub Pages artifact + if: github.repository == 'BackofenLab/IntaRNA' && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' + uses: actions/upload-pages-artifact@v4 + with: + path: _site + + deploy: + if: github.repository == 'BackofenLab/IntaRNA' && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' + needs: package + runs-on: ubuntu-24.04 + permissions: + pages: write + id-token: write + concurrency: + group: github-pages + cancel-in-progress: false + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/configure-pages@v5 + - name: Deploy tested site and existing documentation + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18668a64..b8baddd9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,6 @@ on: push: branches: [master] pull_request: - branches: [master] defaults: run: diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index c0b774f4..79a365fa 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -1,10 +1,7 @@ name: Documentation on: - push: - branches: [master] - pull_request: - branches: [master] + workflow_call: workflow_dispatch: permissions: @@ -47,24 +44,9 @@ jobs: test -s _site/index.html test -s _site/doc/figures/icon-up.28.png - - name: Upload documentation for review and deployment - uses: actions/upload-pages-artifact@v4 + - name: Upload documentation for the combined Pages site + uses: actions/upload-artifact@v4 with: + name: intarna-documentation path: _site retention-days: 7 - - deploy: - name: Publish documentation - if: github.repository == 'BackofenLab/IntaRNA' && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' - needs: build - runs-on: ubuntu-24.04 - permissions: - pages: write - id-token: write - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - name: Deploy GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index ee819cc0..f09485a9 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,10 @@ python/intarnapvalue.* /IntaRNA.pc /IntaRNA.exe.stackdump /py-compile + +# Browser build outputs and local test dependencies +/build-wasm/ +/gui/wasm/ +/gui/node_modules/ + +/scripts/wasm/__pycache__/ diff --git a/ChangeLog b/ChangeLog index 09158edc..54b1340f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,58 @@ ## Interface and handling +- refine GUI seed and CSV control widths, filter examples by task, cap result + table height and use dark active tabs for additional output views (PR #303 review) + +- compact and left-align GUI parameter rows, split CSV controls into their own + tab, describe every additional output format and plot energy/probability files + with sequence names, source tabs and PNG export (PR #287 review) + +- reorganize GUI parameters, add conditional seed/accessibility controls and + grouped CSV defaults, expand FASTA limits and refine result headers (PR #299) + +- retain computed GUI runs as named, foldable sessions with JSON input restoration, + independent outputs, per-session ZIP export and deletion (PR #297 review) + +- permit clearing inherited CSV sorting when replaying JSON as text reports; + validate JSON/GUI behavior in native release/debug and real browsers (#287) + +- show prediction/evaluation tasks as always-visible choices with task-specific + descriptions and an expanded Seeds/Accessibility heading (PR #287 review) + +- upload or drop local FASTA files into each GUI strand with validation and + protection against stale asynchronous reads (PR #287 review) + +- clear all inputs on GUI reset and load named examples from maintainable JSON + files through an Example menu (PR #287 review) + +- load/store GUI settings as portable JSON; ZIPs contain parameter.json with + embedded inputs/provenance and all outputs (PR #287 review) + +- use one embedded-input JSON parameter document for each WASM invocation + (PR #287 review) + +- accept JSON parameter files with embedded text inputs and personality defaults + through --parameterFile while retaining legacy configuration (PR #287 review) + +- rename the browser interface directory and Pages URL to gui (PR #287 review) + +- add selected-interaction vaRRI embeds and reproducible all-output ZIP downloads + to the browser interface; compact parameters into accessible tabs and update + the Freiburg group header and full-width result/footer notes (PR #287 review) + +- extend the browser interface with vaRRI styling, prediction/evaluation tasks, + multi-FASTA, start indices, CLI parameter groups, selectable CSV columns and + additional output previews/downloads; label pair-relative differences mfe Δ + and display actual compiled versions (PR #287 review) + +- display sortable/filterable browser results and native CSV downloads; + publish the tested interface alongside existing Pages documentation (#286) + +- add responsive browser FASTA inputs, validation and abort dialog (#286, step 3) + +- run browser predictions in cancellable, isolated Web Workers (#286, step 2) + - orient probability SVGs from the upper-left corner and highlight every MFE pair, splitting seed/MFE cell borders into orange and green (PR #259 review) @@ -68,6 +120,28 @@ ## Technical changes and Optimizations +- reduce ordinary heuristic ensemble runtime by batching more source boundaries + and avoiding exhaustive span probes for sparse seed domains (issue #301) + +- record JSON/WASM/browser regression validation and preserve pinned JSON vendor + checksums while marking upstream files as vendored for review (PR #287) + +- build WASM with ViennaRNA 2.7.2 locally and the newest stable 2.x in CI; + verify published archive checksums, isolate versioned caches and retain + selected dependency provenance and notices (PR #292 review) + +- BUGFIX : restore WASM dependency downloads using the pinned official ViennaRNA + release asset; verify downloads before caching and recover invalid caches + (PR #291) + +- annotate inherited virtual methods/destructors with override, preserve compiled + WASM asset provenance through staging, and expand protocol/browser validation + for the PR #287 review + +- cross-compile IntaRNA and pinned dependencies to WebAssembly (#286, step 1) +- verify browser predictions against native accessibility/energy references and + exercise real WASM cancellation and nested Pages paths in Chromium/Firefox + - reuse MFE seed-extension scratch matrices and bound predecessor scans in exact and heuristic prediction; evaluate physical energies directly (PR #276 review) @@ -221,6 +295,276 @@ energies, restricted partition sums, and trackers. ################################################################################ ################################################################################ +261026 Alexander Mitrofanov + * gui/app.js, gui/{index.html,styles.css}, scripts/wasm/test-browser.py + * place Explicit seeds beside a half-width Seed constraint selector and halve + the CSV sort selector width; verify desktop/mobile control geometry + * show only examples for the selected task, retain complete CSV downloads while + scrolling result tables above 500 px, and match output tab selection styling + to the parameter tabs (PR #303 maintainer review) + * gui/docs/{json-workflow,step3-frontend-ui,step4-results-and-deployment}.md + * document task-specific examples, compact controls and the bounded result table + +261026 Alexander Mitrofanov + * gui/{app,options,sessions,output-visualization}.js, + gui/{index.html,styles.css} + * compact bounded parameter rows while preserving their grouping and align + wrapped labels above left-aligned controls + * move CSV sorting/column selection into a dedicated tab between Output and + Model & Energy; add content/use tooltips to all additional output formats + + show sequence-aware Plotly profiles, heatmaps and selected-spot bars beside + native file content; add header downloads and verified PNG export + * .gitattributes, gui/vendor/, scripts/wasm/stage.sh, + .github/workflows/build-wasm.yml + + vendor and checksum Plotly.js Cartesian 4.1.2, stage its MIT license and + verify both assets in the combined Pages artifact + * gui/tests/output-visualization.test.mjs, scripts/wasm/test-browser.py, + README.md, gui/docs/ + + cover signed categorical axes, file/sequence mapping, malformed data, + responsive compact layout, plot rendering and PNG downloads in real + Chromium/Firefox with the existing WASM engine + * address https://github.com/BackofenLab/IntaRNA/pull/287#issuecomment-6416573560 + * src/IntaRNA/SeededPartitionFunction.cpp + * Select sparse batch anchors by scanning admitted seeds instead of probing + every possible pair in every source span; retain the grid lookup for dense + domains and deterministic anchor order. + * Let partition-only heuristic ensembles batch up to 16 MiB of hybrid + coefficients, reducing repeated anchor-extension work without increasing + exact or pair-probability table budgets (issue #301). + * doc/analysis/{seed-extension-partition.md,heuristic-anchored-runtime.md} + * Document the adaptive anchor lookup and targeted runtime/memory tradeoff. + +261024 Alexander Mitrofanov + * gui/{app,options,columns}.js, gui/{index.html,styles.css} + * organize tabs/rows as Sequences, Seed, Output, Model & Energy, Query, + Target and CLI-only; align wrapped labels and place Compute first + + add a three-way seed selector, synchronized accessibility flags and + mode-dependent input availability; place SHAPE beside accessibility + * group compact CSV choices with descriptions and group selection actions; + default to 10 predictions and expanded task-specific energy columns, + explicitly preserving browser defaults in native-compatible JSON + * gui/{protocol,uploads,parameter-file}.js, gui/examples/ + * accept 50 FASTA records per strand of 2-5,000 nt each, with longest + selected query x longest selected target <= 1,000,000; allow 1 MB FASTA + + warn about ignored FASTA header descriptions while using first-token IDs + * gui/{sessions,results}.js + * select results from the header/name, order Show/Hide before the name and + ZIP/delete actions, compact table headings and distinguish selected rows + * gui/tests/, scripts/wasm/test-browser.py, README.md, gui/docs/ + + cover limits, native JSON replay/defaults, dependent controls, grouped CSV + choices, desktop/mobile alignment and result header selection + * address https://github.com/BackofenLab/IntaRNA/pull/299#issuecomment-6375752155 + +261023 Alexander Mitrofanov + * gui/{app,sessions,results,visualization}.js, gui/{index.html,styles.css} + + retain successful runs in browser memory with unique IDs, editable names, + independent results/diagnostics and JSON snapshots of their computed inputs + * restore inputs and fold other output areas on selection; preserve sessions + across edits, reset, imports, failures and aborts; unload folded viewers + + export each session's original JSON/outputs from its header and delete it + without overwriting editable inputs; keep controls keyboard accessible + * scripts/wasm/{stage.sh,test-browser.py}, README.md, gui/docs/ + * stage the sessions module, exercise session lifetime and archive isolation + in real browsers, and document temporary storage and updated reset behavior + * follow-up to https://github.com/BackofenLab/IntaRNA/pull/297#issuecomment-6367326708 + +261023 Alexander Mitrofanov + * .gitattributes, gui/docs/json-workflow.md + + Preserve exact upstream license whitespace and mark the JSON header and + license as vendored. Record native release/debug, WASM replay, browser, + distribution and provenance validation for the PR #287 revisions. + +261023 Alexander Mitrofanov + * src/bin/CommandLineParsing.cpp, ParameterFile.h, tests/testParameterFile.py + * Accept an explicitly empty CSV sort value to clear a parameter-file + setting when reproducing non-CSV reports from the same JSON document. + * gui/app.js, gui/styles.css, scripts/wasm/test-browser.py + * Keep pending auxiliary-file reads from restoring reset inputs, return + Reset to Sequence input and make the entire task label clickable. + * doc/{Makefile.am,json-parameters.md} + + Include JSON format documentation in source distributions and record the + observed WASM footprint and reproducible dependency comparison (#287). + +261023 Alexander Mitrofanov + * gui/{index.html,app.js,styles.css}, scripts/wasm/test-browser.py + * Replace the task dropdown with visible, highlighted native radio choices + and task descriptions; update the heading to include Seeds/Accessibility. + * Keep Example, Reset, Load and Store adjacent and test keyboard selection + and responsive layout (PR #287 review). + +261023 Alexander Mitrofanov + * gui/{uploads.js,app.js,index.html,styles.css}, gui/docs/json-workflow.md + + Add Upload controls and file-drop hints to both FASTA headers; validate + file size/contents before replacing a strand and invalidate stale reads. + * gui/tests/uploads.test.mjs, scripts/wasm/{test-browser.py,stage.sh} + + Test local upload/drop, invalid files and reset during a pending read; + stage the file-input module (PR #287 review). + +261023 Alexander Mitrofanov + * gui/{app.js,index.html,styles.css,examples/}, gui/docs/json-workflow.md + * Reset clears inputs/results and restores defaults; example FASTA is shown + only as placeholders. Add a described Example dropdown beside Reset. + + Ship two editable JSON examples and a manifest, using the common importer. + * gui/tests/parameter-file.test.mjs, scripts/wasm/{stage.sh,test-browser.py} + + Validate/stage example files and check empty startup/reset behavior (#287). + +261023 Alexander Mitrofanov + * gui/parameter-file.js, archive.js, app.js, index.html, protocol.js + + Load and Store non-default settings and embedded inputs using native JSON; + validate imports before replacing the form and retain CSV selection order. + * ZIP exports contain only parameter.json and outputs. Record version and + native replay commands, including overrides for additional report formats. + * gui/tests/, scripts/wasm/{smoke-protocol.mjs,test-browser.py,stage.sh}, + gui/docs/{json-workflow.md,step4-results-and-deployment.md} + + Test JSON round trips, invalid imports, real WASM replay and output equality; + stage the serializer and nlohmann/json license (PR #287 review). + +261023 Alexander Mitrofanov + * gui/protocol.js, gui/intarna-worker.js, gui/tests/protocol.test.mjs, + gui/docs/step2-worker-architecture.md + * Pass --parameterFile=/parameter.json to each WASM instance using the + native JSON format with embedded FASTA, SHAPE and accessibility text. + Preserve native output routing and independent report invocations (#287). + +261023 Alexander Mitrofanov + * src/bin/ParameterFile.{h,cpp}, CommandLineParsing.{h,cpp}, Makefile.am + + Detect JSON parameter files; reuse native CLI validation and precedence, + support embedded input text and retain files until computation finishes. + * Honor parameter-file personalities when selecting native defaults. + * src/bin/nlohmann/, doc/json-parameters.md, README.md, scripts/wasm/stage.sh + + Vendor nlohmann/json 3.12.0 with its license, document the schema, + dependency tradeoff and reproduction contract (PR #287 review). + * tests/runParameterFile.sh, tests/testParameterFile.py, tests/Makefile.am + + Check legacy/JSON equivalence, embedded inputs, precedence and errors. + +261023 Alexander Mitrofanov + * gui/, scripts/wasm/, .github/workflows/build-wasm.yml, README.md, + doc/api-documentation.md, .gitignore + * Rename webinterface to gui, including imports, staging, tests and the + combined Pages artifact at /IntaRNA/gui/ (PR #287 review). + +261022 Alexander Mitrofanov + * scripts/wasm/{vienna-release.py,vienna-release.json}, build.sh + + Resolve the newest stable ViennaRNA >=2.7.2 and <3 from all official GitHub + release pages in CI; require its release tarball and published SHA-256. + * Pin 2.7.2 for reproducible local builds and accept saved release manifests. + Isolate RNAlib sources/installations and IntaRNA objects by archive identity + and keep Boost/zlib in a separate prefix to prevent reuse or include-path + shadowing of libraries/headers from another release (PR #292). + * scripts/wasm/patch-vienna.py + - Remove the dlib 19.24 compatibility patch; ViennaRNA 2.7.2 bundles dlib 20.0. + * scripts/wasm/{write-build-info.mjs,stage.sh,smoke-protocol.mjs,test-browser.py} + * Record the selected archive URL/checksum, check the compiled ViennaRNA + version, stage matching dependency notices and test actual version exports. + * scripts/wasm/test-vienna-release.py, .github/workflows/build-wasm.yml + + Cover numeric version selection, pagination, major-3/prerelease exclusion, + missing/invalid asset metadata, API failures, manifest validation and + rejection of compiled engines with a stale ViennaRNA version. + * webinterface/docs/step1-wasm-compilation.md + * Document latest-2.x CI selection, pinned local reproduction, versioned + caches, current bundled dlib and archive provenance. + +261022 Alexander Mitrofanov + * scripts/wasm/{build,download}.sh + * Use the official GitHub ViennaRNA 2.7.0 release asset and pin its SHA-256; + the university endpoint returned a short HTTP 200 text response, failing + the WASM build before compilation (PR #291). + + Verify archives before caching, discard invalid cached responses and remove + failed partial downloads so rerunning a build can recover automatically. + * scripts/wasm/test-downloads.py, .github/workflows/build-wasm.yml + + Test verified-cache reuse, invalid-cache recovery, checksum failures, + HTTP errors and truncated transfers against a local HTTP server in CI. + * webinterface/docs/step1-wasm-compilation.md + * Document the release source, archive verification and download regression + command, including recovery behavior for failed or outdated caches. + +261022 Alexander Mitrofanov + * webinterface/{archive,visualization}.js + + Build local UTF-8 ZIPs with normalized FASTA, compiled version provenance, + portable parameter files, selected CSV, auxiliary inputs and all outputs; + include separate replay configurations for native text report modes. + + Construct selected-row vaRRI URLs from full target/query sequences, native + dot-bracket output, names and signed indices, preserving strand direction. + * webinterface/{app,results,protocol}.js, index.html, styles.css + + Add row selection, embedded vaRRI/full-viewer link and Download ZIP action; + preserve completed-run inputs and clear exports/viewer when inputs change. + * Replace folded groups with keyboard-accessible tabs and compact parameter + grids; link Bioinformatics - University of Freiburg to the group website + and remove artificial width limits from table/footer notes. + * scripts/wasm/{stage.sh,smoke-protocol.mjs,test-browser.py} + * Stage the new modules; verify byte-identical replay through fresh engines + and browser tab/selection/ZIP behavior in Chromium and Firefox. + * webinterface/tests/export.test.mjs, README.md, webinterface/docs/* + + Cover coordinate/identity mapping, effective settings and archive inputs; + document replay commands, external visualization and browser limitations + (https://github.com/BackofenLab/IntaRNA/pull/287#issuecomment-6321503136). + +261021 Alexander Mitrofanov + * src/IntaRNA/*.h + * Mark 194 inherited virtual methods and 45 derived destructors override; + keep algorithms, interfaces and third-party headers unchanged. + * webinterface/{options,columns,protocol,app,results,intarna-worker}.js + + Add CLI-based parameter groups and validation, multi-FASTA prediction, + signed per-strand start indices and IntaRNAeval structure evaluation. + + Provide all CSV columns, table visibility controls, pair-relative mfe Δ, + local SHAPE/accessibility data and previews/downloads of native extra files. + * webinterface/index.html, styles.css, assets/* + * Follow vaRRI main-v2 colors and institutional header; keep one parameter + group open at a time and adapt controls/defaults to the selected task. + * scripts/wasm/{build,stage}.sh, write-build-info.mjs + + Record actual compiled engine/library versions and asset hashes in text/JSON + at build time; preserve/check provenance during staging and show it in UI. + * Reject inconsistent missing overrides in the Emscripten build. + * webinterface/tests/*, scripts/wasm/{smoke-protocol.mjs,test-browser.py} + + Exercise task validation/defaults, real WASM evaluation/prediction, multiple + records/coordinates, imported data, columns/reports and worker lifecycle. + * .github/workflows/{build,build-wasm}.yml, README.md, webinterface/docs/* + * Run WASM/browser checks on dependent PRs and document revised behavior, + provenance, native option replacements and browser limits (PR #287 review). + +261020 Alexander Mitrofanov + * scripts/wasm/*, .github/workflows/build-wasm.yml, webinterface/app.js + + Execute dependency API probes and test structured accessibility costs, + native prediction references, C++ errors, nested paths and literal IDs. + * Download archives atomically and clear obsolete diagnostics on input edits. + * webinterface/docs/step4-results-and-deployment.md + + Record native API/CLI, real WASM and Chromium/Firefox validation (#286). + +261020 Alexander Mitrofanov + * webinterface/results.js, app.js, index.html, styles.css, tests/*, README.md + + Parse native CSV, preserve target/query orientation and inclusive indices, + and show energy/relative suboptimality with sorting, search and export. + * scripts/wasm/stage.sh, test-browser.py, .github/workflows/* + + Stage matching WASM assets, notices and provenance; verify the real engine + in Chromium and Firefox, including cancellation/restart and error recovery. + * Publish one combined Pages artifact with the existing guide/API and the + browser application at /webinterface/ (#286, step 4). + +261020 Alexander Mitrofanov + * webinterface/index.html, app.js, styles.css, mark.svg, docs/* + + Add paired query/target editors, a valid example, bounded RNA/FASTA + validation and result counts; normalize lowercase and DNA input. + + Keep the form responsive during predictions, display errors/diagnostics, + and abort by button or Escape (#286, step 3). + +261020 Alexander Mitrofanov + * webinterface/protocol.js, intarna-worker.js, runner.js, tests/* + + Validate FASTA at the worker boundary, run the existing CLI with MEMFS + input/output, and report CSV and bounded diagnostics asynchronously. + + Terminate each worker on completion, failure or abort; test clean restart + and stale-message handling (#286, step 2); document the worker protocol. + +261020 Alexander Mitrofanov + * scripts/wasm/*, .github/workflows/build-wasm.yml, configure.ac, + src/bin/Makefile.am, src/IntaRNA/Makefile.am + + Build pinned zlib, Boost and ViennaRNA for wasm32, then the existing + IntaRNA CLI as an isolated ES module with MEMFS and callMain exports. + * Omit pthread flags for single-thread Emscripten builds; retain native flags. + * Resolve generated CLI headers/pkg-config data in the build tree; adapt + bundled dlib Unicode and template code to the SDK libc++ and Clang. + + Document the toolchain and validate native-reference predictions in WASM + (https://github.com/BackofenLab/IntaRNA/issues/286, step 1). + 261020 Alexander Mitrofanov * PredictorMfe2dSeedExtension.*, PredictorMfe2dHeuristicSeedExtension.cpp - Remove extensionLoopE(), the local loop-energy table, known-value flags, diff --git a/README.md b/README.md index 5bbfd8d0..aeaab169 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,19 @@ + # IntaRNA [![releases](https://img.shields.io/github/tag/BackofenLab/IntaRNA.svg)](https://github.com/BackofenLab/IntaRNA/releases) [![Bioconda](https://anaconda.org/bioconda/intarna/badges/version.svg)](https://anaconda.org/bioconda/intarna) **Efficient RNA-RNA interaction prediction incorporating accessibility and seeding of interaction sites** +Predict short RNA pairs or evaluate supplied structures locally with the [browser interface](https://backofenlab.github.io/IntaRNA/gui/). +The browser accepts up to 50 records per strand, 2–5,000 nucleotides each, with longest selected query × longest selected target at most 1,000,000. Prediction defaults to 10 interactions per pair and includes opening and seed energies; evaluation selects all energy columns. +Computed runs stay in separate, foldable sessions under Results in the current tab. Name and select sessions to restore their inputs and compare results; editing or resetting parameters keeps earlier runs. +Select an interaction to view it in vaRRI, or download a session’s ZIP with inputs, compiled versions, reproducible parameters and all outputs. Sessions are temporary and are cleared when the page is reloaded. +Minimum-energy and interaction-probability output files include local Plotly visualizations with PNG export; every additional file retains its original text view and download. +See the [WebAssembly build instructions](gui/docs/step1-wasm-compilation.md) and +[interface/deployment notes](gui/docs/step4-results-and-deployment.md). + + During the last few years, several new small regulatory RNAs (sRNAs) have been discovered in bacteria. Most of them act as post-transcriptional regulators by base pairing to a target mRNA, causing translational repressionex @@ -23,7 +33,7 @@ as well as the existence of a user-definable seed interaction. We successfully a IntaRNA to the prediction of bacterial sRNA targets and determined the exact locations of the interactions with a higher accuracy than competing programs. -For testing or ad hoc use of IntaRNA, you can use its webinterface at the +For testing or ad hoc use of IntaRNA, you can use its gui at the **==> [Freiburg RNA tools IntaRNA webserver](http://rna.informatik.uni-freiburg.de/IntaRNA/) <==** @@ -497,6 +507,11 @@ using `configure --disable-multithreading`.
+JSON parameter files, including embedded FASTA, accessibility, SHAPE and energy +parameter text, are also accepted by `--parameterFile` with automatic format +detection. See [JSON format, examples and precedence](doc/json-parameters.md). + + ## Load arguments from file If you are using IntaRNA with similar command line arguments (parameters), you diff --git a/configure.ac b/configure.ac index aeb4e0c9..11d72849 100644 --- a/configure.ac +++ b/configure.ac @@ -252,7 +252,10 @@ AS_IF([test x"$multithreadingEnabled" = x"yes"], [ ], [ AC_DEFINE([INTARNA_MULITHREADING], [0], [Disabling multi-threading support]) AC_SUBST([INTARNA_MULITHREADING],[0]) - AM_CXXFLAGS="$AM_CXXFLAGS -pthread" + # Emscripten's single-thread runtime supplies mutex stubs. -pthread would + # instead require SharedArrayBuffer and cross-origin isolation on Pages. + AS_CASE([$host_os], [emscripten*], [], + [AM_CXXFLAGS="$AM_CXXFLAGS -pthread"]) ]) ############################################################################### diff --git a/doc/Makefile.am b/doc/Makefile.am index 25910558..cf899e71 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -6,6 +6,7 @@ EXTRA_DIST = \ conda.txt \ api-documentation.md \ + json-parameters.md \ build-api.sh \ check-api.py \ doxygen.cfg \ diff --git a/doc/analysis/heuristic-anchored-runtime.md b/doc/analysis/heuristic-anchored-runtime.md index 816f04a2..8462ef59 100644 --- a/doc/analysis/heuristic-anchored-runtime.md +++ b/doc/analysis/heuristic-anchored-runtime.md @@ -43,6 +43,13 @@ passes join the same retained roots and use the same complete boundary factors. This reduces heuristic contraction work; one-sided paths can still require a full right table. See the [recurrence description](seed-extension-partition.md). +For ordinary prediction without pair-probability output, each batch may use up +to 16 MiB for its only complete-boundary table, still capped at 256 sources. +This reduces how often anchors crossing batches are recomputed. Candidate +discovery scans admitted anchors directly when they are sparser than a span +rectangle and retains the original grid lookup for dense seed domains. Exact +and pair-output computations keep their 2 MiB-per-table target. + ## Correctness checks Release and debug validation each passed all seven test drivers. Both ran 115 diff --git a/doc/analysis/seed-extension-partition.md b/doc/analysis/seed-extension-partition.md index beda1712..55233f82 100644 --- a/doc/analysis/seed-extension-partition.md +++ b/doc/analysis/seed-extension-partition.md @@ -125,20 +125,27 @@ mass exactly once. No pair is counted merely because it lies inside an outer boundary rectangle. Partition-only mode omits the outside storage and pass. Batching avoids storing all source/endpoint combinations across the sequences. -The batch is additionally limited to a 2 MiB target for its hybrid table, with -at least one left boundary even when a single span rectangle exceeds that -budget. Pair output saves one equally sized table of boundary coefficients. -The bound is independent of whether pair output is requested, preserving the -forward computation in both modes. Larger batches reuse anchor factors across -more sources but retain more boundary coefficients. +Exact prediction and pair output target 2 MiB for each hybrid or boundary +table, with at least one left boundary even when a single span rectangle +exceeds that budget. Partition-only heuristic prediction can target 16 MiB for +its sole hybrid table. This uses the existing cap of 256 boundaries to reuse +anchor factors across more sources without enlarging exact or outside-pass +workspaces. + +Candidate discovery also adapts to the admitted seed density. When the number +of canonical anchors is smaller than one span rectangle, the backend scans +those anchors against the current batch directly. Denser domains retain the +bounded span-grid lookup. Both paths emit anchors in the same deterministic +order and feed the unchanged recurrence. With `W1=min(span1,n)`, `W2=min(span2,m)`, maximum irredundant seed length `L`, and bounded batch size `B<=256`, workspace storage is `O(W1*W2*(max(2,L)+B) + n*m + S)` for `S` anchors. The `n*m` term includes a byte-valued validity cache and, for pair output, the returned mass matrix. Partition-only mode does not allocate adjoints or saved boundary factors. -Its cost is repeated anchor-table work between batches. This is an explicit -memory/runtime tradeoff, not a claim of a general speedup. The +Its cost is repeated anchor-table work between batches. The larger heuristic +batch is an explicit memory/runtime tradeoff; exact and pair-output bounds stay +unchanged. The [benchmark records](../benchmarks/seed-extension/README.md) compare all complete boundary coefficients, partitions and pair numerators against `985ba44`, and report allocation calls, requested bytes, runtime and process RSS separately. diff --git a/doc/api-documentation.md b/doc/api-documentation.md index e7382175..cd9ad808 100644 --- a/doc/api-documentation.md +++ b/doc/api-documentation.md @@ -38,28 +38,34 @@ fatal. New unresolved references should be fixed before merging. ## GitHub Pages -`.github/workflows/documentation.yml` builds documentation on pull requests to -`master`, on pushes to `master`, and on manual dispatch. Every successful build -uploads a `github-pages` artifact for review. Only a push or manual dispatch on -`BackofenLab/IntaRNA`'s `master` can deploy; pull requests and forks cannot publish. -The deployment job alone receives Pages and OIDC write permissions. +`.github/workflows/documentation.yml` is a reusable documentation build, called +by `build-wasm.yml` for pull requests and pushes to `master`; it can also be run +manually to inspect documentation artifacts. The documentation build uploads +`intarna-documentation`, with the README-based Jekyll guide and Doxygen output +under `api/`. -The workflow first builds the existing README-based Jekyll site with its Slate -theme, then adds Doxygen output under `api/`. It publishes both together: +`build-wasm.yml` combines that artifact with the tested browser interface under +`gui/` and publishes **one** Pages artifact. This preserves the existing +guide and API; two independent publishers would overwrite each other's site. +Only a push or manual dispatch on `BackofenLab/IntaRNA`'s `master` can deploy. +Pull requests and forks cannot publish. The deployment job alone receives Pages +and OIDC write permissions, and deployments share one concurrency group. - User guide: - Development API: +- Browser interface: -### One-time activation after merge +### Pages configuration -The repository currently publishes from the root of the `master` branch. After -merging the documentation workflow, a repository administrator must select -**Settings → Pages → Build and deployment → Source → GitHub Actions**, then run -the **Documentation** workflow on `master` (or push a subsequent commit). -Retain any required approval rules on the `github-pages` environment. The PR -does not change the live publishing settings. See GitHub's +The repository already uses **Settings → Pages → Build and deployment → Source +→ GitHub Actions**. For another repository, select that source before deploying, +and deliberately adjust the deployment repository guard. Run the **WebAssembly +and web interface** workflow on `master` or push a subsequent commit. Retain any +required approval rules on the `github-pages` environment. This PR does not +change live publishing settings. See GitHub's [custom Pages workflow documentation](https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages). -No generated HTML, access token, or separate documentation branch is needed. -Both the existing guide and the API are included in the deployment artifact; -deploying only the API would replace the guide at the site's root. +No generated HTML, access token, or separate documentation branch is committed. +The `intarna-pages-preview` artifact contains the combined site for PR review. +See [the browser deployment notes](../gui/docs/step4-results-and-deployment.md) +for the complete build and validation sequence. diff --git a/doc/json-parameters.md b/doc/json-parameters.md new file mode 100644 index 00000000..2a694d12 --- /dev/null +++ b/doc/json-parameters.md @@ -0,0 +1,79 @@ +# JSON parameter files + +`IntaRNA --parameterFile=parameter.json` accepts the same CLI option names and +values as a legacy `key = value` file. Detection uses the first non-whitespace +character, after an optional UTF-8 BOM, independent of the filename suffix. +Legacy files remain supported. Explicit scalar CLI options override file values; +composing options such as `out` accumulate as before. A file's `personality` +selects defaults before parsing; an explicit CLI personality takes precedence. + +```json +{ + "schema": "IntaRNA-parameters-v1", + "_comment": ["Reproduce: IntaRNA --parameterFile=parameter.json"], + "parameters": { + "query": {"text": ">query\nGGGAGGAGGG\n"}, + "target": {"text": ">target\nCCCUCCUCCC\n"}, + "temperature": 25, + "outMode": "C", + "out": ["interactions.csv", "qPu:query-pu.txt"] + } +} +``` + +`parameters` contains strings, JSON numbers and booleans. Repeated/composing +options accept nonempty arrays. Flags without values accept `true` or `false`. +Unknown options, duplicate keys, null values, unsupported nested values and +recursive `parameterFile` are errors. Existing native type, range and cross-option +validation still applies. JSON uses normal JSON escapes; `#`, whitespace and +newlines in string values are not interpreted as legacy configuration syntax. + +The optional `_comment` field holds provenance and reproduction instructions as +ordinary JSON data, so files work with standard JSON parsers. Optional `gui` +metadata describes browser-only output selections and is ignored by the CLI. +Other document fields and unsupported schema versions are rejected. + +## Embedded inputs + +For `query`, `target`, `qAccFile`, `tAccFile`, `qShape`, `tShape` and `energyVRNA`, +use `{"text": "file contents"}` to embed UTF-8 text. FASTA may contain multiple +records. Accessibility uses RNAplfold text; SHAPE and energy parameters retain +their native formats. Ordinary strings retain their original meaning (sequence, +preset or filesystem path). Relative paths remain relative to the working +directory, as with legacy configuration files. Binary `.agz` caches can still be +referenced by path; they are not a text encoding. + +For accessibility of multiple selected records, `{"texts": ["record 1 data", +"record 2 data"]}` materializes files with the existing `-sN` suffixes, indexed by +original FASTA record number. Use `text` when selecting a single record. No +user-specified paths are used for embedded files. A private temporary directory +keeps generated files alive for the entire prediction and removes them on normal +exit or exception unwinding. WASM uses its private in-memory filesystem. Like +other temporary resources, abrupt process termination can leave native files. + +## Dependency choice + +We evaluated [Boost.JSON](https://www.boost.org/doc/libs/1_87_0/libs/json/doc/html/json/overview.html) +and [nlohmann/json](https://json.nlohmann.me/integration/). Both provide typed JSON +and can avoid a separately linked JSON library. Boost.JSON would raise our +current Boost 1.50 minimum to a release containing JSON, or require another +vendored Boost component and its dependency integration. Boost.PropertyTree is +already available but loses JSON scalar/array type distinctions needed here. + +We chose the unmodified, MIT-licensed nlohmann/json 3.12.0 single header (953,436 +bytes), compiled in one CLI translation unit. It adds no system package, linker +flag, public library API or WASM build dependency. The tradeoff is a vendored +header to maintain and extra compile/binary size; the parser is outside prediction +loops. Checksums and update instructions live in `src/bin/nlohmann/README.md`. +The source distribution and staged GUI include the license. + +### Observed WASM footprint + +With Emscripten 4.0.23, ViennaRNA 2.7.2 and Boost 1.87.0 using +`scripts/wasm/build.sh`, the cached pre-JSON engine at `d44d7a6` is 3,217,224 bytes +(781,737 bytes with Python `gzip.compress(..., mtime=0)`). The JSON-enabled engine +is 3,362,458 bytes (823,241 gzip): an increase of 145,234 bytes raw and 41,504 +compressed. These are local artifact-size observations with matching dependency +versions, not runtime benchmarks or guarantees for other toolchains. Reproduce +by building both revisions, comparing `site/wasm/intarna.wasm`, and checking +`site/build-info.json` for compiler/library provenance. diff --git a/gui/app.js b/gui/app.js new file mode 100644 index 00000000..c95fcff2 --- /dev/null +++ b/gui/app.js @@ -0,0 +1,398 @@ +import { parseFasta, prepareRequest, CSV_COLUMNS } from './protocol.js'; +import { GROUPS, FIELDS, EXTRA_OUTPUTS, UI_DEFAULTS } from './options.js'; +import { CSV_CATALOG, CSV_GROUPS, defaultColumns } from './columns.js'; +import { PredictionRunner } from './runner.js'; +import { downloadText } from './results.js'; +import { SessionsView } from './sessions.js'; +import { importParameters, serializeParameters, MAX_PARAMETER_BYTES } from './parameter-file.js'; +import { readFastaFile } from './uploads.js'; + +const byId = (id) => document.getElementById(id); +const form = byId('prediction-form'), runner = new PredictionRunner(); +const getTask = () => form.querySelector('input[name=task]:checked').value; +const setTask = (task) => { for (const input of form.querySelectorAll('input[name=task]')) input.checked = input.value === task; }; +const dialog = byId('loading'), status = byId('result-status'), errorBox = byId('input-error'); +const sessions = new SessionsView(byId('sessions'), byId('session-template'), (request, name) => { + applyParameters(request, `${name} selected. Its computed inputs have been restored.`); +}, showInputError, (message) => { status.textContent = message; }); +const csvInputs = [], outputInputs = []; +let inputRevision = 0; +let csvOrder = CSV_COLUMNS.split(','); +function element(tag, text, className) { + const node = document.createElement(tag); + if (text) node.textContent = text; + if (className) node.className = className; + return node; +} +function activateGroup(key, focus = false) { + for (const tab of byId('parameter-tabs').children) { + const active = tab.getAttribute('aria-controls') === key; + tab.setAttribute('aria-selected', String(active)); tab.tabIndex = active ? 0 : -1; + byId(tab.getAttribute('aria-controls')).hidden = !active; + if (active && focus) tab.focus(); + } +} +function addTab(key, label) { + const tab = element('button', label); tab.type = 'button'; tab.id = `tab-${key}`; + tab.setAttribute('role', 'tab'); tab.setAttribute('aria-controls', key); + tab.addEventListener('click', () => activateGroup(key)); + byId('parameter-tabs').append(tab); +} +function group(key, label) { + const panel = element('section', '', 'parameter-group'); panel.id = key; + panel.setAttribute('role', 'tabpanel'); panel.setAttribute('aria-labelledby', `tab-${key}`); + const body = element('div', '', 'group-body'); panel.append(body); + byId('parameter-groups').append(panel); addTab(key, label); return body; +} +addTab('sequence-input', 'Sequences'); +byId('parameter-tabs').addEventListener('keydown', (event) => { + if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return; + const tabs = [...byId('parameter-tabs').children].filter((tab) => !tab.hidden); + const current = tabs.indexOf(document.activeElement); + const next = event.key === 'Home' ? 0 : event.key === 'End' ? tabs.length - 1 : (current + (event.key === 'ArrowRight' ? 1 : -1) + tabs.length) % tabs.length; + event.preventDefault(); activateGroup(tabs[next].getAttribute('aria-controls'), true); +}); +// Render each requested row explicitly; labels share a grid row so wrapped +// labels do not push neighboring controls out of alignment. +function renderField(field, id = field.key) { + const wrapper = element('div', '', `field${field.type === 'checkbox' ? ' check' : ''}`); + const label = element('label', field.label); label.htmlFor = id; label.title = `--${field.key}`; + const input = element(field.type === 'select' ? 'select' : field.type === 'textarea' ? 'textarea' : 'input'); input.id = id; + if (input.tagName === 'INPUT') input.type = field.type; + if (field.type === 'select') for (const [value, name] of Object.entries(field.choices)) { const option = element('option', name); option.value = value; input.append(option); } + if (field.type === 'number') { input.min = field.min; input.max = field.max; input.step = field.step ?? 1; } + if (field.type === 'checkbox') { input.checked = field.value; wrapper.append(input, label); } + else { input.value = field.value; wrapper.append(label, input); } + if (field.hint) { const hint = element('p', field.hint, 'field-hint'); hint.id = `${id}-help`; input.setAttribute('aria-describedby', hint.id); wrapper.append(hint); } + if (field.type === 'textarea') { + input.spellcheck = false; + const upload = element('input'); upload.type = 'file'; upload.accept = '.txt,.csv,.shape,.dat'; upload.setAttribute('aria-label', `Load ${field.label} from a local text file`); + upload.dataset.for = field.key; + upload.addEventListener('change', async () => { + const file = upload.files[0]; upload.value = ''; if (!file) return; + const revision = ++inputRevision; + try { + if (file.size > 1000000) throw new Error('Choose a text file of at most 1 MB.'); + const content = await file.text(); + if (inputRevision !== revision || input.disabled) return; + input.value = content; input.dispatchEvent(new Event('input', { bubbles: true })); + } catch (error) { if (inputRevision === revision) showInputError(error); } + }); wrapper.append(upload); + } + if (field.key === 'noSeed') wrapper.hidden = true; + return wrapper; +} +function fieldRow(body, fields, suffix = '') { + const grid = element('div', '', `field-grid columns-${fields.length}`); + for (const field of fields) grid.append(renderField(field, field.key + suffix)); + body.append(grid); return grid; +} +for (const definition of GROUPS) { + const body = group(definition.key, definition.label); + if (definition.key === 'seed-options') { + const primary = element('div', '', 'seed-primary-row'); + const wrapper = element('div', '', 'field seed-mode'); + const label = element('label', 'Seed constraint'); label.htmlFor = 'seed-mode'; + const select = element('select'); select.id = 'seed-mode'; + for (const [value, name] of [['none', 'Disable seed constraint'], ['explicit', 'Explicit seed'], ['identify', 'Identify seeds']]) { + const option = element('option', name); option.value = value; select.append(option); + } + select.value = 'identify'; wrapper.append(label, select); + primary.append(wrapper, renderField(FIELDS.find((field) => field.key === 'seedTQ'))); + body.append(primary); + } + if (definition.rows) { + for (const row of definition.rows) { + if (definition.key === 'seed-options' && row[0].key === 'seedTQ') continue; + fieldRow(body, row); + } + } else fieldRow(body, definition.fields); + if (definition.strand) { + const p = definition.strand; + const shared = FIELDS.filter((field) => ['accNoLP', 'accNoGUend'].includes(field.key)); + fieldRow(body, shared, p === 't' ? '-target' : ''); + body.append(element('p', 'These two accessibility settings apply to both strands.', 'input-help')); + const columns = element('div', '', 'accessibility-columns'); body.append(columns); + const accessibility = element('div'), shape = element('div'); columns.append(accessibility, shape); + const field = (key) => FIELDS.find((entry) => entry.key === p + key); + fieldRow(accessibility, [field('AccConstr')]); + fieldRow(accessibility, [field('AccFile')]); + fieldRow(shape, [field('Shape')]); + fieldRow(shape, [field('ShapeMethod'), field('ShapeConversion')]); + } +} +function checkbox(container, key, labelText, description) { + const label = element('label'), input = element('input'); input.type = 'checkbox'; input.value = key; + if (description) label.title = description; + label.append(input, document.createTextNode(labelText)); container.append(label); return input; +} +const csvBody = byId('csv-options').querySelector('.group-body'); +csvBody.append(element('h3', 'CSV output columns', 'subheading')); +csvBody.append(element('p', 'seq1 is the target; seq2 is the query. Hover over a column name for details. Select columns for the table and CSV download; table visibility can be changed after computation.', 'input-help')); +const selectionTools = element('div', '', 'selection-tools'); csvBody.append(selectionTools); +const selectColumns = (selection) => { + csvOrder = [...selection]; for (const input of csvInputs) input.checked = selection.includes(input.value); inputsChanged(); +}; +for (const [name, selection] of [['Select all', () => CSV_CATALOG.map((c) => c.key)], ['Task defaults', () => defaultColumns(getTask())], ['Clear selection', () => []]]) { + const button = element('button', name); button.type = 'button'; + button.addEventListener('click', () => selectColumns(selection())); selectionTools.append(button); +} +for (const group of CSV_GROUPS) { + const section = element('fieldset', '', 'csv-group'), legend = element('legend', group.label); + section.dataset.csvGroup = group.label; + for (const [name, checked] of [['Select all', true], ['Deselect all', false]]) { + const button = element('button', name, 'text-button'); button.type = 'button'; + button.setAttribute('aria-label', `${name} ${group.label} columns`); + button.addEventListener('click', () => { + for (const input of csvInputs.filter((input) => group.keys.includes(input.value))) input.checked = checked; + inputsChanged(); + }); legend.append(button); + } + const picker = element('div', '', 'checkbox-grid csv-columns'); section.append(legend, picker); csvBody.append(section); + for (const key of group.keys) { + const column = CSV_CATALOG.find((column) => column.key === key); + csvInputs.push(checkbox(picker, key, key, column.description)); + } +} +const outputBody = byId('output-options').querySelector('.group-body'); +outputBody.append(element('h3', 'Additional output files', 'subheading')); +outputBody.append(element('p', 'Reports are computed with the same settings. ASCII, detailed and ensemble reports each run a fresh engine instance and can take extra time.', 'input-help')); +const outputPicker = element('div', '', 'checkbox-grid'); outputBody.append(outputPicker); +for (const output of EXTRA_OUTPUTS) outputInputs.push(checkbox(outputPicker, output.key, output.label, output.description)); +const generalBody = group('general-options', 'CLI-only'); +generalBody.append(element('p', 'Process-level settings (threads, log paths, parameter-file paths and terminal help) are available in the CLI.')); +const docs = element('a', 'Full CLI parameter documentation'); docs.href = 'https://github.com/BackofenLab/IntaRNA#readme'; generalBody.append(docs); + +function inputsChanged(message = 'Inputs changed. Compute to update the interactions.') { + inputRevision++; + sessions.deselect(); + byId('diagnostics').hidden = true; byId('diagnostic-text').textContent = ''; status.textContent = message; +} +function updateLength(name) { + const warning = byId(`${name}-warning`); warning.hidden = true; warning.textContent = ''; + if (!byId(name).value.trim()) { byId(`${name}-length`).textContent = 'No sequence entered'; return; } + try { + const parsed = parseFasta(byId(name).value, name === 'query' ? 'Query' : 'Target', getTask() === 'prediction'); + warning.textContent = parsed.warnings.join(' '); warning.hidden = !parsed.warnings.length; + byId(`${name}-length`).textContent = `${parsed.records.length} record${parsed.records.length === 1 ? '' : 's'}, ${parsed.records.reduce((sum, r) => sum + r.sequence.length, 0).toLocaleString()} nucleotides`; + } catch { byId(`${name}-length`).textContent = 'Check sequence format and length'; } +} +function updateAvailability() { + const evaluation = getTask() === 'evaluation'; + for (const button of byId('example-options').querySelectorAll('[data-example-task]')) { + button.hidden = button.dataset.exampleTask !== getTask(); + } + byId('evaluation-input').hidden = !evaluation; + byId('task-help').textContent = evaluation ? 'Evaluate supplied structures for one query and one target. Prediction constraints are ignored.' : 'Predict interactions for all query–target sequence pairs.'; + byId('compute').textContent = evaluation ? 'Evaluate interactions' : 'Compute interactions'; + for (const definition of GROUPS) { + const tab = byId(`tab-${definition.key}`); tab.hidden = evaluation && !!definition.prediction; + if (tab.hidden) { + byId(definition.key).hidden = true; + if (tab.getAttribute('aria-selected') === 'true') activateGroup('sequence-input'); + } + for (const field of definition.fields) { + const input = byId(field.key); + input.disabled = evaluation && !!field.prediction || field.key.startsWith('helix') && byId('model').value !== 'B' || field.key === 'kineticScore' && byId('mode').value !== 'K'; + } + } + byId('noSeed').checked = byId('seed-mode').value === 'none'; + for (const field of FIELDS.filter((field) => field.key.startsWith('seed'))) { + byId(field.key).disabled = evaluation || (field.key === 'seedTQ' ? byId('seed-mode').value !== 'explicit' : byId('seed-mode').value !== 'identify'); + } + for (const p of ['q', 't']) { + const mode = byId(`${p}Acc`).value; + for (const key of ['AccW', 'AccL', 'PfScale', 'AccConstr', 'AccFile', 'Shape', 'ShapeMethod', 'ShapeConversion']) { + byId(p + key).disabled = mode === 'N' || ['AccW', 'AccL'].includes(key) && mode !== 'C' || key === 'AccFile' && !['P', 'E'].includes(mode); + } + for (const key of ['accNoLP', 'accNoGUend']) byId(key + (p === 't' ? '-target' : '')).disabled = mode === 'N'; + } + // Upload controls follow the text area they populate, including async reads. + for (const upload of form.querySelectorAll('input[data-for]')) upload.disabled = byId(upload.dataset.for).disabled; + for (const input of outputInputs) { input.disabled = evaluation && EXTRA_OUTPUTS.find((entry) => entry.key === input.value).prediction; if (input.disabled) input.checked = false; } + updateLength('query'); updateLength('target'); +} +function resetParameters({ clearInputs = false } = {}) { + if (clearInputs) { + setTask('prediction'); + byId('query').value = ''; byId('target').value = ''; + for (const input of form.querySelectorAll('input[type=file]')) input.value = ''; + byId('examples-menu').open = false; activateGroup('sequence-input'); + } + csvOrder = defaultColumns(getTask()); + byId('seed-mode').value = 'identify'; + for (const field of FIELDS) { const input = byId(field.key); if (field.type === 'checkbox') input.checked = UI_DEFAULTS[field.key]; else input.value = UI_DEFAULTS[field.key]; } + syncAccessibilityFlags(); + for (const input of csvInputs) input.checked = csvOrder.includes(input.value); + for (const input of outputInputs) input.checked = false; + byId('qIdxPos0').value = 1; byId('tIdxPos0').value = 1; byId('rri').value = ''; + updateAvailability(); errorBox.hidden = true; inputsChanged(clearInputs ? 'Inputs cleared. Enter sequences or choose an example.' : 'Parameters reset to task defaults. Compute to update the interactions.'); +} +byId('task').addEventListener('change', resetParameters); +byId('reset').addEventListener('click', () => resetParameters({ clearInputs: true })); +function syncAccessibilityFlags(source) { + for (const key of ['accNoLP', 'accNoGUend']) { + if (source?.id === key + '-target') byId(key).checked = source.checked; + byId(key + '-target').checked = byId(key).checked; + } +} +form.addEventListener('input', (event) => { + if (event.target.type === 'file') return; + syncAccessibilityFlags(event.target); + updateAvailability(); errorBox.hidden = true; inputsChanged(); +}); +function showInputError(error) { + errorBox.textContent = error.message; errorBox.hidden = false; +} +function applyParameters(request, message = 'Parameters loaded. Compute to analyze the inputs.') { + // Import validates every setting before this atomic UI update. + setTask(request.task); + resetParameters(); + for (const key of ['query', 'target', 'qIdxPos0', 'tIdxPos0', 'rri']) byId(key).value = request[key]; + for (const field of FIELDS) { + const value = request.parameters[field.key] ?? field.value; + if (field.type === 'checkbox') byId(field.key).checked = value; + else byId(field.key).value = value; + } + byId('seed-mode').value = request.parameters.noSeed ? 'none' : request.parameters.seedTQ ? 'explicit' : 'identify'; + syncAccessibilityFlags(); + csvOrder = [...request.csvColumns]; + for (const input of csvInputs) input.checked = request.csvColumns.includes(input.value); + for (const input of outputInputs) input.checked = request.outputs.includes(input.value); + updateAvailability(); activateGroup('sequence-input'); inputsChanged(message); +} +for (const strand of ['query', 'target']) { + const input = byId(strand), picker = byId(`${strand}-upload`); + const loadFasta = async (files) => { + if (byId('inputs').disabled) return; + const revision = ++inputRevision; + try { + if (files.length !== 1) throw new Error('Choose or drop one FASTA file per field.'); + const content = await readFastaFile(files[0], strand === 'query' ? 'Query' : 'Target', getTask()); + if (inputRevision !== revision) return; + input.value = content; + updateAvailability(); errorBox.hidden = true; + inputsChanged(`${strand === 'query' ? 'Query' : 'Target'} FASTA loaded. Compute to analyze the inputs.`); + } catch (error) { if (inputRevision === revision) showInputError(error); } + }; + byId(`${strand}-upload-button`).addEventListener('click', () => picker.click()); + picker.addEventListener('change', () => { const files = [...picker.files]; picker.value = ''; if (files.length) loadFasta(files); }); + input.addEventListener('dragover', (event) => { + if (event.dataTransfer.types.includes('Files')) { event.preventDefault(); event.dataTransfer.dropEffect = 'copy'; input.classList.add('drag-over'); } + }); + input.addEventListener('dragleave', () => input.classList.remove('drag-over')); + input.addEventListener('drop', (event) => { + input.classList.remove('drag-over'); + if (!event.dataTransfer.types.includes('Files')) return; + event.preventDefault(); loadFasta([...event.dataTransfer.files]); + }); +} +byId('load-parameters').addEventListener('click', () => byId('parameter-upload').click()); +byId('parameter-upload').addEventListener('change', async (event) => { + const file = event.target.files[0]; event.target.value = ''; if (!file) return; + const revision = ++inputRevision; + try { + if (file.size > MAX_PARAMETER_BYTES) throw new Error('Choose a JSON file of at most 5 MB.'); + const imported = importParameters(await file.text()); + if (inputRevision !== revision) return; + applyParameters(imported); + } catch (error) { if (inputRevision === revision) showInputError(error); } +}); +byId('store-parameters').addEventListener('click', async () => { + // Snapshot before waiting for build metadata so edits cannot change the download. + const request = currentRequest(); + try { downloadText('parameter.json', serializeParameters(request, await buildInfo)); } + catch (error) { showInputError(error); } +}); +async function loadExamples() { + const container = byId('example-options'); + try { + const response = await fetch(new URL('./examples/index.json', import.meta.url)); + if (!response.ok) throw new Error('Example list is unavailable.'); + const files = await response.json(); + if (!Array.isArray(files) || !files.length || files.some((name) => typeof name !== 'string' || !/^[a-z0-9-]+\.json$/.test(name))) throw new Error('Invalid example list.'); + const examples = await Promise.all(files.map(async (filename) => { + const response = await fetch(new URL(`./examples/${filename}`, import.meta.url)); + if (!response.ok) throw new Error('An example is unavailable.'); + const example = await response.json(); + if (typeof example.name !== 'string' || typeof example.description !== 'string') throw new Error('Invalid example description.'); + const request = importParameters(example.configuration); + prepareRequest(request); + return { ...example, request }; + })); + container.replaceChildren(); + for (const example of examples) { + const button = element('button'); button.type = 'button'; + button.dataset.exampleTask = example.request.task; + button.append(element('strong', example.name), element('span', example.description)); + button.addEventListener('click', () => { + if (byId('inputs').disabled) return; + applyParameters(example.request, `${example.name} loaded. Compute to analyze the example.`); + byId('examples-menu').open = false; + }); + container.append(button); + } + updateAvailability(); + } catch (error) { container.replaceChildren(element('p', `${error.message} Reload to try again.`, 'input-help')); } +} +loadExamples(); +byId('examples-menu').addEventListener('keydown', (event) => { + if (event.key === 'Escape') { byId('examples-menu').open = false; byId('examples-menu').querySelector('summary').focus(); } +}); +byId('abort').addEventListener('click', () => runner.abort()); +dialog.addEventListener('cancel', (event) => { event.preventDefault(); runner.abort(); }); +window.addEventListener('pagehide', () => runner.abort()); +function currentParameters() { + // Keep inactive edits in the form for toggling back, but exclude them from + // validation, saved JSON and native computation. Shared flags stay active + // whenever either strand uses accessibility. + return Object.fromEntries(FIELDS.map((field) => { + const input = byId(field.key); + const inactive = ['accNoLP', 'accNoGUend'].includes(field.key) + ? input.disabled && byId(field.key + '-target').disabled : input.disabled; + return [field.key, inactive ? field.value : field.type === 'checkbox' ? input.checked : input.value]; + })); +} +function currentRequest() { + const selected = csvInputs.filter((input) => input.checked).map((input) => input.value); + const columns = [...csvOrder.filter((key) => selected.includes(key)), ...selected.filter((key) => !csvOrder.includes(key))]; + return { + task: getTask(), query: byId('query').value, target: byId('target').value, + qIdxPos0: byId('qIdxPos0').value, tIdxPos0: byId('tIdxPos0').value, rri: byId('rri').value, + parameters: currentParameters(), + csvColumns: columns, outputs: outputInputs.filter((input) => input.checked && !input.disabled).map((input) => input.value), + }; +} +form.addEventListener('submit', async (event) => { + event.preventDefault(); + const request = currentRequest(); + errorBox.hidden = true; + let prepared; + try { + if (getTask() === 'prediction' && byId('seed-mode').value === 'explicit' && !request.parameters.seedTQ.trim()) throw new Error('Explicit seed: enter target&query dot-bar encodings.'); + prepared = prepareRequest(request); } catch (error) { errorBox.textContent = error.message; errorBox.hidden = false; return; } + inputsChanged('Computing interactions…'); byId('loading-status').textContent = 'Loading the prediction engine…'; + byId('inputs').disabled = true; byId('results').setAttribute('aria-busy', 'true'); dialog.showModal(); + try { + const result = await runner.run(request, (message) => { byId('loading-status').textContent = message; }); + // Keep the executed inputs and outputs together, independent of later edits. + const provenance = await buildInfo.catch(() => 'Compiled version information is unavailable.'); + status.textContent = sessions.add(prepared, result, provenance); + } catch (error) { + if (error.name === 'AbortError') status.textContent = 'Computation aborted. You can edit the sequences and try again.'; + else { status.textContent = 'Computation failed.'; errorBox.textContent = error.message; errorBox.hidden = false; byId('diagnostic-text').textContent = error.diagnostics || ''; byId('diagnostics').hidden = !error.diagnostics; } + } finally { + byId('inputs').disabled = false; updateAvailability(); byId('results').setAttribute('aria-busy', 'false'); dialog.close(); byId('compute').focus(); + } +}); +activateGroup('sequence-input'); +resetParameters({ clearInputs: true }); +const buildInfo = fetch(new URL('./build-info.txt', import.meta.url)).then((response) => { + if (!response.ok) throw new Error('Missing build provenance'); return response.text(); +}); +// Keep the rejection handled even if no archive is requested. +buildInfo.catch(() => {}); +fetch(new URL('./build-info.json', import.meta.url)).then((response) => { + if (!response.ok) throw new Error('Missing build provenance'); return response.json(); +}).then((info) => { byId('version-info').textContent = `IntaRNA ${info.intarna} (${info.commit.slice(0, 12)}${info.dirty ? ', modified sources' : ''}) · ViennaRNA ${info.viennarna} · Emscripten ${info.emscripten}`; }).catch(() => { byId('version-info').textContent = 'Build versions unavailable. Serve the staged interface with its compiled engine and build-info files.'; }); +if (!globalThis.Worker || !globalThis.WebAssembly) { byId('compute').disabled = true; errorBox.textContent = 'This browser needs WebAssembly and Web Workers. Use a current browser or the command line version.'; errorBox.hidden = false; } diff --git a/gui/archive.js b/gui/archive.js new file mode 100644 index 00000000..8b1995ca --- /dev/null +++ b/gui/archive.js @@ -0,0 +1,60 @@ +import { serializeParameters } from './parameter-file.js'; +import { projectCsv } from './results.js'; + +const encoder = new TextEncoder(); +const crcTable = Uint32Array.from({ length: 256 }, (_, value) => { + for (let bit = 0; bit < 8; bit++) value = (value >>> 1) ^ (value & 1 ? 0xedb88320 : 0); + return value >>> 0; +}); +function crc32(bytes) { + let crc = 0xffffffff; + for (const byte of bytes) crc = crcTable[(crc ^ byte) & 255] ^ (crc >>> 8); + return (crc ^ 0xffffffff) >>> 0; +} + +// A standard, uncompressed ZIP: local generation needs no CDN or dependency. +// Fixed timestamps and UTF-8 names make the same completed run reproducible. +export function zipFiles(files) { + const local = [], central = [], names = new Set(); + let offset = 0, directorySize = 0; + if (files.length > 65535) throw new Error('Too many files for a ZIP archive.'); + for (const file of files) { + if (!file.name || /[/\\\x00]/.test(file.name) || ['.', '..'].includes(file.name) || names.has(file.name)) throw new Error('Invalid or duplicate archive filename.'); + names.add(file.name); + const name = encoder.encode(file.name), data = encoder.encode(file.text), crc = crc32(data); + if (name.length > 65535 || offset + name.length + data.length + 30 > 0xffffffff) throw new Error('ZIP archive is too large.'); + const header = new Uint8Array(30), view = new DataView(header.buffer); + view.setUint32(0, 0x04034b50, true); view.setUint16(4, 20, true); + view.setUint16(6, 0x800, true); view.setUint16(12, 33, true); // 1980-01-01 + view.setUint32(14, crc, true); view.setUint32(18, data.length, true); view.setUint32(22, data.length, true); + view.setUint16(26, name.length, true); + local.push(header, name, data); + const entry = new Uint8Array(46), record = new DataView(entry.buffer); + record.setUint32(0, 0x02014b50, true); record.setUint16(4, 20, true); record.setUint16(6, 20, true); + record.setUint16(8, 0x800, true); record.setUint16(14, 33, true); + record.setUint32(16, crc, true); record.setUint32(20, data.length, true); record.setUint32(24, data.length, true); + record.setUint16(28, name.length, true); record.setUint32(42, offset, true); + central.push(entry, name); directorySize += entry.length + name.length; + offset += header.length + name.length + data.length; + } + const end = new Uint8Array(22), view = new DataView(end.buffer); + view.setUint32(0, 0x06054b50, true); + view.setUint16(8, files.length, true); view.setUint16(10, files.length, true); + view.setUint32(12, directorySize, true); view.setUint32(16, offset, true); + const zip = new Uint8Array(offset + directorySize + end.length); + let position = 0; + for (const bytes of [...local, ...central, end]) { zip.set(bytes, position); position += bytes.length; } + return zip; +} + +export function archiveFiles(request, result, provenance) { + return [ + { name: 'parameter.json', text: serializeParameters({ ...request, qIdxPos0: request.parameters.qIdxPos0, tIdxPos0: request.parameters.tIdxPos0 }, provenance) }, + { name: 'intarna-interactions.csv', text: projectCsv(result.csv, request.csvColumns) }, + ...result.files, + ]; +} + +export function createArchive(request, result, provenance) { + return zipFiles(archiveFiles(request, result, provenance)); +} diff --git a/gui/assets/README.md b/gui/assets/README.md new file mode 100644 index 00000000..6ede01c4 --- /dev/null +++ b/gui/assets/README.md @@ -0,0 +1,12 @@ +# Institutional header assets + +The header follows [vaRRI main-v2](https://github.com/BackofenLab/vaRRI/blob/main-v2/src/ui/components/site-header.js). +The original institutional images were downloaded on 2026-10-21 from: + +- https://www.bioinf.uni-freiburg.de/assets/images/bioinf-fr-logo-blau.png +- https://www.bioinf.uni-freiburg.de/assets/images/logo-uni-freiburg.png + +These are institutional marks of the Bioinformatics Group Freiburg and the +University of Freiburg. They identify the affiliated research group/university; +they are not covered by the IntaRNA software license. Keep their proportions and +attribution links. Local copies avoid third-party requests from the interface. diff --git a/gui/assets/bioinf-fr-logo-blau.png b/gui/assets/bioinf-fr-logo-blau.png new file mode 100644 index 00000000..0d8409ba Binary files /dev/null and b/gui/assets/bioinf-fr-logo-blau.png differ diff --git a/gui/assets/logo-uni-freiburg.png b/gui/assets/logo-uni-freiburg.png new file mode 100644 index 00000000..1e2bb249 Binary files /dev/null and b/gui/assets/logo-uni-freiburg.png differ diff --git a/gui/columns.js b/gui/columns.js new file mode 100644 index 00000000..9c096021 --- /dev/null +++ b/gui/columns.js @@ -0,0 +1,335 @@ +// Column IDs and descriptions from OutputHandlerCsv.h; seq1 = target, seq2 = query. +export const CSV_CATALOG = [ + { + "key": "id1", + "label": "Target", + "description": "id of first sequence", + "numeric": false + }, + { + "key": "id2", + "label": "Query", + "description": "id of second sequence", + "numeric": false + }, + { + "key": "seq1", + "label": "seq1", + "description": "full first sequence", + "numeric": false + }, + { + "key": "seq2", + "label": "seq2", + "description": "full second sequence", + "numeric": false + }, + { + "key": "subseq1", + "label": "subseq1", + "description": "interacting subsequence of first sequence", + "numeric": false + }, + { + "key": "subseq2", + "label": "subseq2", + "description": "interacting subsequence of second sequence", + "numeric": false + }, + { + "key": "subseqDP", + "label": "subseqDP", + "description": "hybrid subsequences compatible with hybridDP", + "numeric": false + }, + { + "key": "subseqDB", + "label": "subseqDB", + "description": "hybrid subsequences compatible with hybridDB", + "numeric": false + }, + { + "key": "start1", + "label": "Target start", + "description": "start index of hybrid in seq1", + "numeric": true + }, + { + "key": "end1", + "label": "Target end", + "description": "end index of hybrid in seq1", + "numeric": true + }, + { + "key": "start2", + "label": "Query start", + "description": "start index of hybrid in seq2", + "numeric": true + }, + { + "key": "end2", + "label": "Query end", + "description": "end index of hybrid in seq2", + "numeric": true + }, + { + "key": "hybridDP", + "label": "hybridDP", + "description": "hybrid in VRNA dot-bracket notation", + "numeric": false + }, + { + "key": "hybridDB", + "label": "hybridDB", + "description": "hybrid in dot-bar notation", + "numeric": false + }, + { + "key": "hybridDPfull", + "label": "hybridDPfull", + "description": "hybrid in VRNA dot-bracket notation for full sequence lengths", + "numeric": false + }, + { + "key": "hybridDBfull", + "label": "hybridDBfull", + "description": "hybrid in dot-bar notation for full sequence lengths", + "numeric": false + }, + { + "key": "bpList", + "label": "bpList", + "description": "list of hybrid base pairs like (1,3),(4,2),...", + "numeric": false + }, + { + "key": "E", + "label": "Energy (kcal/mol)", + "description": "overall interaction energy", + "numeric": true + }, + { + "key": "Etotal", + "label": "Etotal", + "description": "overall energy of the interaction including the intra-molecular ensemble energies (E+Eall1+Eall2)", + "numeric": true + }, + { + "key": "ED1", + "label": "ED1", + "description": "ED value of seq1", + "numeric": true + }, + { + "key": "ED2", + "label": "ED2", + "description": "ED value of seq2", + "numeric": true + }, + { + "key": "Pu1", + "label": "Pu1", + "description": "probability to be accessible for seq1", + "numeric": true + }, + { + "key": "Pu2", + "label": "Pu2", + "description": "probability to be accessible for seq2", + "numeric": true + }, + { + "key": "E_init", + "label": "E_init", + "description": "initiation energy", + "numeric": true + }, + { + "key": "E_loops", + "label": "E_loops", + "description": "sum of loop energies (excluding E_init)", + "numeric": true + }, + { + "key": "E_dangleL", + "label": "E_dangleL", + "description": "dangling end contribution of base pair (start1,end2)", + "numeric": true + }, + { + "key": "E_dangleR", + "label": "E_dangleR", + "description": "dangling end contribution of base pair (end1,start2)", + "numeric": true + }, + { + "key": "E_endL", + "label": "E_endL", + "description": "penalty of closing base pair (start1,end2)", + "numeric": true + }, + { + "key": "E_endR", + "label": "E_endR", + "description": "penalty of closing base pair (end1,start2)", + "numeric": true + }, + { + "key": "E_hybrid", + "label": "E_hybrid", + "description": "energy of hybridization only = E - ED1 - ED2", + "numeric": true + }, + { + "key": "E_norm", + "label": "E_norm", + "description": "length normalized energy = E/ln(length(seq1)*length(seq2))", + "numeric": true + }, + { + "key": "E_hybridNorm", + "label": "E_hybridNorm", + "description": "length normalized energy of hybridization only = E_hybrid / ln(length(seq1)*length(seq2))", + "numeric": true + }, + { + "key": "E_add", + "label": "E_add", + "description": "user provided energy shift", + "numeric": true + }, + { + "key": "seedStart1", + "label": "seedStart1", + "description": "start index of the seed in seq1", + "numeric": true + }, + { + "key": "seedEnd1", + "label": "seedEnd1", + "description": "end index of the seed in seq1", + "numeric": true + }, + { + "key": "seedStart2", + "label": "seedStart2", + "description": "start index of the seed in seq2", + "numeric": true + }, + { + "key": "seedEnd2", + "label": "seedEnd2", + "description": "end index of the seed in seq2", + "numeric": true + }, + { + "key": "seedE", + "label": "seedE", + "description": "overall energy of the seed only (including accessibility etc)", + "numeric": true + }, + { + "key": "seedED1", + "label": "seedED1", + "description": "ED value of seq1 of the seed only (excluding rest)", + "numeric": true + }, + { + "key": "seedED2", + "label": "seedED2", + "description": "ED value of seq2 of the seed only (excluding rest)", + "numeric": true + }, + { + "key": "seedPu1", + "label": "seedPu1", + "description": "probability of seed region to be accessible for seq1", + "numeric": true + }, + { + "key": "seedPu2", + "label": "seedPu2", + "description": "probability of seed region to be accessible for seq2", + "numeric": true + }, + { + "key": "w", + "label": "w", + "description": "Boltzmann weight of the interaction energy", + "numeric": true + }, + { + "key": "Eall", + "label": "Eall", + "description": "ensemble energy of all interactions (outConstraint.needZall)", + "numeric": true + }, + { + "key": "Eall1", + "label": "Eall1", + "description": "ensemble energy of all intra-molecular structures of seq1", + "numeric": true + }, + { + "key": "Eall2", + "label": "Eall2", + "description": "ensemble energy of all intra-molecular structures of seq2", + "numeric": true + }, + { + "key": "Zall", + "label": "Zall", + "description": "partition function of all interactions (outConstraint.needZall)", + "numeric": true + }, + { + "key": "Zall1", + "label": "Zall1", + "description": "partition function of all intra-molecular structures of seq1", + "numeric": true + }, + { + "key": "Zall2", + "label": "Zall2", + "description": "partition function of all intra-molecular structures of seq2", + "numeric": true + }, + { + "key": "EallTotal", + "label": "EallTotal", + "description": "total ensemble energy (Eall+Eall1+Eall2) of all interactions including the intra-molecular ensemble energies (outConstraint.needZall)", + "numeric": true + }, + { + "key": "P_E", + "label": "P_E", + "description": "probability of mfe within interaction ensemble (outConstraint.needZall)", + "numeric": true + }, + { + "key": "RT", + "label": "RT", + "description": "the scaled temperature used for Boltzmann weight computation", + "numeric": true + } +]; + +// Every native column appears once. Ensemble energies and their components are +// grouped with probabilities so users can see the cost/meaning of those outputs. +export const CSV_GROUPS = [ + { label: 'Energy', keys: ['E', 'ED1', 'ED2', 'E_init', 'E_loops', 'E_dangleL', 'E_dangleR', 'E_endL', 'E_endR', 'E_hybrid', 'E_norm', 'E_hybridNorm', 'E_add', 'seedE', 'seedED1', 'seedED2'] }, + { label: 'Output', keys: ['subseqDP', 'subseqDB', 'hybridDP', 'hybridDB', 'hybridDPfull', 'hybridDBfull', 'bpList'] }, + { label: 'Sequence', keys: ['id1', 'id2', 'seq1', 'seq2', 'subseq1', 'subseq2'] }, + { label: 'Interaction', keys: ['start1', 'end1', 'start2', 'end2', 'seedStart1', 'seedEnd1', 'seedStart2', 'seedEnd2'] }, + { label: 'Partition Function', keys: ['Pu1', 'Pu2', 'seedPu1', 'seedPu2', 'w', 'Etotal', 'Eall', 'Eall1', 'Eall2', 'Zall', 'Zall1', 'Zall2', 'EallTotal', 'P_E', 'RT'] }, +]; + +export function defaultColumns(task) { + const context = ['id1', 'start1', 'end1', 'id2', 'start2', 'end2', 'subseqDP', 'hybridDP', 'E']; + // Seed energies remain available in evaluation, where native output is NAN. + // List them explicitly: seedEnd1/2 are coordinates, not energy columns. + const extra = task === 'evaluation' + ? [...CSV_CATALOG.filter(({ key }) => key.startsWith('E')).map(({ key }) => key), 'seedE', 'seedED1', 'seedED2'] + : ['ED1', 'ED2', 'seedE', 'seedStart1', 'seedStart2']; + return [...new Set([...context, ...extra])]; +} diff --git a/gui/docs/json-workflow.md b/gui/docs/json-workflow.md new file mode 100644 index 00000000..1c2d9dee --- /dev/null +++ b/gui/docs/json-workflow.md @@ -0,0 +1,150 @@ +# JSON settings and reproducible runs + +The action bar starts with Compute/Evaluate, followed by Input Parameters: +Examples, Store, Load and Reset. Store downloads +`parameter.json` containing non-default settings and embedded input text in the +[native JSON format](../../doc/json-parameters.md). `_comment` records compiled +tool/library versions and executable reproduction commands. It is JSON metadata, +not a nonstandard comment syntax. Settings can be saved before sequences are +complete; Compute still validates the complete job before loading WASM. + +Load validates the complete document before replacing the form, including the +task, signed start indices, input text, CSV selection/order and additional +outputs. Malformed documents and settings the browser cannot represent leave +the form unchanged with an error. Native-only settings and external file paths +must be used in the CLI; the browser requires embedded text. JSON uploads are +limited to 5 MB. The application never uploads these files to a server. + +ZIP uses the same serializer on the completed run, including normalized FASTA. +It contains **only** `parameter.json` and output files. Native replay uses: + +```sh +IntaRNA --parameterFile=parameter.json --out=intarna-interactions.csv +``` + +Additional report commands are listed in `_comment`. They override `outMode` +and CSV-only settings while retaining the same inputs and analysis settings. +Reports run independently, matching the worker. The WASM integration test +replays the JSON in fresh engines and compares every output byte. + +## Computed sessions + +Each successful computation, including a run with no interaction rows, creates a +new session with a unique ID within the page and a default name such as +`Prediction 1` or `Evaluation 2`. The session retains the computed inputs in JSON, +CSV output, additional files and diagnostics. Editing parameters, Load, examples, +Reset, invalid inputs, failed computations and cancellation preserve prior +sessions. Failed or aborted computations do not create a session. + +The newest session opens automatically under **Results**. Use **Show**, select +its header/name, or select its output area to restore that session’s +computed inputs and fold the other sessions. The task, sequence text, signed +indices, SHAPE/accessibility text, CSV selection/order and additional output +selection are restored together. **Hide** folds the output. Each session +keeps its own filter, sorting and visible columns; folded vaRRI frames are unloaded +and restored when their session is reopened. + +Edit **Session name** directly in the header. Names are plain text; an empty name +returns to the default. **Download ZIP** remains available while folded and always +archives that session’s original JSON and complete outputs, regardless of the +current form or table filters. The session name supplies a safe download filename; +ZIP members remain `parameter.json` and output files. The garbage-bin button +removes only its session and releases its output; it does not change form inputs. + +Sessions exist only in the current page’s browser memory. They are not written to +browser storage or uploaded. Reloading or closing the page discards them; use ZIP +exports to retain results. Memory use grows with the runs kept open, so delete +sessions that are no longer needed. Store continues to save the editable form. +If compiled metadata cannot be fetched, a completed run is still retained and its +JSON explicitly records that version information is unavailable. + +## Reset and examples + +Reset clears the editable sequences, interactions and uploaded files and restores +prediction defaults (10 interactions per pair, expanded energy/seed columns). +Evaluation defaults select all energy columns. These GUI defaults are written +explicitly in JSON when they differ from the CLI; importing existing JSON still +uses native defaults for omitted parameters. Inactive controls keep their edits +in the form for switching modes, but their values are omitted from executed and +stored settings. Previously computed sessions remain available. Empty FASTA +fields show the short demonstration sequences as placeholders only. The Examples +disclosure menu follows the Input Parameters label and lists only examples for +the selected Prediction or Evaluation task. + +Maintainers edit `gui/examples/index.json` (an array of local JSON filenames). +Each listed file contains `name`, `description`, and `configuration`, where the +configuration is the same native JSON document used by Load. Two replaceable +examples cover prediction and evaluation. Loading validates their settings and +sequences through the same importer and computation validator. Missing or invalid +examples show an error in the menu; they never overwrite the form. + +## Local FASTA files + +Each strand has an Upload button and accepts a text-file drop into its textarea. +Files are read locally (at most 1 MB), validated with the same FASTA checks as +manual entry, and replace only that strand after successful validation. Prediction +accepts up to 50 FASTA records per strand, each 2–5,000 nt; evaluation requires +one record. The longest selected query × longest selected target must be at most +1,000,000. Names end at the first whitespace; ignored header descriptions produce +a warning below the corresponding field. Both FASTA fields scroll horizontally +and vertically. Invalid files leave the +previous input intact. A later edit, reset, import or computation discards any +pending file read, so delayed reads cannot replace newer input. + +## Validation of the PR #287 revision (2026-10-23) + +- GCC 14 release and debug: `make tests -j2` passed all nine API/CLI groups, + including `runParameterFile.sh`. The existing out-of-tree CLI fixture harness + required source data files linked into each build's `tests/data` directory. +- `npm test --prefix gui`: all 18 tests passed. +- Emscripten 4.0.23 / ViennaRNA 2.7.2 / Boost 1.87.0: actual WASM build, + `node scripts/wasm/smoke.mjs` and `node scripts/wasm/smoke-protocol.mjs` passed. + Exported JSON reproduced selected CSV, signed/multiple sequences, additional + outputs and reports byte for byte in fresh engines. +- `scripts/wasm/test-browser.py` passed in Chromium and Firefox at a nested URL, + covering blank startup/reset, both JSON examples, Load/Store round trips, + FASTA file upload/drop, stale-read protection, task keyboard controls, JSON ZIP + contents, result exploration, cancellation/recovery and mobile overflow. + The desktop screenshot was inspected. +- Embedded ViennaRNA energy-parameter text matched native file input. Existing + dependency-download and ViennaRNA-release tests, shell syntax, workflow YAML, + source-distribution contents, vendor checksums and `git diff --check` passed. + +## Session follow-up validation (2026-10-23) + +- `npm test --prefix gui`: all 18 Node tests passed. +- `scripts/wasm/test-browser.py` passed in Chromium and Firefox with real WASM + at nested URLs. Session checks cover input/JSON restoration, task changes, + signed indices, SHAPE text, CSV order, reports, independent filters/columns, + edits/reset/imports, failed/aborted runs, keyboard selection, safe renaming, + folded-session archives, deletion, stale file reads and page reload. +- Desktop screenshots were inspected; session controls remain accessible at a + 390 px viewport without document overflow. +- `node scripts/wasm/smoke-protocol.mjs` passed native-reference checks and + byte-identical archive replay. Browser checks reused the parent branch’s + compiled Emscripten 4.0.23 / ViennaRNA 2.7.2 assets with their original metadata; + this follow-up changes no C++ code or worker protocol. +- A fresh GCC 14 release build passed `make tests -j2`: all nine native API/CLI + groups passed. Tracked fixtures were linked into the out-of-tree build’s + `tests/data` directory for the existing CLI harness. +- Static staging (including the new session module and engine digest checks), + shell syntax and `git diff --check` passed. + +## PR #299 review validation (2026-10-24) + +- `npm test --prefix gui`: all 20 tests passed, including FASTA limits, header + warnings, complete column grouping and explicit browser-default JSON replay. +- `scripts/wasm/test-browser.py` passed with real WASM in Chromium and Firefox. + It covers the reordered panels, aligned controls, shared accessibility flags, + seed/accessibility/helix modes, inactive values, explicit-seed Load/Store, + group selection, FASTA scrolling/warnings and result header/name selection, + plus the existing prediction/evaluation, ZIP, abort and session checks. +- Desktop and 390 px mobile screenshots were inspected. All seven panels have + no document overflow; table contents retain their own horizontal scrolling. +- `node scripts/wasm/smoke-protocol.mjs ` passed native-reference + checks and byte-identical JSON archive replay. The unchanged engine uses the + parent branch's Emscripten 4.0.23 / ViennaRNA 2.7.2 assets and original metadata. +- A fresh GCC 14 release build passed `make tests -j2`: all nine API/CLI groups. + Existing CLI fixtures were linked into the out-of-tree `tests/data` directory. +- Static staging with engine digest validation, JavaScript/Python syntax checks, + shell syntax and `git diff --check` passed. diff --git a/gui/docs/step1-wasm-compilation.md b/gui/docs/step1-wasm-compilation.md new file mode 100644 index 00000000..dc09f76c --- /dev/null +++ b/gui/docs/step1-wasm-compilation.md @@ -0,0 +1,121 @@ +# Step 1: WebAssembly compilation (#286) + +`scripts/wasm/build.sh` cross-compiles the unmodified CLI entry point and the +Autotools library source lists. `.github/workflows/build-wasm.yml` uses the official +[setup-emsdk action](https://github.com/emscripten-core/setup-emsdk) with Emscripten +4.0.23. It runs on pull requests, pushes to this repository's `master` branch, +and manual dispatches. Build tools (Autotools, pkg-config, a native C++ compiler, +curl, tar and bzip2) must be available. + +## Reproduce locally + +Activate Emscripten 4.0.23 with `source /path/to/emsdk/emsdk_env.sh`, then run: + +```sh +bash scripts/wasm/build.sh +node scripts/wasm/smoke.mjs +node scripts/wasm/smoke-protocol.mjs +``` + +`WASM_BUILD_DIR` changes the build directory; `JOBS` defaults to 2. Local builds +pin ViennaRNA 2.7.2 and its official GitHub release asset SHA-256 in +`scripts/wasm/vienna-release.json`. On every run, the GitHub workflow resolves +the newest stable **2.x** release (at least 2.7.2), excludes drafts/prereleases +and major 3, and uses the asset's published SHA-256. Selection compares numeric +versions across all API pages, rather than using GitHub's `/latest` endpoint. +Missing release assets, digests or failed API requests stop the build. + +To use that same selection locally (optionally set `GITHUB_TOKEN` for API limits): + +```sh +python3 scripts/wasm/vienna-release.py --latest > /tmp/vienna-release.json +WASM_VIENNA_RELEASE=/tmp/vienna-release.json bash scripts/wasm/build.sh +``` + +Keep the resolved manifest to reproduce that exact release later with +`WASM_VIENNA_RELEASE`. `build-info.json` and `build-info.txt` record the selected +archive URL and checksum as well as the actual compiled library version. + +Source archives are downloaded into `build-wasm/downloads` and verified by the +selected SHA-256 hashes on every invocation. Use the official GitHub release +asset, rather than an autogenerated source archive; the university endpoint +returned an HTTP 200 text response instead of the archive in PR #291's build. +`scripts/wasm/download.sh` removes invalid cached archives and checks new +downloads before moving them from `.part` into the cache. Failed transfers and +checksum mismatches leave no cached archive or partial file, so a subsequent +build can retry. Run `python3 scripts/wasm/test-downloads.py` to check download, +cache recovery and failure handling against a local HTTP server, and +`python3 scripts/wasm/test-vienna-release.py` for release selection and manifest +validation, without an SDK or external network access. The build directory is +ignored. ViennaRNA sources, its installation prefix and IntaRNA objects are +separated by the selected version and checksum, so upgrades cannot reuse an +older RNAlib or IntaRNA object cache (including the old 2.7.0 prefix). zlib and +Boost use a separate `build-wasm/deps/common` prefix, so legacy ViennaRNA headers +cannot override the selected release through Boost's include path. Their caches +remain reusable across ViennaRNA upgrades. Delete the build directory for a fresh build +after changing compiler flags or SDKs. Native libraries are never accepted +from system pkg-config paths. + +The script supplies absolute source and generated-header include paths for the +out-of-tree IntaRNA build, and uses generated files from the build directory. +ViennaRNA also needs an explicit source include path when its no-SVM build +omits the target's normal include flags. ViennaRNA 2.7.2 bundles dlib 20.0, +which already supports modern libc++; no downloaded sources are patched. +Staging takes the ViennaRNA, dlib and Naview notices from the source archive +identified by the compiled provenance, and displays their selected versions. + +The legacy Boost and zlib configure macros declare dummy test functions with +incorrect signatures (`exit()` and `inflateEnd()`), which wasm-ld correctly +rejects. Before caching just those probes, `dependency-probe.cpp` links and executes actual +filesystem, regex, options, archive, gzip and RNAlib APIs against the WASM +libraries. Configure still checks C++23, headers, serialization and RNAlib APIs; +the smoke test executes the real prediction. `VRNA_LIBS` supplies the static +RNAlib link flags because the upstream `.pc` includes native-only linker flags. + +## Dependencies and runtime + +- zlib 1.3.1: static library for compressed accessibility and Boost.Iostreams. +- Boost 1.87.0: headers plus static filesystem, program_options, regex, + iostreams, serialization and system libraries, built with Boost.Build's + Emscripten toolset. Optional bzip2, lzma and zstd backends are disabled. +- ViennaRNA 2.7.2 locally, newest stable 2.x in CI: static RNAlib, without OpenMP, pthreads, SIMD, external + solvers, bindings, documentation or companion applications. Compiling only + RNAlib avoids executing cross-compiled helper applications on the host. +- IntaRNA: C++23, bundled Kokkos mdspan, standard CLI, default energy models + and accessibility calculations. Single-thread Emscripten builds omit + `-pthread`; native builds retain their existing threading flags. + +All C++ compilation and linking enables exceptions (`-fexceptions`), including +Boost (`exception-handling-method=js`) and the CLI's input/error handling. The SDK's single-thread mutex support +retains ViennaRNA's normal setup/logger locking without requiring browser +`SharedArrayBuffer` or COOP/COEP headers (unavailable on ordinary GitHub Pages). + +The output is an ES module factory (`createIntaRNA`) in +`build-wasm/site/wasm/intarna.js`, paired with `intarna.wasm`. The factory does +not run main automatically; it exports `FS` and `callMain`. The runtime exits +and flushes C++ streams after one call. Each prediction must use a new instance. +Memory grows on demand to a maximum of 1 GiB; stack size is 8 MiB. Allocation +failure is reported as a failed prediction; devices may impose lower limits. + +See [Emscripten's Autotools guidance](https://emscripten.org/docs/compiling/Building-Projects.html) +for `emconfigure`/`emmake`. Generated configure files, dependency sources and WASM +binaries are build outputs, not tracked source. The artifact must keep JS and +WASM from the same build together. The Node smoke test runs real +Turner/default-accessibility predictions and checks energy, coordinates, +nonzero accessibility costs, suboptimal counts and C++ error handling against +the native CLI. + +## Compiled version information and virtual overrides (PR #287 review) + +After copying the paired JS/WASM assets, `write-build-info.mjs` invokes their +actual `--version` entry point. It records IntaRNA package version, ViennaRNA and +Boost versions, source repository/revision and dirty status, Emscripten version, +zlib version and asset hashes in `build-info.txt` and `build-info.json`. The +interface displays those versions and links both files. Staging checks the +hashes and preserves provenance even if the staging checkout has moved. + +IntaRNA's inherited virtual methods and destructors declare `override`, including +previously unannotated energy/accessibility, seed/helix, predictor and output +families. The Emscripten build treats inconsistent missing overrides as errors. +Vendored Easylogging++ remains unchanged. This annotation-only C++ change does +not alter algorithms, virtual extension points or scientific defaults. diff --git a/gui/docs/step2-worker-architecture.md b/gui/docs/step2-worker-architecture.md new file mode 100644 index 00000000..018d3470 --- /dev/null +++ b/gui/docs/step2-worker-architecture.md @@ -0,0 +1,35 @@ +# Step 2: worker and I/O architecture (#286, PR #287 review) + +`PredictionRunner` creates one module Web Worker per task and sends sequence +text, task, start indices, validated parameter values, CSV column IDs, optional +output IDs and evaluation structures. It receives status, result or error +messages. `prepareRequest` validates both the UI and worker boundary; argument +construction only accepts schema keys, enumerated output formats and fixed paths. + +The worker imports `wasm/intarna.js`, maps `locateFile` to the lowercase WASM +asset and creates an isolated `createIntaRNA` instance. It writes one `/parameter.json` document using the native +[JSON contract](../../doc/json-parameters.md), embedding normalized multi-FASTA +and SHAPE/accessibility text. Each invocation passes only +`--parameterFile=/parameter.json`. CSV is written to `/results.csv`; +additional native output prefixes write files under `/output/`. Multi-FASTA +filenames use the CLI's native record-number suffixes. + +Main is called once per WASM instance, keeping C++ globals, RNAlib state and files +isolated. Optional ASCII/detailed/ensemble reports each use another fresh +instance with the same inputs/settings. This costs an additional computation per +report and is explained next to those controls. Files are read only after main +returns and streams close. The worker sends CSV, selected columns, additional +file text and bounded diagnostics (25 lines, 2,000 characters each). Nonzero +exits and JS/runtime failures settle as errors, without partial successful files. + +Both success and failure terminate the worker. Abort uses `Worker.terminate()` +on the main thread and immediately rejects with `AbortError`, including during +synchronous C++ execution. Stale messages are ignored and the next task starts +fresh. Computation never uploads or persists inputs. Selecting a result to +visualize it loads the external vaRRI viewer with that pair and its structure +in the URL. The iframe is cleared on input edits; no third-party viewer is +loaded before selection. No backend, shared memory or cross-origin isolation +is needed for computation. A single WASM instance can grow up to 1 GiB. + +Run `npm test --prefix gui`, then the native-reference WASM smoke tests +and Chromium/Firefox suites described in step 4. diff --git a/gui/docs/step3-frontend-ui.md b/gui/docs/step3-frontend-ui.md new file mode 100644 index 00000000..3e41faf5 --- /dev/null +++ b/gui/docs/step3-frontend-ui.md @@ -0,0 +1,109 @@ +# Step 3: browser controls (#286, PR #287 review) + +## Design and layout + +The interface follows [vaRRI main-v2](https://github.com/BackofenLab/vaRRI/tree/main-v2): +header indigo `#344a9a`, action blue `#145a96`, dark blue `#0f4676`, pale blue +`#eaf2f8`, white `#ffffff` and focus gold `#f4bb44`. Segoe UI/Tahoma/Geneva serve +labels and body text; Consolas/Liberation Mono serve sequence and structure data. +The official group and university logos share the header with the IntaRNA mark. +Their local copies and source attribution are in `gui/assets/`. + +The layout puts the scientific task first, then mutually exclusive parameter +groups, followed by the compute button, results, additional files and versions. +All working content is left aligned; two equally sized strand editors collapse +into one column on mobile. The shared institutional header is the strongest +visual element. The wrapping tab bar identifies parameter groups. Numeric inputs +are at most 9 rem wide within bounded, left-aligned row grids; select/text inputs +use compact type-specific tracks and text/data fields retain useful width. Rows +keep their scientific grouping without stretching across the complete panel, +use 16 px horizontal gaps and bottom-align labels above their controls. +The Seed tab places the constraint selector (12 rem) beside Explicit seeds on +desktop; the CSV sort selector uses a 19 rem track. Both controls stack at mobile +widths. +The institutional link reads “Bioinformatics - University of Freiburg” and opens +the group website. Footer and table notes use the available width, wrapping only +when the viewport requires it. + +```text +Group logo IntaRNA package / RNA–RNA interaction analysis University logo +RNA–RNA interactions Computations stay on your device +Task: Prediction / Evaluation +[ Sequences | Seed | Output | CSV | Model & Energy | Query | Target | CLI-only ] +[ Active panel: e.g. query + target, start indices, evaluation structures ] +Compute Input Parameters: Examples / Store / Load / Reset +Results / Show-Hide / name / ZIP download / delete +Interactions / search / show-hide columns / CSV download +Selected interaction / embedded vaRRI +Additional output files / diagnostics / compiled versions +``` + +Every CLI group has a tab with one visible panel. Sequences is selected +initially. Tabs expose `aria-selected`, `aria-controls` and roving focus; Left/Right +move between available tabs, and Home/End select the first/last. Tab names wrap +on narrow screens. Prediction-only tabs and controls are disabled/hidden during +evaluation; if the selected tab becomes unavailable, Sequences is selected. +Changing task resets parameters to their task defaults while preserving sequence text; Load example also restores the +complementary pair. The browser defaults to 10 interactions per pair (the native default remains +one), and accepts 0–100. Zero enables accessibility-only output. + +## Inputs, defaults and validation + +`options.js` defines labels, types, defaults and ranges from +`src/bin/CommandLineParsing.cpp`. `protocol.js` validates them on both sides of +the worker boundary. Query/target retain their distinct interior-loop defaults +(16 and 10). Meta-options such as `acc`, `accW`, `accL`, `intLenMax` and +`intLoopMax` are represented by per-strand controls to avoid conflicting values. +FASTA headers supply sequence names instead of `qId`/`tId`. The dedicated CSV +tab contains `outCsvSort` and the interaction-table column choices; Output keeps +prediction filters and additional file formats. `outCsvSort` selects a native +download sort column; table sorting is independent. +CSV uses a fixed semicolon delimiter. +Process settings (threads, file/log paths, parameter files, help/version commands) +are replaced by the worker lifecycle, local data inputs, downloads and displayed +compiled versions. The base-pair maximization energy model is intentionally +excluded. The helix-block interaction model B is supported, with helix controls at the end +of Model & Energy, enabled only for model B. Seed constraint offers Disable, +Explicit seed and Identify seeds, enabling only the relevant controls. Query and +Target include their own accessibility/SHAPE columns and synchronized copies of +the two shared accessibility flags. Ignore disables accessibility controls; +import modes disable window/span and enable the data input. Disabled settings +remain editable when re-enabled but do not enter the request. Explicit row grids +align inputs even when their labels wrap. + +CSV columns are grouped as Energy, Output, Sequence, Interaction and Partition +Function, with per-group selection actions and name-only labels with description +tooltips. Prediction adds ED1, ED2, seedE, seedStart1 and seedStart2 to the native +CSV columns; evaluation selects all energy outputs. JSON records these browser +defaults explicitly so native replay retains the same output. +Every additional output checkbox has a descriptive tooltip covering its content, +format and intended use, including the model restrictions shown in its label. + +Prediction accepts plain sequence or up to 50 FASTA records per strand. +Evaluation requires one query and target and 1–100 predefined structures. +Wrapped/lowercase sequence text and DNA T normalize to uppercase RNA U. A/C/G/U/N +are accepted. Each record is 2–5,000 nt; seed predictions additionally require +at least `seedBP` nucleotides. FASTA IDs end at the first whitespace, matching the CLI. Duplicate IDs (including collisions after +native CSV semicolon replacement) are rejected. Ignored header descriptions are reported below the input. The longest selected +query length × longest selected target length is capped at 1,000,000, including +pairwise mode; the cap is not summed over records. +The per-strand start index applies to all records and defaults to one. Negative +indices skip zero, matching `RnaSequence`; output coordinates remain inclusive. + +Evaluation encodes target then query in 5′ to 3′ dot-bar notation, such as +`1|||&1|||`, separated by colons. Bars pair antiparallel. Validation checks bounds, +equal nonzero pair counts and AU/GC/GU complementarity. Evaluation retains energy, +accessibility and SHAPE controls while excluding prediction/seed/helix/region +and output-filter constraints, matching the native personality. + +Validation also covers numeric ranges, accessibility windows/spans, selected +FASTA subsets, regions, structural constraints, seed/helix compatibility, +probability-output requirements and window restrictions. SHAPE and RNAplfold +accessibility text can be pasted or loaded from a local file (up to 1 MB). Data +are written to fixed MEMFS paths, never used as user-provided CLI arguments. +Native diagnostics remain available for model-specific failures. + +Edits update the form while completed sessions retain their inputs and results; +the form disables during execution. Abort and Escape terminate the worker during startup or C++ execution. Status, errors, +empty output and diagnostic text have dedicated regions. Keyboard focus, +reduced motion and mobile overflow are covered by real browser tests. diff --git a/gui/docs/step4-results-and-deployment.md b/gui/docs/step4-results-and-deployment.md new file mode 100644 index 00000000..451181bf --- /dev/null +++ b/gui/docs/step4-results-and-deployment.md @@ -0,0 +1,249 @@ +# Step 4: results and Pages deployment (#286) + +## Results contract + +The CSV checklist covers all `OutputHandlerCsv` column IDs. The worker requests +those columns plus internal target/query IDs, coordinates, energy and `hybridDP` +needed for pair grouping, result validation and visualization. Downloads project the untouched native CSV +cells onto the user's selected columns, in selection order, retaining every row +regardless of table filtering/visibility. No computed mfe difference is inserted +into native CSV. The selected-column catalog is checked against the C++ mapping. + +Native output is unquoted and semicolon-delimited. Semicolons in IDs become +underscores; quotes remain literal. The parser checks column IDs, finite core +energy/coordinate values, integer inclusive coordinates and ascending bounds. +Signed coordinates are allowed. Optional `NAN` and colon-separated seed lists +remain strings; numeric sorting puts unavailable/list values after numbers. + +Sequence 1 is **target**, sequence 2 is **query**. Energy uses kcal/mol. The +computed **mfe Δ** is `E - min(reported E for the same query–target pair)`, rounded +to hundredths. Evaluation uses the best supplied structure as its reference. +This is relative suboptimality, not a free-energy change or probability. + +Every heading is a keyboard-operable sort button with `aria-sort`. Search covers +all returned values. A separate checklist shows/hides table columns after the +run; it does not change selected CSV output. All identifiers, output previews +and diagnostics render with `textContent`. The table has a 500 px maximum height +with vertical scrolling for longer results and a sticky heading; CSV downloads +still contain every selected row. Selected extra files appear below the +table with their original filename, covered sequence/sequence-pair names, a +header-level download, and bounded text previews, including SVG source. +Empty output is successful and still permits CSV/accessibility downloads. + +## Additional output visualizations + +Plot-capable additional CSV files open on a Visualization tab, with the original +File Content in an adjacent tab. Query/target minimum-energy and spot-probability +profiles use line plots; pair minimum-energy and all-spot probability matrices +use heatmaps; explicitly requested spot probabilities use a bar plot. Plot axes +use the literal coordinate strings from IntaRNA rather than numerical scales, so +signed indices cross from -1 to 1 without inventing coordinate zero. Plot titles +and additional-file headers identify the target/query records covered by native +`-t#q#` or `-s#` filename suffixes. + +Plotly renders locally from the pinned Cartesian bundle. A separate Export PNG +button produces a 1400 × 850 image for the active plot; the normal file download +and reproducible ZIP retain untouched native data. Plots render lazily when their +file is unfolded, resize with restored sessions, and are purged when a session is +deleted. Non-plot formats keep the direct content view. + +## Selected interaction in vaRRI + +Each row has a keyboard-accessible View button; clicking a row also selects it. +Selection survives table sorting, filtering and visibility changes within each +session. Input edits, new runs, errors and cancellation preserve prior sessions +and their archive snapshots. Folding a session unloads its viewer; reopening +restores its selected interaction. +`visualization.js` uses native seq1 = target, seq2 = query and maps the native +CSV identifiers to the completed run's normalized FASTA records (including +semicolon-to-underscore ID conversion). It pads the interaction dot-bracket +structure with unpaired positions to the full input lengths, using each start +index and the native negative-to-positive transition that skips zero. + +The URL follows [vaRRI's embedding API](https://github.com/BackofenLab/vaRRI/blob/main-v2/docs/sharing-and-input.md): +`sequence`, `structure`, `seqName1/2`, `startIndex1/2`, and +`showRenderingOnly=true`. Names use the main-v2 API; older deployed vaRRI versions +may retain generic strand names. A separate Open in vaRRI link opens the full +viewer. The local status always identifies the selected pair and coordinates. +Zero-based CLI start indices remain accepted for computation/export, but vaRRI +requires nonzero start indices; choosing View for such a run explains this limit. + +No external viewer loads until a row is selected. The interface explains that +selection shares that pair and structure through vaRRI's URL. Computation and +ZIP generation remain local. CSP permits frames only at the vaRRI deployment; +the iframe sends no referrer. Viewer availability depends on that external site; +the full-viewer link permits retry, and scientific outputs remain downloadable. + +## Reproducible ZIP download + +Download ZIP sits in each session header, including while its output is folded. +`archive.js` creates a standard UTF-8, uncompressed ZIP with CRC-32 checksums locally, without a library or CDN. It uses +the completed request and result, independent of table sorting/filtering and +column visibility. Editing inputs preserves every completed snapshot. + +The archive contains only `parameter.json`, `intarna-interactions.csv`, and every +generated additional output with its original filename and contents. JSON embeds +normalized FASTA and any SHAPE/accessibility text, non-default settings, selected +CSV columns, compiled provenance and native replay commands in `_comment`. +Additional report commands override CSV-only settings and use another native +invocation, matching the worker. All JSON is valid with standard parsers. + +Load/Store use this same JSON format. Store snapshots the current editable form; +ZIP snapshots the completed run and ignores table filtering/sorting/visibility. +Store requires the compiled version file. Completed sessions still retain their +results if that file is unavailable, recording the missing version information +explicitly in JSON. See [the JSON workflow](json-workflow.md). + +## Packaging and deployment + +```sh +bash scripts/wasm/build.sh +node scripts/wasm/smoke.mjs +node scripts/wasm/smoke-protocol.mjs +bash scripts/wasm/stage.sh +npm test --prefix gui +python3 -m pip install -r scripts/wasm/requirements-browser.txt +python3 -m playwright install chromium firefox +python3 -m http.server 8765 --directory build-wasm/site +# In another terminal: +python3 scripts/wasm/test-browser.py http://127.0.0.1:8765 +python3 scripts/wasm/test-browser.py http://127.0.0.1:8765 --browser firefox +``` + +The staging script includes matched WASM assets, only the application source +files needed at runtime, compiled version metadata and dependency notices. It +also verifies and stages the pinned Plotly.js 4.1.2 Cartesian bundle and MIT +license; no CDN is used. Build-time `build-info.json` +and `build-info.txt` record actual CLI IntaRNA/ViennaRNA/Boost versions, source +commit and tracked modifications, SDK version and asset SHA-256 digests. Staging +checks these digests and preserves the original metadata; it never replaces the +compiled revision with a later staging checkout. The footer displays versions. +It needs the same activated SDK and dependency build directory as the build. +No generated WASM artifacts are committed; the reviewed minified Plotly browser +distribution is the only new runtime artifact. HTTP(S), module workers and WebAssembly +are required; `file://` and legacy browsers are unsupported. No backend, +SharedArrayBuffer, credentials, CDN or cross-origin headers are needed. CSP +keeps scripts/styles same-origin and allows ephemeral blob images solely for +PNG export. + +The existing repository already publishes its user guide and API with Pages. +Publishing a second independent artifact would overwrite them. Therefore +`documentation.yml` is now a reusable build (also manually dispatchable), and +`build-wasm.yml` is the **single publisher**. Both builds run on PRs (including dependent feature-branch PRs) and on +the actual default branch, `master`. After JS tests, the real WASM smoke test and +Chromium/Firefox integration tests pass, the package job combines: + +- Existing Jekyll guide at `/IntaRNA/` and API at `/IntaRNA/api/`. +- Tested application at `/IntaRNA/gui/`. + +The artifact `intarna-pages-preview` permits PR review of the complete site. +Pull requests and manual runs on feature branches do not publish. Only a push +or manual run on `BackofenLab/IntaRNA`'s `master` may upload the Pages artifact +and use the `github-pages` deployment environment. Pages permissions are scoped +to that deploy job. Concurrent deployments are serialized without cancellation. + +The repository's current Pages source is already **GitHub Actions**. A fork +would need that source enabled, its repository guard adjusted deliberately, and +an environment allowing its default branch. Existing environment protection +rules still apply. After merging this PR, check the workflow's deploy job and +its returned environment URL. This implementation PR does not merge itself or +claim that deployment happened before merge. + +## Validation scope + +Node tests cover input boundaries, lifecycle races, parser failures, numeric +sorting and suboptimal differences. The WASM smoke test compares a real +Turner/default-accessibility prediction with the native reference. Browser +integration runs real WASM (no mocked scientific results), checking coordinates, +energy, sorting, filtering, CSV download, mobile overflow, abort during download +and active C++, clean restart, empty predictions and asset-load recovery. + +### Local verification, 2026-10-20 + +- Emscripten 4.0.23 with the exact SHA-256-pinned official archives: successful + dependency probe, cross-build and real WASM smoke test. The structured-strand + reference reports E = -28.04, ED1 = 4.60, ED2 = 4.86 kcal/mol; the short example + reports E = -21.40 with target/query coordinates 1–10 and ten suboptimals. + Invalid CLI input returns a nonzero status through C++ error handling. +- `npm test --prefix gui`: all five input/lifecycle/CSV test groups pass. +- Playwright 1.64.0, Chromium and Firefox: full integration suite passes with the + official-dependency engine, including a nested `/site/` URL as used by Pages, + active-C++ cancellation, literal HTML-like identifiers and retry after failure. + Desktop screenshot visually reviewed; 390 px viewport has no page overflow. +- Native release build with OpenMP, conda GCC 16.2.0 and ViennaRNA 2.7.2: + `make tests -j2` passes all eight API/CLI groups, including 462,689 assertions + across 119 API cases. For the separate build directory, tracked `tests/data` + fixtures were linked into the build's data directory because the existing + shell harness discovers fixtures relative to its working directory. +- Shell syntax, workflow YAML parsing and `git diff --check`: pass. + +GitHub's platform checks independently cover GCC 14 release/debug and Apple +Clang. Deployment itself occurs only after merge; local browser tests do not +claim a live Pages deployment. + +### PR #287 visualization review verification, 2026-10-26 + +- `npm test --prefix gui`: all 25 protocol, results, output-visualization, + archive, upload and worker tests pass. Profile and matrix cases cover signed + categorical coordinates, sequence names, missing values and malformed data. +- Playwright 1.64.0 with Chromium 156 and Firefox 157 passes the full real-WASM + suite, including the compact desktop/mobile parameter layout, separate CSV + tab, output tooltips, native-file headers, Plotly rendering and a PNG whose + signature is checked after download. The staged GUI uses the matching + revision `7378801` engine; scientific code and compiled assets are unchanged. +- Desktop screenshots for every parameter tab and the completed session were + visually reviewed; the 390 px viewport has no document overflow. +- Plotly 4.1.2 is pinned by npm integrity and bundle SHA-256, staged locally with + its MIT license. Shell/Python syntax and `git diff --check` pass. + +### PR #287 review verification, 2026-10-21 + +- Emscripten 4.0.23 rebuild using the pinned official dependency archives passes + with `-Werror=inconsistent-missing-override`. An all-public-header audit using + `-Wsuggest-override -Wsuggest-destructor-override` reports no project override + diagnostics (third-party Easylogging++ is intentionally unchanged). +- `node scripts/wasm/smoke.mjs` retains the original native-reference energy, + coordinates, structured accessibility and C++ error-handling checks. +- `node scripts/wasm/smoke-protocol.mjs` passes real CLI translations for default + prediction, shifted negative coordinates, all-vs-all/pairwise multi-FASTA, + evaluation with all CSV columns, extra reports/probability SVGs, imported + accessibility and non-default energy/seed/helix/SHAPE/overlap settings. + Native imported accessibility reserves one length column for dangling-end + treatment; its energy is compared with the corresponding restricted native + interaction length rather than the unrestricted prediction. +- `npm test --prefix gui`: ten protocol/results/lifecycle groups pass. +- Real Chromium/Firefox integration covers all parameter groups, CLI defaults, + compiled versions/logos, task changes, multiple records, signed coordinates, + selected/visible CSV columns, additional previews/downloads and the original + cancellation, empty/error, literal-ID and mobile checks. Desktop screenshot + reviewed; the 390 px viewport has no document overflow. +- Native OpenMP release build with GCC 16.2.0/ViennaRNA 2.7.2: + `make tests -j3` passes all eight groups, including 462,689 assertions across + 119 API cases. Tracked CLI fixtures are linked into the separate build data + directory as in the previous verification; expected results are unchanged. +- Staging preserves compiled metadata byte-for-byte; a deliberately changed + copied JS engine is rejected by its asset digest check. Shell syntax, + workflow YAML, Python syntax and `git diff --check` pass. + +### PR #287 follow-up verification, 2026-10-22 + +- All 12 Node test groups pass, including coordinate/strand mapping, non-default + export settings, auxiliary inputs and report configurations. +- `node scripts/wasm/smoke.mjs` and `node scripts/wasm/smoke-protocol.mjs` pass + using the previously compiled Emscripten 4.0.23 engine (revision `fc62a23`). + The latter executes exported parameter files in fresh engines with only + archived inputs and verifies byte-identical CSV, per-record outputs, + probability SVGs and ASCII/detailed/ensemble reports. Cases include signed + multi-FASTA, changed energy/seed settings, SHAPE and accessibility imports. +- Chromium 156 and Firefox 157 with Playwright 1.64.0 pass the real-WASM browser + suite at a nested URL. It covers tab keyboard behavior, selection/encoded + viewer URLs, Python `zipfile` validation of downloaded ZIP contents, hidden + CSV columns, evaluation reports, empty results and the existing lifecycle + checks. Only the third-party iframe response is stubbed in CI; computation + runs the real engine. Desktop/parameter/mobile screenshots were reviewed. +- A separate live Chromium check renders RNA base circles in the actual hosted + vaRRI iframe. An independent Python `zipfile` check verifies CRCs, Unicode + filenames/data and empty files in the ZIP writer's output. +- Native `make tests -j2` passes all eight API/CLI groups (462,689 assertions in + 119 API cases). No C++ or compiled engine changes were needed for this follow-up. +- Staging, shell/Python syntax and `git diff --check` pass. diff --git a/gui/examples/evaluation.json b/gui/examples/evaluation.json new file mode 100644 index 00000000..e019806f --- /dev/null +++ b/gui/examples/evaluation.json @@ -0,0 +1,18 @@ +{ + "name": "Evaluate a duplex", + "description": "Evaluate the energy of a supplied ten-base-pair RNA interaction.", + "configuration": { + "schema": "IntaRNA-parameters-v1", + "parameters": { + "personality": "IntaRNAeval", + "query": { + "text": ">ncRNA1\nAGGAUGGGGGAAACCCCAUACUCCUCACACACCAAAUCGCCCGAUUUAUCGGGCUUUUUU\n" + }, + "target": { + "text": ">mRNA1\nUUUAAAUUAAAAAAUCAUAGAAAAAGUAUCGUUUGAUACUUGUGAUUAUACUCAGUUAUA\nCAGUAUCUUAAGGUGUUAUUAAUAGUGGUGAGGAGAAUUUAUGAAGCUUUUCAAAAGCUU\nGCUUGUGGCACCUGCAACUCUUGGUCUUUUAGCACCAAUGACCGCUACUGCUAAU\n" + }, + "rri": "85|||||||||||&21||||||||.|||", + "outCsvCols": "id1,start1,end1,id2,start2,end2,subseqDP,hybridDP,E,Etotal,ED1,ED2,E_init,E_loops,E_dangleL,E_dangleR,E_endL,E_endR,E_hybrid,E_norm,E_hybridNorm,E_add,Eall,Eall1,Eall2,EallTotal" + } + } +} diff --git a/gui/examples/index.json b/gui/examples/index.json new file mode 100644 index 00000000..947fd53d --- /dev/null +++ b/gui/examples/index.json @@ -0,0 +1 @@ +["prediction.json", "evaluation.json"] diff --git a/gui/examples/prediction.json b/gui/examples/prediction.json new file mode 100644 index 00000000..50d7600d --- /dev/null +++ b/gui/examples/prediction.json @@ -0,0 +1,17 @@ +{ + "name": "Short duplex", + "description": "Predict interactions between two complementary ten-nucleotide RNAs.", + "configuration": { + "schema": "IntaRNA-parameters-v1", + "parameters": { + "query": { + "text": ">ncRNA1\nAGGAUGGGGGAAACCCCAUACUCCUCACACACCAAAUCGCCCGAUUUAUCGGGCUUUUUU\n>ncRNA2\nACUGAGGUACGAUCGUGGCAGGGCCUUUGACUGACUUUCGUACUUU" + }, + "target": { + "text": ">mRNA1\nUUUAAAUUAAAAAAUCAUAGAAAAAGUAUCGUUUGAUACUUGUGAUUAUACUCAGUUAUA\nCAGUAUCUUAAGGUGUUAUUAAUAGUGGUGAGGAGAAUUUAUGAAGCUUUUCAAAAGCUU\nGCUUGUGGCACCUGCAACUCUUGGUCUUUUAGCACCAAUGACCGCUACUGCUAAU\n>mRNA2\nUGCUUCUUAGUAAUGGCCAGCUCGGGGAUUUGGAACUGGUGGUUGUUAAUUCUAGGCAAA\nUAGAUUAAAAUUAAAUUACUCAAAUUGUGUGACGAGUUUUAUGAAGCUUUUUAAAAGCUU\nGUUGGUAGCUCCAGCAACGAUUGGGCUACUAGCUCCAUUUUCAACGUUUGCUGGC\n" + }, + "outNumber": 10, + "outCsvCols": "id1,start1,end1,id2,start2,end2,subseqDP,hybridDP,E,ED1,ED2,seedE,seedStart1,seedStart2" + } + } +} diff --git a/gui/index.html b/gui/index.html new file mode 100644 index 00000000..275f8b1f --- /dev/null +++ b/gui/index.html @@ -0,0 +1,98 @@ + + + + + + + + IntaRNA · RNA–RNA interactions + + + + + + + + + +
+
+

RNA–RNA interactions considering Seeds and Accessibility

+

Computations stay on your device

+
+ +
+
+ Task, sequences and parameters +
+ Analysis task + + +
+

Predict interactions for all query–target sequence pairs.

+
+
+
+
+
+
5′ to 3′
or drop in the field
+ +
No sequence entered
+
+
5′ to 3′
or drop in the field
+ +
No sequence entered
+
+
+

Plain sequence or multi-FASTA (prediction only), A/C/G/U/T/N. Up to 50 records per field and 2–5,000 nt per record; longest selected query × longest selected target ≤ 1,000,000. FASTA names stop at the first whitespace. Seed predictions also require at least as many nucleotides as seed base pairs. Signed start indices apply to every record on that strand; negative indexing skips zero.

+ +
+
+
+
Input Parameters:
Examples

Loading examples…

+
+ +
+
+

Results

Enter your sequences or choose an example, then compute.

+

Completed runs stay in this tab until deleted or the page is reloaded. Select a session to restore its inputs; download its ZIP to keep a copy.

+
+ + +
+ +
+

Computing interactions

Loading the prediction engine…

The first run downloads the engine. You can stop at any time.

+ + diff --git a/gui/intarna-worker.js b/gui/intarna-worker.js new file mode 100644 index 00000000..09568516 --- /dev/null +++ b/gui/intarna-worker.js @@ -0,0 +1,42 @@ +import { prepareRequest, makeParameterDocument } from './protocol.js'; + +// Each task owns a worker; each CLI invocation owns a fresh WASM instance. +let started = false; +self.onmessage = async ({ data }) => { + if (started) return; + started = true; + const diagnostics = []; + const log = (line) => { + diagnostics.push(String(line).slice(0, 2000)); + if (diagnostics.length > 25) diagnostics.shift(); + }; + try { + const request = prepareRequest(data); + self.postMessage({ type: 'status', message: 'Loading the prediction engine…' }); + const { default: createIntaRNA } = await import('./wasm/intarna.js'); + const run = async (format) => { + const module = await createIntaRNA({ + noInitialRun: true, + locateFile: () => new URL('./wasm/intarna.wasm', import.meta.url).href, + print: log, printErr: log, + }); + module.FS.writeFile('/parameter.json', JSON.stringify(makeParameterDocument(request, format))); + module.FS.mkdir('/output'); + self.postMessage({ type: 'status', message: request.task === 'evaluation' ? 'Evaluating supplied RNA interactions…' : 'Predicting RNA interactions…' }); + const code = module.callMain(['--parameterFile=/parameter.json']); + if (code !== 0) throw new Error(`IntaRNA exited with status ${code}. Check the diagnostics and input settings.`); + return module.FS; + }; + const fs = await run('C'); + const csv = fs.readFile('/results.csv', { encoding: 'utf8' }); + const files = fs.readdir('/output').filter((name) => name !== '.' && name !== '..').map((name) => ({ name, text: fs.readFile(`/output/${name}`, { encoding: 'utf8' }) })); + for (const [key, format] of [['normal', 'N'], ['detailed', 'D'], ['ensemble', 'E']]) { + if (!request.outputs.includes(key)) continue; + const reportFS = await run(format); + files.push({ name: `intarna-${key}.txt`, text: reportFS.readFile('/report.txt', { encoding: 'utf8' }) }); + } + self.postMessage({ type: 'result', csv, csvColumns: request.csvColumns, files, diagnostics: diagnostics.join('\n') }); + } catch (error) { + self.postMessage({ type: 'error', message: error instanceof Error ? error.message : String(error), diagnostics: diagnostics.join('\n') }); + } +}; diff --git a/gui/mark.svg b/gui/mark.svg new file mode 100644 index 00000000..cb535a7b --- /dev/null +++ b/gui/mark.svg @@ -0,0 +1 @@ + diff --git a/gui/options.js b/gui/options.js new file mode 100644 index 00000000..8bc600ff --- /dev/null +++ b/gui/options.js @@ -0,0 +1,118 @@ +import { CSV_CATALOG } from './columns.js'; + +// Browser controls mirror CommandLineParsing.cpp; process/file-management options +// are replaced by local text inputs, downloads and a single cancellable worker. +const number = (key, label, value, min, max, extra = {}) => ({ key, label, value, min, max, type: 'number', ...extra }); +const select = (key, label, value, choices, extra = {}) => ({ key, label, value, choices, type: 'select', ...extra }); +const flag = (key, label, extra = {}) => ({ key, label, value: false, type: 'checkbox', ...extra }); +const text = (key, label, extra = {}) => ({ key, label, value: '', type: 'text', ...extra }); +const prediction = { prediction: true }; +const strand = (prefix, label) => [ + text(`${prefix}Set`, 'FASTA record subset', { ...prediction, hint: 'Record numbers, e.g. 1-3,5-5. Empty selects all.' }), + select(`${prefix}Acc`, 'Accessibility', 'C', { C: 'Compute', N: 'Ignore', P: 'Import unpaired probabilities', E: 'Import opening energies' }), + number(`${prefix}AccW`, 'Accessibility window', 150, 0, 99999, { exclude: [1, 2], hint: '0 uses the full sequence; otherwise at least 3 nt.' }), + number(`${prefix}AccL`, 'Maximum base-pair span', 100, 0, 99999, { exclude: [1, 2], hint: '0 uses the accessibility window.' }), + text(`${prefix}AccConstr`, 'Accessibility constraints', { hint: 'One sequence only: ./x/p/b per base, or ranges such as b:3-4,p:6-7.' }), + text(`${prefix}AccFile`, 'Accessibility data', { type: 'textarea', hint: 'Paste RNAplfold text for one sequence when importing P or E.' }), + number(`${prefix}IntLenMax`, 'Maximum interaction length', 0, 0, 99999, { ...prediction, hint: '0 uses the full sequence, bounded by the accessibility window.' }), + number(`${prefix}IntLoopMax`, 'Maximum unpaired bases per interior loop', prefix === 'q' ? 16 : 10, 0, 30, prediction), + text(`${prefix}Region`, 'Interaction regions', { ...prediction, hint: 'Inclusive sequence coordinates, e.g. 1-20,30-50.' }), + number(`${prefix}RegionLenMax`, 'Automatic region length limit', 0, 0, 99999, { ...prediction, hint: '0 disables automatic region detection.' }), + number(`${prefix}PfScale`, `${label} partition-function scale`, 1.07, 1, 99999, { step: 'any' }), +]; +const fields = new Map([ + ...strand('q', 'Query'), ...strand('t', 'Target'), + flag('accNoLP', 'Exclude lonely pairs in accessibility'), + flag('accNoGUend', 'Exclude GU helix ends in accessibility'), + flag('noSeed', 'Do not require a seed', prediction), + text('seedTQ', 'Explicit seeds', { ...prediction, hint: 'Target&query dot-bar encodings, e.g. 1|||&1|||; separate seeds with commas.' }), + number('seedBP', 'Seed base pairs', 7, 2, 20, prediction), + number('seedMaxUP', 'Maximum unpaired seed bases (both strands)', 0, 0, 20, prediction), + number('seedQMaxUP', 'Maximum unpaired query seed bases', -1, -1, 20, { ...prediction, hint: '-1 uses the combined limit.' }), + number('seedTMaxUP', 'Maximum unpaired target seed bases', -1, -1, 20, prediction), + number('seedMaxE', 'Maximum seed energy (kcal/mol)', 0, -999, 999, { ...prediction, step: 'any' }), + number('seedMaxEhybrid', 'Maximum seed hybridization energy (kcal/mol)', 999, -999, 999, { ...prediction, step: 'any' }), + number('seedMinPu', 'Minimum seed unpaired probability', 0, 0, 1, { ...prediction, step: 'any' }), + text('seedQRange', 'Query seed regions', prediction), text('seedTRange', 'Target seed regions', prediction), + flag('seedNoGU', 'Exclude GU pairs in seeds', prediction), flag('seedNoGUend', 'Exclude GU pairs at seed ends', prediction), + number('helixMinBP', 'Minimum helix base pairs', 2, 2, 4, prediction), + number('helixMaxBP', 'Maximum helix base pairs', 10, 2, 20, prediction), + number('helixMaxIL', 'Maximum helix interior-loop size', 0, 0, 2, prediction), + number('helixMinPu', 'Minimum helix unpaired probability', 0, 0, 1, { ...prediction, step: 'any' }), + number('helixMaxE', 'Maximum helix energy (kcal/mol)', 0, -999, 999, { ...prediction, step: 'any' }), + flag('helixFullE', 'Use full helix energy for the energy limit', prediction), + select('model', 'Interaction model', 'X', { X: 'Seed extension (MFE)', S: 'Single site (MFE)', P: 'Ensemble energy', B: 'Helix blocks (MFE)' }, prediction), + select('mode', 'Prediction algorithm', 'H', { H: 'Heuristic', M: 'Exact', S: 'Seed only', K: 'Greedy seed extension' }, prediction), + select('kineticScore', 'Greedy extension score', 'A', { A: 'Energy change', B: 'Change / (1 + s1 + s2)', C: 'Change / (1 + 2 max(s1,s2))' }, prediction), + select('energyVRNA', 'ViennaRNA parameter set', 'Turner04', { Turner04: 'Turner 2004', Turner99: 'Turner 1999', Andronescu07: 'Andronescu 2007' }), + number('temperature', 'Temperature (°C)', 37, 0, 100, { step: 'any' }), + number('energyAdd', 'Additional energy (kcal/mol)', 0, -999, 999, { step: 'any' }), + flag('energyNoDangles', 'Exclude dangling-end energy'), + number('windowWidth', 'Prediction window width', 0, 0, 99999, { ...prediction, hint: '0 disables prediction windows; otherwise at least 10 nt.' }), + number('windowOverlap', 'Prediction window overlap', 150, 0, 99999, prediction), + number('outNumber', 'Maximum interactions per sequence pair', 1, 0, 100, { ...prediction, hint: 'Browser limit: 100; 0 computes accessibility only.' }), + select('outOverlap', 'Allow overlapping interactions', 'B', { B: 'Both strands', N: 'Neither strand', T: 'Target only', Q: 'Query only' }, prediction), + number('outMaxE', 'Maximum interaction energy (exclusive, kcal/mol)', 0, -999, 999, { ...prediction, step: 'any' }), + number('outDeltaE', 'Maximum difference from MFE (kcal/mol)', 100, 0, 100, { ...prediction, step: 'any' }), + number('outMinPu', 'Minimum unpaired probability', 0, 0, 1, { ...prediction, step: 'any' }), + flag('outBestSeedOnly', 'Report only the best seed', prediction), + flag('outNoLP', 'Exclude lonely interaction pairs', prediction), flag('outNoGUend', 'Exclude GU interaction helix ends', prediction), + flag('outPerRegion', 'Report each region combination separately', prediction), flag('outPairwise', 'Match FASTA records pairwise', prediction), + select('outCsvSort', 'CSV download sort column', '', { '': 'Native computation order', ...Object.fromEntries(CSV_CATALOG.map((column) => [column.key, column.label])) }), + text('outSpotProbSpots', 'Interaction probability spots', { ...prediction, hint: 'Optional target&query coordinate pairs, e.g. 3&7,5&9. Empty selects all spots.' }), + ...['q', 't'].flatMap((p) => [ + text(`${p}Shape`, `${p === 'q' ? 'Query' : 'Target'} SHAPE data`, { type: 'textarea', hint: 'One sequence only. Paste position and reactivity, one pair per line; positions start at 1.' }), + { ...text(`${p}ShapeMethod`, 'SHAPE method'), value: 'D', hint: 'D, Dm1.8b-0.6, Z, Zb0.89 or W.' }, + { ...text(`${p}ShapeConversion`, 'SHAPE conversion'), value: 'Os1.6i-2.29', hint: 'M, C0.25, S, Ls0.68i0.2 or Os1.6i-2.29.' }, + ]), +].map((field) => [field.key, field])); + +// Explicit rows separate visual order from native parameter defaults. +const rows = (keys) => keys.map((row) => row.map((key) => fields.get(key))); +const strandRows = (p) => rows([ + [`${p}Set`, `${p}Region`, `${p}IntLenMax`, `${p}IntLoopMax`, `${p}RegionLenMax`], + [`${p}Acc`, `${p}AccW`, `${p}AccL`, `${p}PfScale`], +]); +const strandGroup = (p, label) => ({ + key: `${label.toLowerCase()}-options`, label, strand: p, + rows: strandRows(p), + fields: [...strandRows(p).flat(), ...rows([ + ...(p === 'q' ? [['accNoLP', 'accNoGUend']] : []), + [`${p}AccConstr`, `${p}AccFile`, `${p}Shape`, `${p}ShapeMethod`, `${p}ShapeConversion`], + ]).flat()], +}); +export const GROUPS = [ + { key: 'seed-options', label: 'Seed', prediction: true, rows: rows([ + ['noSeed'], ['seedTQ'], ['seedBP', 'seedMaxUP', 'seedQMaxUP', 'seedTMaxUP'], + ['seedMaxE', 'seedMinPu', 'seedMaxEhybrid'], ['seedQRange', 'seedTRange'], ['seedNoGU', 'seedNoGUend'], + ]) }, + { key: 'output-options', label: 'Output', fields: [...fields.values()].filter((field) => field.key.startsWith('out') && field.key !== 'outCsvSort') }, + { key: 'csv-options', label: 'CSV', fields: [fields.get('outCsvSort')] }, + { key: 'interaction-options', label: 'Model & Energy', rows: rows([ + ['model', 'mode'], ['energyVRNA', 'temperature', 'energyAdd'], ['energyNoDangles'], + ['windowWidth', 'windowOverlap'], ['kineticScore'], + ['helixMinBP', 'helixMaxBP', 'helixMaxIL', 'helixMinPu', 'helixMaxE'], ['helixFullE'], + ]) }, + strandGroup('q', 'Query'), strandGroup('t', 'Target'), +].map((group) => ({ ...group, fields: group.fields ?? group.rows.flat() })); +export const FIELDS = GROUPS.flatMap((group) => group.fields); +export const PARAMETER_DEFAULTS = Object.freeze(Object.fromEntries(FIELDS.map((field) => [field.key, field.value]))); +export const UI_DEFAULTS = Object.freeze({ ...PARAMETER_DEFAULTS, outNumber: 10 }); +export const EXTRA_OUTPUTS = [ + ['qMinE', 'Query minimum energies', true, 'CSV position profile of the lowest interaction energy covering each query nucleotide. Useful for locating favorable query sites.'], + ['tMinE', 'Target minimum energies', true, 'CSV position profile of the lowest interaction energy covering each target nucleotide. Useful for locating favorable target sites.'], + ['qAcc', 'Query opening energies', false, 'RNAplfold-style opening-energy matrix for the query. Use it to inspect or reproduce query accessibility.'], + ['tAcc', 'Target opening energies', false, 'RNAplfold-style opening-energy matrix for the target. Use it to inspect or reproduce target accessibility.'], + ['qPu', 'Query unpaired probabilities', false, 'RNAplfold-style query unpaired-probability matrix, converted from rounded opening energies.'], + ['tPu', 'Target unpaired probabilities', false, 'RNAplfold-style target unpaired-probability matrix, converted from rounded opening energies.'], + ['qSpotProb', 'Query interaction probabilities', true, 'CSV position profile estimating the probability that each query nucleotide is covered by an interaction.'], + ['tSpotProb', 'Target interaction probabilities', true, 'CSV position profile estimating the probability that each target nucleotide is covered by an interaction.'], + ['pMinE', 'Pair minimum energies', true, 'CSV target-by-query matrix of the minimum interaction energy covering each nucleotide pair. Useful as an energy heatmap.'], + ['spotProb', 'Interaction spot probabilities', true, 'CSV target-by-query matrix, or selected spots, estimating interaction coverage probabilities. Useful as a probability heatmap.'], + ['bpProb', 'Actual base-pair probabilities (model P)', true, 'CSV target-by-query matrix of actual base-pair probabilities for the model P interaction ensemble.'], + ['bpsvg', 'Base-pair probability SVG (model P)', true, 'SVG dot plot of model P base-pair probabilities with accessibility frames and seed/MFE outlines.'], + ['normal', 'ASCII interaction structures', false, 'Compact text report with ASCII interaction structures and their overall energies.'], + ['detailed', 'Detailed interaction report', false, 'Expanded text report with interaction structures, coordinates and energy contributions.'], + ['ensemble', 'Ensemble report', false, 'Text report of interaction and intramolecular ensemble energies and partition functions.'], +].map(([key, label, predictionOnly, description]) => ({ key, label, prediction: predictionOnly, description })); +export const ENSEMBLE_COLUMNS = ['Eall', 'Zall', 'EallTotal', 'P_E']; diff --git a/gui/output-visualization.js b/gui/output-visualization.js new file mode 100644 index 00000000..9c901089 --- /dev/null +++ b/gui/output-visualization.js @@ -0,0 +1,230 @@ +const PROFILE_TYPES = new Map([ + ['qMinE', { strand: 'query', value: 'minE', title: 'Minimum-energy profile', yTitle: 'Minimum interaction energy (kcal/mol)' }], + ['tMinE', { strand: 'target', value: 'minE', title: 'Minimum-energy profile', yTitle: 'Minimum interaction energy (kcal/mol)' }], + ['qSpotProb', { strand: 'query', value: 'spotProb', title: 'Interaction-probability profile', yTitle: 'Interaction probability' }], + ['tSpotProb', { strand: 'target', value: 'spotProb', title: 'Interaction-probability profile', yTitle: 'Interaction probability' }], +]); +const MATRIX_TYPES = new Map([ + ['pMinE', { value: 'minE', title: 'Pair minimum energies', colorTitle: 'kcal/mol', colorscale: [[0, '#0f4676'], [0.5, '#8bbbd8'], [1, '#f8fbff']] }], + ['spotProb', { value: 'spotProb', title: 'Interaction spot probabilities', colorTitle: 'Probability', colorscale: [[0, '#f8fbff'], [0.5, '#80b6d8'], [1, '#145a96']] }], +]); + +function outputType(name) { + const match = /^(qMinE|tMinE|qSpotProb|tSpotProb|pMinE|spotProb)(?:-t\d+q\d+)?\.csv$/.exec(name); + return match?.[1] ?? null; +} + +function table(text) { + if (typeof text !== 'string' || !text.trim()) throw new Error('The output file is empty.'); + const lines = text.trimEnd().split(/\r?\n/), header = lines.shift().split(';'); + if (header.length < 2 || new Set(header).size !== header.length) throw new Error('The output file has an invalid header.'); + const rows = lines.filter((line) => line.trim()).map((line) => { + const cells = line.split(';'); + if (cells.length !== header.length) throw new Error('The output file contains a malformed row.'); + return cells; + }); + if (!rows.length) throw new Error('The output file contains no values to plot.'); + return { header, rows }; +} + +function number(value) { + if (/^(NA|NAN)$/i.test(value.trim())) return null; + const parsed = Number(value); + if (!Number.isFinite(parsed)) throw new Error(`The output contains a non-numeric value: ${value}`); + return parsed; +} + +function plotText(value) { + return String(value).replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>'); +} + +function record(request, strand, index) { + return request?.[strand]?.records?.[index - 1]?.id ?? ''; +} + +export function outputFileContext(name, request) { + const type = outputType(name) ?? /^(qAcc|tAcc|qPu|tPu|bpProb|bpsvg)/.exec(name)?.[1] ?? ''; + const pair = /-t(\d+)q(\d+)(?=\.[^.]+$)/.exec(name); + if (pair) { + const target = record(request, 'target', Number(pair[1])), query = record(request, 'query', Number(pair[2])); + return { target, query, label: [target, query].filter(Boolean).join(' : ') }; + } + const single = /-s(\d+)(?=\.[^.]+$)/.exec(name); + if (single && /^[qt](Acc|Pu)/.test(type)) { + const strand = type.startsWith('q') ? 'query' : 'target', value = record(request, strand, Number(single[1])); + return { [strand]: value, label: value }; + } + const target = request?.target?.records?.length === 1 ? request.target.records[0].id : ''; + const query = request?.query?.records?.length === 1 ? request.query.records[0].id : ''; + if (/^[qt](Acc|Pu)$/.test(type)) { + const value = type.startsWith('q') ? query : target; + return { [type.startsWith('q') ? 'query' : 'target']: value, label: value }; + } + return { target, query, label: [target, query].filter(Boolean).join(' : ') }; +} + +function baseLayout(title) { + return { + title: { text: title, x: 0.04, xanchor: 'left', font: { size: 17 } }, + autosize: true, + height: 420, + margin: { l: 72, r: 28, t: 62, b: 78 }, + paper_bgcolor: 'rgba(0,0,0,0)', + plot_bgcolor: '#fff', + font: { family: 'Segoe UI, Tahoma, Geneva, sans-serif', color: '#1c2b39', size: 12 }, + }; +} + +function categoricalAxis(title, values) { + return { title: { text: title }, type: 'category', categoryorder: 'array', categoryarray: values, automargin: true, gridcolor: '#e0e8f0' }; +} + +export function outputVisualization(file, request) { + const type = outputType(file.name); + if (!type) return null; + const parsed = table(file.text), context = outputFileContext(file.name, request); + if (PROFILE_TYPES.has(type)) { + const profile = PROFILE_TYPES.get(type); + if (parsed.header.length !== 3 || parsed.header[0] !== 'idx' || parsed.header[2] !== profile.value) throw new Error(`Unexpected ${type} profile columns.`); + const x = parsed.rows.map((row) => String(row[0])), y = parsed.rows.map((row) => number(row[2])); + const sequence = parsed.header[1] || context[profile.strand] || (profile.strand === 'query' ? 'Query' : 'Target'); + return { + kind: 'profile', context, + traces: [{ + type: 'scatter', mode: 'lines+markers', x, y, text: parsed.rows.map((row) => row[1]), + name: plotText(sequence), line: { color: '#145a96', width: 2 }, marker: { color: '#145a96', size: 6 }, + connectgaps: false, hovertemplate: 'Index %{x}
Nucleotide %{text}
Value %{y}', + }], + layout: { + ...baseLayout(`${profile.title}: ${plotText(sequence)}`), + xaxis: categoricalAxis(`${profile.strand === 'query' ? 'Query' : 'Target'} index`, x), + yaxis: { title: { text: profile.yTitle }, automargin: true, gridcolor: '#e0e8f0', rangemode: profile.value === 'spotProb' ? 'tozero' : 'normal' }, + }, + }; + } + + const matrix = MATRIX_TYPES.get(type); + if (type === 'spotProb' && parsed.header[0] === 'spot') { + if (parsed.header.length !== 2 || parsed.header[1] !== 'probability') throw new Error('Unexpected selected-spot probability columns.'); + const x = parsed.rows.map((row) => String(row[0])), y = parsed.rows.map((row) => number(row[1])); + return { + kind: 'spots', context, + traces: [{ type: 'bar', x, y, marker: { color: '#145a96' }, hovertemplate: 'Spot %{x}
Probability %{y}' }], + layout: { + ...baseLayout(`${matrix.title}${context.label ? `: ${plotText(context.label)}` : ''}`), + xaxis: categoricalAxis('Target & query index', x), + yaxis: { title: { text: matrix.colorTitle }, automargin: true, gridcolor: '#e0e8f0', rangemode: 'tozero' }, + }, + }; + } + if (parsed.header[0] !== matrix.value || parsed.header.length < 2) throw new Error(`Unexpected ${type} matrix columns.`); + const x = parsed.header.slice(1).map(String), y = parsed.rows.map((row) => String(row[0])); + const z = parsed.rows.map((row) => row.slice(1).map(number)); + const target = context.target || 'Target', query = context.query || 'Query'; + return { + kind: 'matrix', context, + traces: [{ + type: 'heatmap', x, y, z, colorscale: matrix.colorscale, hoverongaps: false, + colorbar: { title: { text: matrix.colorTitle, side: 'right' } }, + hovertemplate: `${plotText(target)} %{y}
${plotText(query)} %{x}
Value %{z}`, + }], + layout: { + ...baseLayout(`${matrix.title}: ${plotText(target)} : ${plotText(query)}`), + xaxis: categoricalAxis(`${plotText(query)} index`, x), + yaxis: categoricalAxis(`${plotText(target)} index`, y), + }, + }; +} + +function button(text, className = '') { + const node = document.createElement('button'); node.type = 'button'; node.textContent = text; node.className = className; return node; +} + +export class AdditionalOutputView { + constructor(file, request, id, download) { + this.file = file; this.id = id; this.root = document.createElement('details'); this.root.className = 'output-file'; + const summary = document.createElement('summary'); summary.className = 'output-file-summary'; + const name = document.createElement('span'); name.className = 'output-file-name'; name.textContent = file.name; + const downloadButton = button('Download', 'text-button output-download'); + downloadButton.setAttribute('aria-label', `Download ${file.name}`); + downloadButton.addEventListener('click', (event) => { event.preventDefault(); event.stopPropagation(); download(); }); + const context = outputFileContext(file.name, request), description = document.createElement('span'); + description.className = 'output-file-context'; description.textContent = context.label ? `— ${context.label}` : ''; + summary.append(name, downloadButton, description); this.root.append(summary); + + const body = document.createElement('div'); body.className = 'output-file-body'; this.root.append(body); + const preview = document.createElement('pre'); preview.textContent = file.text.slice(0, 100000); + const contentPanel = document.createElement('section'); contentPanel.className = 'output-tab-panel'; contentPanel.append(preview); + if (file.text.length > 100000) { + const note = document.createElement('p'); note.textContent = 'Preview limited to 100,000 characters. Download contains the complete file.'; contentPanel.append(note); + } + + let spec = null, plotError = null; + try { spec = outputVisualization(file, request); } catch (error) { plotError = error; } + if (!spec && !plotError) { body.append(contentPanel); return; } + + const tabs = document.createElement('div'); tabs.className = 'output-tabs'; tabs.setAttribute('role', 'tablist'); tabs.setAttribute('aria-label', `${file.name} views`); + const visualizationTab = button('Visualization', 'output-tab'), contentTab = button('File Content', 'output-tab'); + const visualizationPanel = document.createElement('section'); visualizationPanel.className = 'output-tab-panel'; + visualizationTab.id = `${id}-visualization-tab`; visualizationPanel.id = `${id}-visualization-panel`; + contentTab.id = `${id}-content-tab`; contentPanel.id = `${id}-content-panel`; + for (const [tab, panel] of [[visualizationTab, visualizationPanel], [contentTab, contentPanel]]) { + tab.setAttribute('role', 'tab'); tab.setAttribute('aria-controls', panel.id); + panel.setAttribute('role', 'tabpanel'); panel.setAttribute('aria-labelledby', tab.id); + } + tabs.append(visualizationTab, contentTab); body.append(tabs, visualizationPanel, contentPanel); + this.tabs = [visualizationTab, contentTab]; this.panels = [visualizationPanel, contentPanel]; + this.selectTab = (index, focus = false) => { + this.tabs.forEach((tab, current) => { tab.setAttribute('aria-selected', String(current === index)); tab.tabIndex = current === index ? 0 : -1; this.panels[current].hidden = current !== index; }); + if (focus) this.tabs[index].focus(); + if (index === 0) this.render(); + }; + visualizationTab.addEventListener('click', () => this.selectTab(0)); contentTab.addEventListener('click', () => this.selectTab(1)); + tabs.addEventListener('keydown', (event) => { + if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return; + const current = this.tabs.indexOf(document.activeElement); + const next = event.key === 'Home' ? 0 : event.key === 'End' ? 1 : (current + (event.key === 'ArrowRight' ? 1 : -1) + 2) % 2; + event.preventDefault(); this.selectTab(next, true); + }); + + const tools = document.createElement('div'); tools.className = 'plot-tools'; + const status = document.createElement('p'); status.className = 'output-plot-status'; status.setAttribute('role', 'status'); + visualizationPanel.append(tools, status); this.status = status; + if (plotError) { status.textContent = `Visualization unavailable: ${plotError.message}`; this.selectTab(0); return; } + const exportButton = button('Export PNG', 'secondary'); exportButton.disabled = true; + exportButton.addEventListener('click', async () => { + try { + await this.ready; + const image = await globalThis.Plotly.toImage(this.plot, { format: 'png', width: 1400, height: 850 }); + const encoded = image.slice(image.indexOf(',') + 1), bytes = Uint8Array.from(atob(encoded), (character) => character.charCodeAt(0)); + const url = URL.createObjectURL(new Blob([bytes], { type: 'image/png' })); + const link = document.createElement('a'); link.href = url; link.download = file.name.replace(/\.csv$/i, '.png'); + document.body.append(link); link.click(); link.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000); + } catch (error) { status.textContent = `PNG export failed: ${error.message}`; } + }); + tools.append(exportButton); this.exportButton = exportButton; + this.plot = document.createElement('div'); this.plot.className = 'output-plot'; visualizationPanel.append(this.plot); this.spec = spec; + this.root.addEventListener('toggle', () => { if (this.root.open && !visualizationPanel.hidden) this.render(); }); + this.selectTab(0); + } + + render() { + if (!this.spec || this.rendered || !this.root.open) return; + if (!globalThis.Plotly?.newPlot) { this.status.textContent = 'Visualization unavailable: Plotly did not load.'; return; } + this.rendered = true; this.status.textContent = 'Rendering visualization…'; this.plot.setAttribute('aria-busy', 'true'); + this.ready = Promise.resolve(globalThis.Plotly.newPlot(this.plot, this.spec.traces, this.spec.layout, { + responsive: true, displaylogo: false, scrollZoom: false, + modeBarButtonsToRemove: ['sendDataToCloud', 'lasso2d', 'select2d'], + })).then(() => { + this.plot.removeAttribute('aria-busy'); this.status.textContent = ''; this.exportButton.disabled = false; + }).catch((error) => { this.plot.removeAttribute('aria-busy'); this.status.textContent = `Visualization unavailable: ${error.message}`; }); + } + + resize() { + if (this.rendered && this.root.open && !this.panels?.[0].hidden) requestAnimationFrame(() => globalThis.Plotly?.Plots?.resize(this.plot)); + } + + destroy() { + if (this.rendered) globalThis.Plotly?.purge?.(this.plot); + } +} diff --git a/gui/package.json b/gui/package.json new file mode 100644 index 00000000..307fd5df --- /dev/null +++ b/gui/package.json @@ -0,0 +1,6 @@ +{ + "name": "intarna-gui", + "private": true, + "type": "module", + "scripts": { "test": "node --test --test-isolation=none tests/*.test.mjs" } +} diff --git a/gui/parameter-file.js b/gui/parameter-file.js new file mode 100644 index 00000000..7e52f341 --- /dev/null +++ b/gui/parameter-file.js @@ -0,0 +1,116 @@ +import { JSON_SCHEMA, CSV_COLUMNS, LIMITS, normalizeParameters } from './protocol.js'; +import { FIELDS, PARAMETER_DEFAULTS, EXTRA_OUTPUTS } from './options.js'; +import { CSV_CATALOG } from './columns.js'; + +export const MAX_PARAMETER_BYTES = 5000000; +const reports = { normal: 'N', detailed: 'D', ensemble: 'E' }; +const embeddedKeys = ['qShape', 'tShape', 'qAccFile', 'tAccFile']; +const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value); +function text(value, label, limit = 1000000) { + if (typeof value !== 'string' || value.length > limit || value.includes('\0')) throw new Error(`${label}: invalid or oversized text.`); + return value; +} +function selections(request) { + const columns = request.csvColumns ?? CSV_COLUMNS.split(','), outputs = request.outputs ?? []; + for (const [values, catalog, label] of [[columns, CSV_CATALOG, 'CSV columns'], [outputs, EXTRA_OUTPUTS.filter((entry) => request.task !== 'evaluation' || !entry.prediction), 'output files']]) { + if (!Array.isArray(values) || new Set(values).size !== values.length || values.some((key) => !catalog.some((entry) => entry.key === key))) throw new Error(`Choose available ${label}, without duplicates.`); + } + return { columns, outputs }; +} + +// Save editable settings, even before sequences have been entered. Computation +// performs full sequence-dependent validation later through prepareRequest. +export function exportParameters(request, provenance) { + if (!provenance?.trim()) throw new Error('Compiled version information is unavailable'); + const normalized = normalizeParameters(request); + const { columns, outputs } = selections(request); + const parameters = { + query: { text: text(typeof request.query === 'string' ? request.query : request.query.fasta, 'Query', LIMITS.maxFastaBytes) }, + target: { text: text(typeof request.target === 'string' ? request.target : request.target.fasta, 'Target', LIMITS.maxFastaBytes) }, + }; + if (request.task === 'evaluation') parameters.personality = 'IntaRNAeval'; + for (const [key, value] of Object.entries(normalized)) { + if (key === 'outSpotProbSpots' || value === '' || value === (PARAMETER_DEFAULTS[key] ?? 1)) continue; + parameters[key] = embeddedKeys.includes(key) ? { text: value } : value; + } + if (request.task === 'evaluation' && request.rri) parameters.rri = text(request.rri, 'Interactions', 10000); + parameters.outMode = 'C'; + if (columns.join(',') !== CSV_COLUMNS) parameters.outCsvCols = columns.join(','); + const nativeOutputs = outputs.filter((key) => !Object.hasOwn(reports, key)).map((key) => { + const spots = key === 'spotProb' && normalized.outSpotProbSpots ? `${normalized.outSpotProbSpots}:` : ''; + return `${key}:${spots}${key}${key === 'bpsvg' ? '.svg' : '.csv'}`; + }); + if (nativeOutputs.length) parameters.out = nativeOutputs; + const selectedReports = outputs.filter((key) => Object.hasOwn(reports, key)); + const comments = [ + ...provenance.trimEnd().split(/\r?\n/), + 'Reproduce: IntaRNA --parameterFile=parameter.json --out=intarna-interactions.csv', + ...selectedReports.map((key) => `Additional report: IntaRNA --parameterFile=parameter.json --outMode=${reports[key]} --outCsvCols=${CSV_COLUMNS} --outCsvSort '' --out=intarna-${key}.txt`), + ]; + const gui = {}; + if (selectedReports.length) gui.reports = selectedReports; + if (normalized.outSpotProbSpots) gui.outSpotProbSpots = normalized.outSpotProbSpots; + return { schema: JSON_SCHEMA, _comment: comments, parameters, ...(Object.keys(gui).length ? { gui } : {}) }; +} + +export function serializeParameters(request, provenance) { + return JSON.stringify(exportParameters(request, provenance), null, 2) + '\n'; +} + +// Import only controls the browser can represent. Native-only settings produce +// an actionable error instead of being silently discarded or reaching WASM. +export function importParameters(source) { + if (typeof source === 'string' && source.length > MAX_PARAMETER_BYTES) throw new Error('Choose a JSON file of at most 5 MB.'); + const document = typeof source === 'string' ? JSON.parse(source.replace(/^\uFEFF/, '')) : source; + if (!object(document) || document.schema !== JSON_SCHEMA || !object(document.parameters)) throw new Error(`Expected a ${JSON_SCHEMA} parameter document.`); + for (const key of Object.keys(document)) if (!['schema', '_comment', 'parameters', 'gui'].includes(key)) throw new Error(`Unknown JSON document field: ${key}`); + const request = { task: 'prediction', query: '', target: '', qIdxPos0: 1, tIdxPos0: 1, rri: '', parameters: {}, outputs: [], csvColumns: CSV_COLUMNS.split(',') }; + const known = new Set(FIELDS.map((field) => field.key)); + for (const [key, value] of Object.entries(document.parameters)) { + if (value === null) throw new Error(`${key}: null is not a parameter value.`); + if (['query', 'target', ...embeddedKeys].includes(key)) { + const content = object(value) && Object.keys(value).length === 1 && typeof value.text === 'string' ? value.text : value; + // Plain nucleotide strings are native inline sequences; file paths need + // explicit embedding because the browser cannot open local paths. + if (typeof content !== 'string' || (content === value && (embeddedKeys.includes(key) || !/^[ACGUTNacgutn]*$/.test(value)))) throw new Error(`${key}: embed the input using {"text":"file contents"}.`); + if (key === 'query' || key === 'target') request[key] = text(content, key, LIMITS.maxFastaBytes); + else request.parameters[key] = text(content, key); + } else if (key === 'personality') { + if (!['IntaRNA', 'IntaRNAeval'].includes(value)) throw new Error('The browser supports IntaRNA prediction and IntaRNAeval evaluation.'); + request.task = value === 'IntaRNAeval' ? 'evaluation' : 'prediction'; + } else if (key === 'qIdxPos0' || key === 'tIdxPos0') request[key] = value; + else if (key === 'rri') request.rri = text(value, key, 10000); + else if (key === 'outMode') { if (value !== 'C') throw new Error('Use CSV outMode C and gui.reports for additional browser reports.'); } + else if (key === 'outCsvCols') request.csvColumns = text(value, key).split(',').filter(Boolean); + else if (key === 'out') { + const entries = Array.isArray(value) ? value : [value]; + for (const entry of entries) { + const match = /^([A-Za-z]+):(?:(-?[\d&,\-]+):)?([^:]+)$/.exec(text(entry, 'out')); + if (!match || !EXTRA_OUTPUTS.some((output) => output.key === match[1] && !Object.hasOwn(reports, output.key))) throw new Error('The browser supports named additional outputs; omit main output paths from the parameter file.'); + request.outputs.push(match[1]); + if (match[2]) { + if (match[1] !== 'spotProb') throw new Error('Only spotProb accepts explicit probability spots.'); + request.parameters.outSpotProbSpots = match[2]; + } + } + } else if (known.has(key)) request.parameters[key] = value; + else throw new Error(`The browser cannot represent parameter ${key}; use the native CLI.`); + } + if (document.gui !== undefined) { + if (!object(document.gui)) throw new Error('gui must be an object.'); + for (const [key, value] of Object.entries(document.gui)) { + if (key === 'reports' && Array.isArray(value) && value.every((entry) => Object.hasOwn(reports, entry))) request.outputs.push(...value); + else if (key === 'outSpotProbSpots') { + if (request.parameters.outSpotProbSpots && request.parameters.outSpotProbSpots !== value) throw new Error('Conflicting spotProb selections.'); + request.parameters.outSpotProbSpots = text(value, key, 10000); + } else throw new Error(`Unsupported GUI setting: ${key}`); + } + } + selections(request); + // Keep prediction-only controls from being silently ignored on import. + if (request.task === 'evaluation' && FIELDS.some((field) => field.prediction && Object.hasOwn(request.parameters, field.key))) throw new Error('Evaluation documents must omit prediction-only parameters.'); + const normalized = normalizeParameters(request); + request.qIdxPos0 = normalized.qIdxPos0; request.tIdxPos0 = normalized.tIdxPos0; + request.parameters = normalized; + return request; +} diff --git a/gui/protocol.js b/gui/protocol.js new file mode 100644 index 00000000..d452de28 --- /dev/null +++ b/gui/protocol.js @@ -0,0 +1,258 @@ +import { FIELDS, PARAMETER_DEFAULTS, EXTRA_OUTPUTS, ENSEMBLE_COLUMNS } from './options.js'; +import { CSV_CATALOG } from './columns.js'; + +// Bound the largest pair's matrix while allowing batches of shorter sequences. +export const LIMITS = Object.freeze({ minLength: 2, maxLength: 5000, maxRecords: 50, maxPairs: 1000000, maxFastaBytes: 1000000 }); +export const CSV_COLUMNS = 'id1,start1,end1,id2,start2,end2,subseqDP,hybridDP,E'; +export const CONTEXT_COLUMNS = ['id1', 'start1', 'end1', 'id2', 'start2', 'end2', 'E']; +export const DEFAULTS = Object.freeze({ query: '>query\nGGGAGGAGGG', target: '>target\nCCCUCCUCCC', task: 'prediction' }); +export const EVALUATION_EXAMPLE = '1||||||||||&1||||||||||'; + +export function parseFasta(text, label, multiple = true) { + if (typeof text !== 'string' || text.length > LIMITS.maxFastaBytes || !text.trim()) throw new Error(`${label}: enter a sequence or FASTA records (at most 1 MB).`); + const lines = text.trim().split(/\r?\n/).map((line) => line.trim()).filter(Boolean); + const records = [], warnings = []; + let current; + for (const line of lines) { + if (line.startsWith('>')) { + const header = line.slice(1).trim(); + current = { id: header.split(/\s+/)[0], sequence: '' }; + if (!current.id || current.id.length > 200 || /[\x00-\x1f\x7f]/.test(current.id)) throw new Error(`${label}: the FASTA header needs a name (at most 200 characters).`); + if (/\s+\S/.test(header)) warnings.push(`${label}: ignoring FASTA description after the name “${current.id}”.`); + records.push(current); + } else { + if (!current) { current = { id: label.toLowerCase(), sequence: '' }; records.push(current); } + current.sequence += line.replace(/\s/g, '').toUpperCase().replaceAll('T', 'U'); + } + } + if ((!multiple && records.length !== 1) || records.length > LIMITS.maxRecords) throw new Error(`${label}: ${multiple ? 'use at most 50 FASTA records' : 'evaluation requires exactly one FASTA record'}.`); + const ids = new Set(); + for (const record of records) { + if (!record.sequence || /[^ACGUN]/.test(record.sequence)) throw new Error(`${label}: use only A, C, G, U, T or N in every sequence.`); + if (record.sequence.length < LIMITS.minLength || record.sequence.length > LIMITS.maxLength) throw new Error(`${label}: use 2–5,000 nucleotides per record.`); + // Native CSV replaces semicolons with underscores. Keep pair grouping unique. + const id = record.id.replaceAll(';', '_'); + if (ids.has(id)) throw new Error(`${label}: FASTA identifiers must be unique (also after replacing semicolons with underscores).`); + ids.add(id); + } + return { records, warnings, fasta: records.map(({ id, sequence }) => `>${id}\n${sequence}\n`).join('') }; +} +export function parseSequence(text, label) { + const parsed = parseFasta(text, label, false); + return { ...parsed.records[0], fasta: parsed.fasta }; +} + +// IntaRNA omits coordinate zero when an index range crosses from negative to positive. +export function sequenceOffset(index, start) { + return index - start - (start < 0 && index > 0 ? 1 : 0); +} +function ranges(value, key, length, start = 1) { + if (!value) return []; + return value.split(',').map((part) => { + const match = /^(-?[1-9]\d*)-(-?[1-9]\d*)$/.exec(part); + if (!match) throw new Error(`${key}: use inclusive ranges such as 1-5,8-10 (coordinate zero is skipped).`); + const from = sequenceOffset(Number(match[1]), start), to = sequenceOffset(Number(match[2]), start); + if (from < 0 || to < from || to >= length) throw new Error(`${key}: ranges must be ascending and within the selected sequence.`); + return [from, to]; + }); +} +function selectedRecords(parsed, subset, key) { + const intervals = ranges(subset, key, parsed.records.length); + return intervals.length ? parsed.records.filter((_, index) => intervals.some(([a, b]) => a <= index && index <= b)) : parsed.records; +} +function oneRecord(records, key) { + if (records.length !== 1) throw new Error(`${key}: this setting requires exactly one selected sequence.`); + return records[0]; +} +function validateConstraints(value, records, start, key) { + const record = oneRecord(records, key); + if (/^[.xpb]+$/.test(value)) { + if (value.length !== record.sequence.length) throw new Error(`${key}: provide one constraint character per nucleotide.`); + return; + } + const sections = value.match(/[xpb]:[^xpb]+/g); + if (!sections || sections.join('') !== value) throw new Error(`${key}: use ./x/p/b per base or ranges such as b:3-4,p:6-7.`); + for (const section of sections) ranges(section.slice(2).replace(/,$/, ''), key, record.sequence.length, start); +} +function validateAccessibility(value, record, mode, key) { + const lines = value.split(/\r?\n/); + if (!/^#[\w\s]+$/.test(lines[0]) || !/^\s*#i.\s+l=1(\s+\d+)*\s*$/.test(lines[1] ?? '')) throw new Error(`${key}: paste RNAplfold text with its comment and length header lines.`); + const lengths = lines[1].match(/\d+/g).map(Number); + if (lengths.length < 2 || lengths.some((n, i) => n !== i + 1)) throw new Error(`${key}: accessibility lengths must be consecutive, starting at 1, with at least two columns.`); + const data = lines.slice(2).filter((line) => line.trim()); + if (data.length < record.sequence.length) throw new Error(`${key}: provide one data row per nucleotide.`); + for (let index = 0; index < record.sequence.length; index++) { + const cells = data[index].trim().split(/\s+/); + const values = cells.slice(1, 1 + Math.min(index + 1, lengths.length)); + if (Number(cells[0]) !== index + 1 || values.length !== Math.min(index + 1, lengths.length) || values.some((v) => !Number.isFinite(Number(v)) || Number(v) < 0 || mode === 'P' && Number(v) > 1)) throw new Error(`${key}: rows must be consecutive; required values must be finite ${mode === 'P' ? 'probabilities in [0,1]' : 'opening energies ≥ 0'}.`); + } +} +function complementary(a, b) { return ['AU', 'UA', 'GC', 'CG', 'GU', 'UG'].includes(a + b); } +export function validateInteractions(encoding, query, target, qStart, tStart, separator = ':') { + if (typeof encoding !== 'string' || !encoding || encoding.length > 10000 || encoding.split(separator).length > 100) throw new Error('Provide 1–100 target&query dot-bar interactions.'); + for (const entry of encoding.split(separator)) { + const strands = entry.split('&'); + if (strands.length !== 2) throw new Error('Each interaction needs target&query dot-bar encodings.'); + const positions = strands.map((strand, i) => { + const match = /^(-?[1-9]\d*)([.|]+)$/.exec(strand); + if (!match) throw new Error('Use a nonzero start index followed by dots and pairing bars, e.g. 1|||&1|||.'); + if (separator === ',' && (!match[2].startsWith('|') || !match[2].endsWith('|'))) throw new Error('Explicit seed strands must start and end with a pairing bar.'); + const record = i ? query : target, start = i ? qStart : tStart; + const offset = sequenceOffset(Number(match[1]), start); + if (offset < 0 || offset + match[2].length > record.sequence.length) throw new Error('A dot-bar interaction extends outside its sequence.'); + return [...match[2]].flatMap((c, p) => c === '|' ? [offset + p] : []); + }); + if (!positions[0].length || positions[0].length !== positions[1].length) throw new Error('Interaction strands must contain the same nonzero number of pairing bars.'); + for (let p = 0; p < positions[0].length; p++) { + if (!complementary(target.sequence[positions[0][p]], query.sequence[positions[1].at(-1 - p)])) throw new Error('The supplied interaction contains a non-complementary base pair.'); + } + } +} + +// Validate scalar controls independently so unfinished forms can be saved/loaded. +export function normalizeParameters(request) { + if (!['prediction', 'evaluation'].includes(request.task ?? 'prediction')) throw new Error('Choose prediction or evaluation.'); + const evaluating = request.task === 'evaluation'; + const parameters = {}; + const supplied = request.parameters ?? {}; + for (const field of FIELDS) { + if (evaluating && field.prediction) continue; + const value = supplied[field.key] ?? field.value; + if (field.type === 'checkbox') { + if (typeof value !== 'boolean') throw new Error(`${field.label}: choose on or off.`); + parameters[field.key] = value; + } else if (field.type === 'number') { + const n = typeof value === 'number' ? value : (typeof value === 'string' && value.trim() ? Number(value) : NaN); + if (!Number.isFinite(n) || n < field.min || n > field.max || (field.step !== 'any' && !Number.isInteger(n)) || field.exclude?.includes(n)) throw new Error(`${field.label}: use ${field.min}–${field.max}${field.exclude ? ', excluding 1 and 2' : ''}${field.step !== 'any' ? ' (whole numbers)' : ''}.`); + parameters[field.key] = n; + } else { + if (typeof value !== 'string' || value.length > (field.type === 'textarea' ? 1000000 : 10000) || /\x00/.test(value)) throw new Error(`${field.label}: invalid or oversized text input.`); + if (field.choices && !Object.hasOwn(field.choices, value)) throw new Error(`${field.label}: choose an available value.`); + parameters[field.key] = value.trim(); + } + } + for (const key of ['qIdxPos0', 'tIdxPos0']) { + const raw = request[key] ?? 1; + const n = typeof raw === 'number' || typeof raw === 'string' && raw.trim() ? Number(raw) : NaN; + if (!Number.isInteger(n) || n < -2000000000 || n > 2000000000) throw new Error(`${key}: use an integer between -2,000,000,000 and 2,000,000,000.`); + parameters[key] = n; + } + return parameters; +} + +export function prepareRequest(request) { + const task = request?.task ?? 'prediction'; + if (!['prediction', 'evaluation'].includes(task)) throw new Error('Choose prediction or evaluation.'); + const evaluating = task === 'evaluation'; + const query = parseFasta(request.query, 'Query', !evaluating), target = parseFasta(request.target, 'Target', !evaluating); + const parameters = normalizeParameters(request); + const qRecords = selectedRecords(query, parameters.qSet, 'qSet'), tRecords = selectedRecords(target, parameters.tSet, 'tSet'); + if (parameters.outPairwise && qRecords.length !== tRecords.length) throw new Error('Pairwise output requires the same number of selected query and target records.'); + const work = Math.max(...qRecords.map((q) => q.sequence.length)) * Math.max(...tRecords.map((t) => t.sequence.length)); + if (work > LIMITS.maxPairs) throw new Error('The longest selected query × longest selected target must be at most 1,000,000.'); + + // Validate sequence-dependent settings before loading the engine. + for (const [p, records] of [['q', qRecords], ['t', tRecords]]) { + const start = parameters[`${p}IdxPos0`]; + if (parameters[`${p}AccW`] && parameters[`${p}AccL`] > parameters[`${p}AccW`]) throw new Error(`${p}AccL must not exceed ${p}AccW.`); + if (parameters[`${p}RegionLenMax`] && (parameters[`${p}Acc`] === 'N' || parameters[`${p}Region`])) throw new Error(`${p}RegionLenMax: automatic regions require accessibility and cannot be combined with manual regions.`); + for (const record of records) ranges(parameters[`${p}Region`], `${p}Region`, record.sequence.length, start); + const seedRange = parameters[`seed${p.toUpperCase()}Range`]; + if (seedRange) ranges(seedRange, `seed${p.toUpperCase()}Range`, oneRecord(records, 'Seed regions').sequence.length, start); + if (parameters[`${p}AccConstr`]) validateConstraints(parameters[`${p}AccConstr`], records, start, `${p}AccConstr`); + if (['P', 'E'].includes(parameters[`${p}Acc`])) { + const record = oneRecord(records, 'Accessibility import'); + if (!parameters[`${p}AccFile`]) throw new Error(`${p}Acc: paste accessibility data for the selected import mode.`); + validateAccessibility(parameters[`${p}AccFile`], record, parameters[`${p}Acc`], `${p}AccFile`); + } + if (parameters[`${p}Shape`]) { + const record = oneRecord(records, 'SHAPE'); + for (const line of parameters[`${p}Shape`].split(/\r?\n/).filter((line) => line.trim() && !line.trim().startsWith('#'))) { + const cells = line.trim().split(/\s+/); + if (cells.length !== 2 || !/^\d+$/.test(cells[0]) || Number(cells[0]) < 1 || Number(cells[0]) > record.sequence.length || !Number.isFinite(Number(cells[1]))) throw new Error(`${p}Shape: use position (1-based) and finite reactivity on each line.`); + } + } + if (!/^(D(m-?\d+(\.\d+)?)?(b-?\d+(\.\d+)?)?|Z(b\d+(\.\d+)?)?|W)$/.test(parameters[`${p}ShapeMethod`])) throw new Error(`${p}ShapeMethod: invalid SHAPE method encoding.`); + if (!/^(M|C(\d+(\.\d+)?)?|S|[LO](s-?\d+(\.\d+)?i-?\d+(\.\d+)?)?)$/.test(parameters[`${p}ShapeConversion`])) throw new Error(`${p}ShapeConversion: invalid SHAPE conversion encoding.`); + } + const csvColumns = request.csvColumns ?? CSV_COLUMNS.split(','); + if (!Array.isArray(csvColumns) || !csvColumns.length || new Set(csvColumns).size !== csvColumns.length || csvColumns.some((key) => !CSV_CATALOG.some((c) => c.key === key))) throw new Error('Select at least one available CSV column, without duplicates.'); + if (parameters.outCsvSort && !csvColumns.includes(parameters.outCsvSort)) throw new Error('The CSV sort column must be selected for output.'); + const outputs = request.outputs ?? []; + if (!Array.isArray(outputs) || new Set(outputs).size !== outputs.length || outputs.some((key) => !EXTRA_OUTPUTS.some((entry) => entry.key === key && (!evaluating || !entry.prediction)))) throw new Error('Choose available additional output formats for this task.'); + if (outputs.includes('ensemble') && (qRecords.length !== 1 || tRecords.length !== 1)) throw new Error('Ensemble reports require one query and one target.'); + const needsEnsemble = csvColumns.some((c) => ENSEMBLE_COLUMNS.includes(c)) || outputs.some((c) => ['ensemble', 'spotProb', 'qSpotProb', 'tSpotProb'].includes(c)); + if (evaluating) { + validateInteractions(request.rri, query.records[0], target.records[0], parameters.qIdxPos0, parameters.tIdxPos0); + } else { + if (parameters.model === 'B' && parameters.mode !== 'H') throw new Error('Helix-block model B supports heuristic mode only.'); + if (parameters.noSeed && ['S', 'K'].includes(parameters.mode)) throw new Error('Seed-only and greedy prediction require a seed.'); + if (parameters.mode === 'K' && (parameters.model !== 'X' || needsEnsemble)) throw new Error('Greedy prediction requires model X and cannot produce ensemble/probability output.'); + if (parameters.seedTQ) validateInteractions(parameters.seedTQ, oneRecord(qRecords, 'Explicit seeds'), oneRecord(tRecords, 'Explicit seeds'), parameters.qIdxPos0, parameters.tIdxPos0, ','); + const minimumSeedLength = parameters.seedTQ ? Math.min(...parameters.seedTQ.split(',').map((seed) => seed.split('&')[0].split('|').length - 1)) : parameters.seedBP; + if (!parameters.noSeed && ['q', 't'].some((p) => parameters[`${p}IntLenMax`] && parameters[`${p}IntLenMax`] < minimumSeedLength)) throw new Error('Maximum interaction lengths must cover the required seed base pairs.'); + if (!parameters.noSeed && !parameters.seedTQ && [...qRecords, ...tRecords].some((r) => r.sequence.length < parameters.seedBP)) throw new Error('Every selected sequence must be at least as long as the seed; reduce Seed base pairs or disable the seed.'); + if (parameters.model === 'B' && (parameters.helixMinBP > parameters.helixMaxBP || !parameters.noSeed && minimumSeedLength > parameters.helixMaxBP)) throw new Error('Helix maximum must cover the helix minimum and required seed base pairs.'); + if (outputs.some((key) => ['bpProb', 'bpsvg'].includes(key)) && (parameters.model !== 'P' || !['H', 'M'].includes(parameters.mode) || parameters.windowWidth || parameters.mode === 'M' && !parameters.noSeed && (parameters.seedTQ || parameters.seedMaxUP || parameters.seedQMaxUP > 0 || parameters.seedTMaxUP > 0))) throw new Error('Base-pair probabilities require model P, heuristic/exact mode and no windows; exact mode supports no seed or stack-only seeds.'); + if (parameters.windowWidth) { + const maxLength = Math.max(...['q', 't'].map((p) => parameters[`${p}Acc`] === 'N' ? parameters[`${p}IntLenMax`] : Math.max(parameters[`${p}AccW`], parameters[`${p}IntLenMax`]))); + if (parameters.windowWidth < 10 || parameters.windowOverlap >= parameters.windowWidth || parameters.windowOverlap < maxLength || ['q', 't'].some((p) => !parameters[`${p}IntLenMax`] && (parameters[`${p}Acc`] === 'N' || !parameters[`${p}AccW`])) || parameters.outNumber > 1 && parameters.outOverlap !== 'B' || needsEnsemble || parameters.model === 'P') throw new Error('Prediction windows require width ≥ 10, overlap below width and at least the bounded interaction lengths, overlapping output, and no ensemble statistics/model P.'); + } + // Non-overlap constraints in native merged regions require a single region on + // the relevant strand; automatic region detection is only safe per region. + if (!parameters.outPerRegion && parameters.outOverlap !== 'B') { + for (const p of ['q', 't']) { + if ((parameters.outOverlap === 'N' || parameters.outOverlap === (p === 'q' ? 'T' : 'Q')) && (parameters[`${p}Region`].includes(',') || parameters[`${p}RegionLenMax`])) throw new Error('Non-overlapping output with multiple/automatic regions requires output per region.'); + } + } + if (parameters.outSpotProbSpots && !/^(-?[1-9]\d*&-?[1-9]\d*)(,-?[1-9]\d*&-?[1-9]\d*)*$/.test(parameters.outSpotProbSpots)) throw new Error('Probability spots must be target&query coordinate pairs, e.g. 3&7,5&9.'); + for (const spot of parameters.outSpotProbSpots ? parameters.outSpotProbSpots.split(',') : []) { + const [t, q] = spot.split('&').map(Number); + for (const [records, coordinate, start] of [[tRecords, t, parameters.tIdxPos0], [qRecords, q, parameters.qIdxPos0]]) { + const offset = sequenceOffset(coordinate, start); + if (records.some((record) => offset < 0 || offset >= record.sequence.length)) throw new Error('Probability spots must fall within every selected sequence.'); + } + } + } + return { task, query, target, parameters, csvColumns, outputs, rri: evaluating ? request.rri : '' }; +} + +export function makeArguments(request, format = 'C') { + const args = ['--query=/query.fa', '--target=/target.fa', `--outMode=${format}`, `--out=${format === 'C' ? '/results.csv' : '/report.txt'}`]; + if (request.task === 'evaluation') args.push('--personality=IntaRNAeval'); + for (const [key, value] of Object.entries(request.parameters)) { + if (key === 'outCsvSort' && format !== 'C' || key === 'outSpotProbSpots' || key === 'kineticScore' && request.parameters.mode !== 'K') continue; + // Omit defaults: the native parser distinguishes explicit values in several + // cross-option checks, especially accessibility/region constraints. + if (value === '' || value === PARAMETER_DEFAULTS[key]) continue; + const fileInput = /^(q|t)(Shape|AccFile)$/.test(key); + args.push(`--${key}=${fileInput ? `/${key}.txt` : value}`); + } + if (request.rri) args.push(`--rri=${request.rri}`); + if (format === 'C') { + args.push(`--outCsvCols=${[...new Set([...request.csvColumns, ...CONTEXT_COLUMNS, 'hybridDP'])].join(',')}`); + for (const key of request.outputs.filter((key) => !['normal', 'detailed', 'ensemble'].includes(key))) { + const spots = key === 'spotProb' && request.parameters.outSpotProbSpots ? `${request.parameters.outSpotProbSpots}:` : ''; + args.push(`--out=${key}:${spots}/output/${key}${key === 'bpsvg' ? '.svg' : '.csv'}`); + } + } + return args; +} + +export const JSON_SCHEMA = 'IntaRNA-parameters-v1'; + +// One parameter document crosses the JS/native boundary. File contents use the +// native JSON embedding contract, so no browser-specific input paths are needed. +export function makeParameterDocument(request, format = 'C') { + const parameters = {}; + for (const argument of makeArguments(request, format)) { + const separator = argument.indexOf('='), key = argument.slice(2, separator); + let value = argument.slice(separator + 1); + if (key === 'query' || key === 'target') value = { text: request[key].fasta }; + else if (/^[qt](Shape|AccFile)$/.test(key)) value = { text: request.parameters[key] + '\n' }; + else if (Object.hasOwn(request.parameters, key)) value = request.parameters[key]; + if (key === 'out') (parameters.out ??= []).push(value); + else if (!(['qIdxPos0', 'tIdxPos0'].includes(key) && value === 1)) parameters[key] = value; + } + return { schema: JSON_SCHEMA, parameters }; +} diff --git a/gui/results.js b/gui/results.js new file mode 100644 index 00000000..92a06f70 --- /dev/null +++ b/gui/results.js @@ -0,0 +1,147 @@ +import { CSV_CATALOG } from './columns.js'; +import { CONTEXT_COLUMNS } from './protocol.js'; +import { InteractionVisualization } from './visualization.js'; + +export const COLUMNS = Object.freeze([...CSV_CATALOG, { key: 'deltaE', label: 'mfe Δ (kcal/mol)', numeric: true }]); +const catalog = new Map(COLUMNS.map((column) => [column.key, column])); + +// Native CSV is unquoted, semicolon-separated; unavailable optional fields use +// NAN and seed fields may contain colon-separated lists. Preserve those strings. +export function parseResults(csv) { + if (typeof csv !== 'string') throw new Error('The engine did not return CSV text.'); + if (!csv.trim()) return []; + const lines = csv.trimEnd().split(/\r?\n/), keys = lines.shift().split(';'); + if (new Set(keys).size !== keys.length || keys.some((key) => !catalog.has(key)) || CONTEXT_COLUMNS.some((key) => !keys.includes(key))) throw new Error('Unexpected IntaRNA CSV columns. Serve the matching interface and engine.'); + const rows = lines.filter((line) => line.trim()).map((line) => { + const values = line.split(';'); + if (values.length !== keys.length) throw new Error('Malformed IntaRNA CSV row.'); + const row = Object.fromEntries(keys.map((key, index) => [key, values[index]])); + for (const key of CONTEXT_COLUMNS.filter((key) => key !== 'id1' && key !== 'id2')) { + if (!row[key].trim() || !Number.isFinite(Number(row[key]))) throw new Error(`Invalid ${key} in interaction output.`); + row[key] = Number(row[key]); + } + for (const key of ['start1', 'end1', 'start2', 'end2']) { + if (!Number.isInteger(row[key])) throw new Error('Invalid interaction coordinates.'); + } + if (row.start1 > row.end1 || row.start2 > row.end2) throw new Error('Reversed interaction coordinates.'); + return row; + }); + // Each sequence pair has its own optimum in a multi-FASTA screen. + const best = new Map(); + for (const row of rows) { + const pair = JSON.stringify([row.id1, row.id2]); + best.set(pair, Math.min(best.get(pair) ?? Infinity, row.E)); + } + return rows.map((row) => ({ ...row, deltaE: Number((row.E - best.get(JSON.stringify([row.id1, row.id2]))).toFixed(2)) })); +} +function numeric(value) { return String(value).trim() && Number.isFinite(Number(value)) ? Number(value) : null; } +export function selectRows(rows, search, key, direction) { + const query = search.toLowerCase().trim(), column = catalog.get(key); + return rows.filter((row) => Object.values(row).some((value) => String(value).toLowerCase().includes(query))).toSorted((a, b) => { + if (column?.numeric) { + const x = numeric(a[key]), y = numeric(b[key]); + if (x !== null && y !== null) return direction * (x - y); + if (x === null && y !== null) return 1; + if (x !== null && y === null) return -1; + } + return direction * String(a[key] ?? '').localeCompare(String(b[key] ?? '')); + }); +} +export function projectCsv(csv, columns) { + const lines = csv.trimEnd().split(/\r?\n/), keys = lines[0].split(';'); + const indices = columns.map((key) => keys.indexOf(key)); + if (indices.some((index) => index < 0)) throw new Error('Selected columns are absent from the engine output.'); + return lines.map((line) => { const cells = line.split(';'); return indices.map((index) => cells[index]).join(';'); }).join('\n') + '\n'; +} +export function downloadText(name, text) { + downloadBlob(name, new Blob([text], { type: 'text/plain;charset=utf-8' })); +} +export function downloadBlob(name, blob) { + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; link.download = name; link.click(); + setTimeout(() => URL.revokeObjectURL(url), 1000); +} +export class ResultsView { + constructor(root) { + this.root = root; this.rows = []; this.key = 'E'; this.direction = 1; + this.visualization = new InteractionVisualization(root); + this.search = root.querySelector('[data-role=search]'); + this.table = root.querySelector('table'); + this.body = this.table.querySelector('tbody'); + this.header = this.table.querySelector('thead tr'); + this.count = root.querySelector('[data-role=visible-count]'); + this.empty = root.querySelector('[data-role=no-matches]'); + this.picker = root.querySelector('[data-role=visible-columns]'); + this.search.addEventListener('input', () => this.render()); + root.querySelector('[data-role=download]').addEventListener('click', () => downloadText('intarna-interactions.csv', this.csv)); + } + clear() { + this.rows = []; this.csv = ''; this.body.replaceChildren(); this.root.hidden = true; + this.selected = null; this.visualization.clear(); + } + show(csv, columns = csv.trim().split('\n')[0].split(';'), request) { + this.rows = parseResults(csv); this.csv = projectCsv(csv, columns); + this.request = request; this.selected = null; this.visualization.clear(); + this.columns = columns.map((key) => catalog.get(key)); + if (columns.includes('E')) this.columns.push(catalog.get('deltaE')); + this.visible = new Set(this.columns.map((c) => c.key)); + this.picker.replaceChildren(); + for (const column of this.columns) { + const label = document.createElement('label'), input = document.createElement('input'); + input.type = 'checkbox'; input.checked = true; input.value = column.key; + input.addEventListener('change', () => { + if (input.checked) this.visible.add(column.key); else this.visible.delete(column.key); + this.render(); + }); + label.append(input, document.createTextNode(column.label)); this.picker.append(label); + } + this.search.value = ''; this.key = columns.includes('E') ? 'E' : columns[0]; this.direction = 1; + this.root.hidden = false; this.render(); return this.rows.length; + } + render() { + const rows = selectRows(this.rows, this.search.value, this.key, this.direction); + const columns = this.columns.filter((column) => this.visible.has(column.key)); + this.header.replaceChildren(); + const viewHeading = document.createElement('th'); viewHeading.scope = 'col'; viewHeading.setAttribute('aria-label', 'Interaction visualization'); + this.header.append(viewHeading); + for (const column of columns) { + const cell = document.createElement('th'), button = document.createElement('button'); + cell.scope = 'col'; button.type = 'button'; + const split = column.numeric ? column.label.indexOf(' ') : -1; + if (split > 0) button.append(document.createTextNode(column.label.slice(0, split)), document.createElement('br'), document.createTextNode(column.label.slice(split + 1))); + else button.textContent = column.label; + button.title = column.description ?? column.label; + const active = column.key === this.key, direction = this.direction === 1 ? 'ascending' : 'descending'; + cell.setAttribute('aria-sort', active ? direction : 'none'); + button.setAttribute('aria-label', `Sort by ${column.label}${active ? `, currently ${direction}` : ''}`); + button.addEventListener('click', () => { this.direction = active ? -this.direction : 1; this.key = column.key; this.render(); }); + cell.append(button); this.header.append(cell); + } + this.body.replaceChildren(); + for (const row of rows) { + const tr = document.createElement('tr'); + tr.classList.toggle('selected', row === this.selected); + const action = document.createElement('td'), view = document.createElement('button'); + view.type = 'button'; view.textContent = 'View'; view.className = 'view-interaction'; + view.setAttribute('aria-label', `Visualize ${row.id1} ${row.start1}–${row.end1} with ${row.id2} ${row.start2}–${row.end2}`); + view.setAttribute('aria-pressed', String(row === this.selected)); + tr.addEventListener('click', () => { + this.selected = row; this.visualization.show(row, this.request); + for (const other of this.body.children) { + other.classList.toggle('selected', other === tr); + other.querySelector('.view-interaction').setAttribute('aria-pressed', String(other === tr)); + } + }); + action.append(view); tr.append(action); + for (const column of columns) { + const cell = document.createElement('td'); + cell.textContent = ['E', 'deltaE'].includes(column.key) ? Number(row[column.key]).toFixed(2) : String(row[column.key]); + if (column.numeric) cell.className = 'number'; tr.append(cell); + } + this.body.append(tr); + } + this.count.textContent = `${rows.length} of ${this.rows.length} interactions`; + this.empty.hidden = rows.length > 0; + } +} diff --git a/gui/runner.js b/gui/runner.js new file mode 100644 index 00000000..91ccc6b2 --- /dev/null +++ b/gui/runner.js @@ -0,0 +1,49 @@ +// The main thread stays available even while synchronous C++ is calculating. +export class PredictionRunner { + constructor(workerFactory = () => new Worker(new URL('./intarna-worker.js', import.meta.url), { type: 'module' })) { + this.workerFactory = workerFactory; + this.worker = null; + this.cancel = null; + } + + run(request, onStatus = () => {}) { + if (this.worker) return Promise.reject(new Error('A prediction is already running.')); + return new Promise((resolve, reject) => { + const worker = this.workerFactory(); + this.worker = worker; + const finish = (error, result) => { + if (this.worker !== worker) return; // Ignore queued messages after abort. + worker.terminate(); + this.worker = null; + this.cancel = null; + if (error) reject(error); + else resolve(result); + }; + this.cancel = () => finish(new DOMException('Computation aborted.', 'AbortError')); + worker.onmessage = ({ data }) => { + if (this.worker !== worker) return; + if (data.type === 'status') onStatus(data.message); + else if (data.type === 'result') finish(null, data); + else if (data.type === 'error') { + const error = new Error(data.message); + error.diagnostics = data.diagnostics; + finish(error); + } + }; + worker.onerror = (event) => { + event.preventDefault(); + finish(new Error('Could not load or run the prediction engine. Reload the page and check that intarna.js and intarna.wasm are served together.')); + }; + worker.onmessageerror = () => finish(new Error('Could not read the prediction engine response.')); + try { + worker.postMessage(request); + } catch (error) { + finish(error); + } + }); + } + + abort() { + this.cancel?.(); + } +} diff --git a/gui/sessions.js b/gui/sessions.js new file mode 100644 index 00000000..ed3c873a --- /dev/null +++ b/gui/sessions.js @@ -0,0 +1,125 @@ +import { ResultsView, downloadBlob } from './results.js'; +import { serializeParameters, importParameters } from './parameter-file.js'; +import { zipFiles } from './archive.js'; +import { AdditionalOutputView } from './output-visualization.js'; + +// Sessions live only in this page. Each owns a JSON snapshot and its own view; +// editing the form or exploring another session cannot change an earlier run. +export class SessionsView { + constructor(root, template, restore, reportError, announce) { + this.root = root; this.template = template; this.restore = restore; this.reportError = reportError; this.announce = announce; + this.entries = new Map(); this.nextNumber = 1; this.selected = null; + } + + deselect() { + this.selected = null; + for (const session of this.entries.values()) { + session.root.dataset.selected = 'false'; + session.toggle.textContent = 'Show'; + } + } + + setExpanded(session, expanded) { + session.panel.hidden = !expanded; + session.toggle.setAttribute('aria-expanded', String(expanded)); + session.toggle.textContent = expanded ? 'Hide' : 'Show'; + // Unload third-party viewers while folded. The table selection is retained + // and can be visualized again without recomputing the prediction. + if (!expanded) session.view.visualization.clear(); + else { + if (session.view.selected) session.view.visualization.show(session.view.selected, session.view.request); + for (const fileView of session.fileViews) fileView.resize(); + } + } + + select(session, restore = true) { + if (restore) this.restore(importParameters(session.parameterJson), session.name); + this.selected = session.id; + for (const entry of this.entries.values()) { + entry.root.dataset.selected = String(entry === session); + this.setExpanded(entry, entry === session); + } + } + + add(request, result, provenance) { + // Prepared indices live in parameters, whereas the JSON serializer accepts + // editable requests with top-level indices. Preserve signed coordinates. + const parameterJson = serializeParameters({ ...request, qIdxPos0: request.parameters.qIdxPos0, tIdxPos0: request.parameters.tIdxPos0 }, provenance); + const root = this.template.content.firstElementChild.cloneNode(true); + const find = (role) => root.querySelector(`[data-role=${role}]`); + const id = `session-${this.nextNumber}`, task = request.task === 'evaluation' ? 'Evaluation' : 'Prediction'; + const session = { + id, name: `${task} ${this.nextNumber}`, parameterJson, root, + panel: find('panel'), toggle: find('toggle'), view: new ResultsView(find('results-view')), fileViews: [], + }; + const count = session.view.show(result.csv, result.csvColumns, request); + const summary = count ? `${task} complete: ${count} interaction${count === 1 ? '' : 's'}.` : request.task === 'prediction' && request.parameters.outNumber === 0 ? 'Accessibility computation complete. No interaction rows requested.' : 'No favorable interactions found with these sequences and settings.'; + find('summary').textContent = summary; + root.dataset.sessionId = id; + session.panel.id = `${id}-panel`; session.toggle.setAttribute('aria-controls', session.panel.id); + const name = find('name'); name.value = session.name; + const rename = () => { + session.name = name.value.trim() || `${task} ${id.slice('session-'.length)}`; + root.setAttribute('aria-label', session.name); + session.toggle.setAttribute('aria-label', `Show or hide results and restore inputs for ${session.name}`); + find('delete').setAttribute('aria-label', `Delete session ${session.name}`); + find('download-zip').setAttribute('aria-label', `Download ZIP for ${session.name}`); + }; + name.addEventListener('input', rename); + name.addEventListener('change', () => { rename(); name.value = session.name; }); + name.addEventListener('keydown', (event) => { if (event.key === 'Enter') name.blur(); }); + rename(); + // The name and header background also select a run. Action buttons retain + // their own behavior, so exporting/deleting cannot overwrite edited inputs. + const header = root.querySelector('.session-header'); + header.tabIndex = 0; header.setAttribute('role', 'group'); + header.setAttribute('aria-label', 'Select result and restore its inputs'); + for (const event of ['click', 'focusin']) header.addEventListener(event, (event) => { + if (!event.target.closest('button') && (this.selected !== id || session.panel.hidden)) this.select(session); + }); + header.addEventListener('keydown', (event) => { + if (event.target === header && ['Enter', ' '].includes(event.key)) { event.preventDefault(); this.select(session); } + }); + // Clicking or keyboard-focusing an output area selects its computed inputs. + for (const event of ['click', 'focusin']) session.panel.addEventListener(event, () => { + if (this.selected !== id) this.select(session); + }); + session.toggle.addEventListener('click', () => { + if (this.selected === id && !session.panel.hidden) this.setExpanded(session, false); + else this.select(session); + }); + + // Each archive uses the saved JSON and full outputs, never the current form, + // filtered table, or the session selected at download time. + find('download-zip').addEventListener('click', () => { + try { + const files = [{ name: 'parameter.json', text: parameterJson }, { name: 'intarna-interactions.csv', text: session.view.csv }, ...result.files]; + const filename = session.name.replace(/[^\p{L}\p{N}._-]+/gu, '-').replace(/^[.-]+|[.-]+$/g, '').slice(0, 80) || id; + downloadBlob(`${filename}.zip`, new Blob([zipFiles(files)], { type: 'application/zip' })); + } catch (error) { this.reportError(new Error(`ZIP download failed: ${error.message}`)); } + }); + for (const [index, file] of result.files.entries()) { + const fileView = new AdditionalOutputView(file, request, `${id}-file-${index}`, () => { + downloadBlob(file.name, new Blob([file.text], { type: 'text/plain;charset=utf-8' })); + }); + session.fileViews.push(fileView); find('file-list').append(fileView.root); + } + find('output-files').hidden = !result.files.length; + find('diagnostic-text').textContent = result.diagnostics; find('diagnostics').hidden = !result.diagnostics; + + find('delete').addEventListener('click', () => { + const entries = [...this.entries.values()], index = entries.indexOf(session); + const next = entries[index + 1] ?? entries[index - 1]; + session.view.clear(); + for (const fileView of session.fileViews) fileView.destroy(); + root.remove(); this.entries.delete(id); + // Deleting output does not silently overwrite an edited form. + if (this.selected === id) this.selected = null; + this.announce(`${session.name} deleted. ${this.entries.size} session${this.entries.size === 1 ? '' : 's'} remaining.`); + (next?.toggle ?? document.getElementById('compute')).focus(); + }); + this.entries.set(id, session); this.nextNumber++; + this.root.prepend(root); this.select(session, false); + return summary; + } +} diff --git a/gui/styles.css b/gui/styles.css new file mode 100644 index 00000000..ea60e124 --- /dev/null +++ b/gui/styles.css @@ -0,0 +1,885 @@ +/* Shared vaRRI main-v2 palette and institutional header. Keep all assets local. */ +:root { + color-scheme: light; + --brand-blue:#145a96; + --brand-blue-dark:#0f4676; + --brand-blue-soft:#eaf2f8; + --table-header:#d9e8f6; + --table-selection:#c6e5f4; + --brand-accent:#f4bb44; + --surface:#fff; + --surface-muted:#f3f7fb; + --text:#1c2b39; + --muted:#4f6478; + --border:#ccd9e5; + font-family:"Segoe UI",Tahoma,Geneva,sans-serif; + color:var(--text); + background:#f3f7fb; + font-size:16px; + line-height:1.5; +} + +* { + box-sizing:border-box; +} + +body { + margin:0; + background:linear-gradient(180deg,#f8fbff,#eef3fb 45%,#fff); + min-height:100vh; +} + +[hidden] { + display:none !important; +} + +a { + color:var(--brand-blue); + text-underline-offset:3px; +} + +button,input,select,textarea { + font:inherit; +} + +button,summary { + cursor:pointer; +} + +button { + border:1px solid var(--border); + border-radius:5px; + padding:.6rem 1rem; + font-weight:600; +} + +button:disabled { + opacity:.6; + cursor:wait; +} + +button.primary { + color:white; + background:var(--brand-blue); + border-color:var(--brand-blue); +} + +button.primary:hover { + background:var(--brand-blue-dark); +} + +button.secondary { + color:var(--brand-blue-dark); + background:var(--surface); +} + +button.secondary:hover { + background:var(--brand-blue-soft); +} + +:focus-visible { + outline:3px solid var(--brand-accent); + outline-offset:3px; +} + +input,select,textarea { + border:1px solid #9bafc2; + border-radius:4px; + color:var(--text); + background:var(--surface); + padding:.45rem .55rem; + min-width:0; + max-width:100%; +} + +input[type=checkbox] { + accent-color:var(--brand-blue); + width:1rem; + height:1rem; + margin:.2rem .4rem .2rem 0; + flex-shrink:0; +} + +textarea { + display:block; + width:100%; + resize:vertical; + min-height:7rem; + font-family:Consolas,"Liberation Mono",monospace; + line-height:1.65; +} + +label { + font-weight:600; +} + +small,.input-help,.table-note,.field-hint { + font-size:.85rem; + color:var(--muted); +} + +p { + max-width:80ch; +} + +h1,h2,h3,p { + margin:0 0 .75rem; +} + +h1 { + font-size:1.8rem; + line-height:1.2; +} + +h2 { + font-size:1.35rem; +} + +h3 { + font-size:1.1rem; +} + +.site-header { + min-height:100px; + padding:18px 28px; + display:flex; + align-items:center; + gap:24px; + background:#344a9a; + color:#f7fbff; +} + +.site-header a { + color:inherit; + text-decoration:none; +} + +.group-logo { + display:block; + width:auto; + height:60px; +} + +.uni-logo { + display:block; + width:auto; + height:52px; +} + +.brand { + display:flex; + align-items:center; + gap:12px; + font-weight:700; + font-size:1.6rem; + line-height:1.3; +} + +.brand small { + display:block; + font-size:.85rem; + font-weight:400; + color:#d9e8f6; +} + +.university-link { + margin-left:auto; + display:flex; + align-items:center; + gap:12px; + font-size:.85rem; + line-height:1.35; + text-align:right; +} + +main { + width:min(1300px,100%); + margin:auto; + padding:30px 20px; +} + +.introduction { + display:flex; + justify-content:space-between; + gap:24px; + align-items:start; + margin-bottom:20px; +} + +.introduction p { + color:var(--muted); +} + +.local-note { + flex-shrink:0; + font-size:.85rem; + padding-top:.3rem; +} + +fieldset { + border:0; + margin:0; + padding:0; + min-width:0; +} + +.compute-bar,.table-tools { + display:flex; + align-items:center; + flex-wrap:wrap; + justify-content:space-between; + gap:12px; +} + +#task-help { + font-size:.9rem; + color:var(--muted); +} + +#parameter-groups { + border:1px solid var(--border); + background:#fbfdff; + border-radius:8px; +} + +#parameter-tabs { + display:flex; + flex-wrap:wrap; + gap:4px; + padding:8px; + border-bottom:1px solid var(--border); + background:var(--brand-blue-soft); + border-radius:7px 7px 0 0; +} + +[role=tab] { + border-color:transparent; + background:transparent; + color:var(--brand-blue-dark); + padding:.55rem .75rem; + font-size:.85rem; +} + +[role=tab][aria-selected=true] { + background:var(--brand-blue); + color:white; +} + +[role=tab]:hover { + border-color:var(--brand-blue); +} + +.group-body { + padding:18px; +} + +.sequence-grid { + display:grid; + grid-template-columns:repeat(2,minmax(0,1fr)); + gap:18px 24px; +} + +.field-grid { + display:grid; + grid-template-columns:repeat(auto-fit,minmax(10rem,14rem)); + gap:12px 16px; + align-items:end; + justify-content:start; + margin-bottom:12px; +} + +/* Explicit rows preserve the requested grouping; subgrid aligns inputs below + labels of different heights without fixing a font-dependent label height. + Bounded tracks keep short rows left-aligned instead of stretching controls + across the complete panel. */ +.field-grid.columns-1 { grid-template-columns:minmax(10rem,38rem); } +.field-grid.columns-2 { grid-template-columns:repeat(2,minmax(10rem,18rem)); } +.field-grid.columns-3 { grid-template-columns:repeat(3,minmax(9rem,14rem)); } +.field-grid.columns-4 { grid-template-columns:repeat(4,minmax(8.5rem,12rem)); } +.field-grid.columns-5 { grid-template-columns:repeat(5,minmax(8rem,11rem)); } +.field-grid > .field:not(.check) { display:grid; grid-row:span 4; grid-template-rows:subgrid; row-gap:5px; } +.field-grid > .field:not(.check) > label { align-self:end; } +.field-grid > .field:not(.check) > :nth-child(2) { align-self:start; } +.accessibility-columns { display:grid; grid-template-columns:repeat(2,minmax(16rem,32rem)); gap:16px; justify-content:start; margin-top:12px; } +.accessibility-columns > div { min-width:0; } +.seed-primary-row { + display:grid; + grid-template-columns:minmax(10rem,12rem) minmax(12rem,24rem); + gap:12px 16px; + align-items:start; + margin-bottom:12px; +} +.seed-primary-row .field { min-width:0; } +#csv-options .field-grid.columns-1 { grid-template-columns:minmax(10rem,19rem); } +.field-grid:has(#noSeed) { display:none; } +#query,#target { + white-space:pre; + overflow:auto; + min-height:20rem; +} +#sequence-help,#general-options p { max-width:none; } +.input-warning { font-size:.85rem; color:#79510b; max-width:none; overflow-wrap:anywhere; } + +.strand-heading,.sequence-meta { + display:flex; + align-items:center; + justify-content:space-between; + gap:8px; + margin-bottom:8px; +} + +.strand-heading span { + color:var(--muted); + font-size:.85rem; +} + +.sequence-meta { + margin-top:8px; + font-size:.85rem; + flex-wrap:wrap; + color:var(--muted); +} + +.sequence-meta input { + width:8rem; +} + +.sequence-meta label { + font-weight:400; +} + +.input-help { + margin:12px 0 0; +} + +#evaluation-input { + margin-top:20px; +} + +.field { + display:flex; + flex-direction:column; + align-items:stretch; + gap:5px; + min-width:0; +} + +.field.check { + flex-direction:row; + align-items:center; + align-self:start; + gap:4px; +} + +.field label { + font-size:.9rem; +} + +.field input[type=number] { + width:9rem; +} + +.field-hint { + margin:0; +} + +.field input[type=file] { + font-size:.8rem; + padding:.2rem; + border:0; + background:transparent; +} + +.field:has(:disabled) { + opacity:.65; +} + +.compute-bar { + margin:20px 0; +} + +.checkbox-grid { + display:grid; + grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); + gap:8px 16px; + padding:12px 0; +} + +.checkbox-grid label { + display:flex; + align-items:flex-start; + font-weight:400; + font-size:.85rem; + overflow-wrap:anywhere; +} + +.subheading { + margin-top:24px; +} + +.selection-tools { + display:flex; + gap:8px; + flex-wrap:wrap; +} + +.selection-tools button { + font-size:.8rem; + padding:.3rem .6rem; +} + +.csv-group { margin-top:16px; } +.csv-group legend { font-weight:600; } +.text-button { background:none; border:0; padding:.15rem .5rem; color:var(--brand-blue); font-size:.8rem; text-decoration:underline; font-weight:400; } +.csv-columns { grid-template-columns:repeat(auto-fill,minmax(125px,1fr)); gap:6px 16px; padding:6px 0; } + +.results { + background:var(--surface); + border:1px solid var(--border); + border-radius:8px; + margin-top:24px; + padding:22px; + min-width:0; +} + +#result-status { + color:var(--muted); +} + +.table-tools { + margin:18px 0 12px; +} + +.download-actions { + display:flex; + flex-wrap:wrap; + gap:8px; +} + +.table-tools label { + display:flex; + gap:8px; + align-items:center; + font-size:.9rem; +} + +[data-role=visible-count] { + font-size:.85rem; + color:var(--muted); +} + +.column-picker { + margin-bottom:12px; + font-size:.9rem; +} + +.table-scroll { + width:100%; + max-height:500px; + overflow:auto; + border:1px solid var(--border); +} + +table { + border-collapse:collapse; + width:100%; + white-space:nowrap; + font-size:.85rem; +} + +th { + background:var(--table-header); + text-align:left; + padding:0 5px; + position:sticky; + top:0; + z-index:1; +} + +th button { + background:transparent; + border:0; + padding:10px 0; + color:var(--brand-blue-dark); + width:100%; + text-align:left; +} + +th[aria-sort=ascending] button::after { + content:' ↑'; +} + +th[aria-sort=descending] button::after { + content:' ↓'; +} + +td { + border-top:1px solid #e0e8f0; + padding:10px 5px; +} + +tr:nth-child(even) { + background:#f8fbff; +} + +td.number { + text-align:right; + font-variant-numeric:tabular-nums; +} + +.table-note { + margin:12px 0; + max-width:none; +} + +.view-interaction { + padding:.25rem .35rem; + color:var(--brand-blue-dark); + background:var(--surface); +} + +tbody tr { + cursor:pointer; +} + +tbody tr:hover { + background:var(--brand-blue-soft); +} +tbody tr.selected { background:var(--table-selection); } + +.view-interaction[aria-pressed=true] { + background:var(--brand-blue); + color:white; +} + +[data-role=visualization] { + margin-top:20px; +} + +.visualization-heading { + display:flex; + align-items:baseline; + flex-wrap:wrap; + gap:16px; +} + +[data-role=varri-frame] { + display:block; + width:100%; + height:600px; + margin-top:12px; + border:1px solid var(--border); + border-radius:5px; + background:white; +} + +[data-role=visualization-status] { + max-width:none; + overflow-wrap:anywhere; + font-size:.9rem; +} + +[data-role=output-files] { + margin-top:24px; +} + +[data-role=file-list] details,:is(#diagnostics, [data-role=diagnostics]) { + border-top:1px solid var(--border); + margin-top:12px; + padding-top:12px; +} + +.output-file-summary { + display:flex; + align-items:center; + flex-wrap:wrap; + gap:6px 10px; + min-height:2.2rem; + color:var(--brand-blue-dark); + font-weight:600; + list-style:none; +} + +.output-file-summary::before { + content:'▸'; + width:.8rem; +} + +.output-file[open] > .output-file-summary::before { + content:'▾'; +} + +.output-file-name { + overflow-wrap:anywhere; +} + +.output-file-context { + color:var(--muted); + font-size:.85rem; + font-weight:400; +} + +.output-download { + padding:.1rem .35rem; +} + +.output-file-body { + padding:.8rem 0 .25rem 1.15rem; +} + +.output-tabs { + display:flex; + gap:4px; + padding:8px; + border-bottom:1px solid var(--border); + border-radius:5px 5px 0 0; + background:var(--brand-blue-soft); +} + +.output-tab { + border:1px solid transparent; + border-radius:5px; + padding:.55rem .75rem; + color:var(--brand-blue-dark); + background:transparent; +} + +.output-tab[aria-selected=true] { + border-color:var(--brand-blue); + background:var(--brand-blue); + color:white; +} + +.output-tab:hover { + border-color:var(--brand-blue); +} + +.output-tab-panel { + padding-top:12px; + min-width:0; +} + +.plot-tools { + display:flex; + justify-content:flex-end; + min-height:2.6rem; +} + +.plot-tools button { + font-size:.85rem; + padding:.35rem .7rem; +} + +.output-plot { + width:100%; + min-height:420px; +} + +.output-plot-status { + max-width:none; + color:var(--muted); + font-size:.85rem; +} + +.output-tab-panel pre { + margin:0; +} + +pre { + white-space:pre; + overflow:auto; + max-height:24rem; + font-size:.8rem; + background:var(--surface-muted); + padding:12px; +} + +:is(#diagnostics, [data-role=diagnostics]) pre { + white-space:pre-wrap; + overflow-wrap:anywhere; +} + +footer { + padding:24px 0; + font-size:.85rem; + color:var(--muted); +} + +footer p { + margin-bottom:8px; + max-width:none; +} + +.error { + color:#932d28; + border:1px solid #d8a8a5; + background:#fff1f0; + border-radius:5px; + padding:12px; + max-width:none; +} + +dialog { + border:1px solid var(--border); + border-radius:10px; + max-width:min(450px,calc(100% - 32px)); + padding:28px; + color:var(--text); +} + +dialog::backdrop { + background:rgba(20,45,75,.4); +} + +.spinner { + width:28px; + height:28px; + border:3px solid var(--border); + border-top-color:var(--brand-blue); + border-radius:50%; + animation:spin 1s linear infinite; + margin-bottom:14px; +} + +@keyframes spin { + to { + transform:rotate(360deg); + } +} + +.sr-only { + position:absolute; + width:1px; + height:1px; + padding:0; + margin:-1px; + overflow:hidden; + clip:rect(0,0,0,0); + white-space:nowrap; + border:0; +} + +.skip-link { + position:absolute; + left:12px; + top:-100px; + background:white; + padding:10px; + z-index:10; +} + +.skip-link:focus { + top:10px; +} + +@media(max-width:760px) { + .site-header { + padding:14px; + gap:14px; + flex-wrap:wrap; + } + .group-logo { + height:40px; + } + .uni-logo { + height:36px; + } + .university-link { + font-size:.75rem; + gap:8px; + } + .brand { + font-size:1.2rem; + } + .brand img { + width:32px; + height:32px; + } + .brand small { + display:none; + } + main { + padding:22px 12px; + } + .introduction { + display:block; + } + .local-note { + margin-top:12px; + } + .sequence-grid { + grid-template-columns:1fr; + } + .field-grid { + grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr)); + } + .field-grid[class*=columns-],.accessibility-columns { grid-template-columns:1fr; } + .seed-primary-row { grid-template-columns:1fr; } + #csv-options .field-grid.columns-1 { grid-template-columns:1fr; } + .results { + padding:14px; + } + .table-tools label { + flex-wrap:wrap; + } + .table-tools input { + width:100%; + } + h1 { + font-size:1.55rem; + } + .group-body { + padding:14px; + } + .output-file-body { + padding-left:0; + } +} + +@media(prefers-reduced-motion:reduce) { + .spinner { + animation:none; + } +} + +/* Examples are a compact disclosure list with descriptions, not another form. */ +.examples-menu { position:relative; } +.examples-menu > summary { list-style:none; padding:.6rem 1rem; border:1px solid var(--border); border-radius:5px; background:var(--surface); color:var(--brand-blue-dark); font-weight:600; } +.examples-menu > summary::after { content:' ▾'; } +.examples-menu > div { position:absolute; bottom:calc(100% + .5rem); left:0; width:min(26rem,80vw); padding:.4rem; background:var(--surface); border:1px solid var(--border); border-radius:5px; box-shadow:0 6px 20px #1c2b3920; z-index:2; } +.examples-menu button { width:100%; text-align:left; background:var(--surface); border:0; } +.examples-menu button:hover { background:var(--brand-blue-soft); } +.examples-menu button strong,.examples-menu button span { display:block; } +.examples-menu button span { font-size:.85rem; font-weight:400; color:var(--muted); } +textarea::placeholder { color:#687d8e; opacity:1; } + +.strand-heading { flex-wrap:wrap; gap:.4rem .7rem; } +.upload-controls { display:flex; align-items:center; flex-wrap:wrap; gap:.4rem; margin-left:auto; } +button.small-button { padding:.25rem .65rem; font-size:.85rem; } +textarea.drag-over { outline:3px solid var(--brand-accent); background:var(--brand-blue-soft); } + +/* Native radio semantics keep the task overview visible and keyboard operable. */ +.task-selector { display:flex; flex-wrap:wrap; gap:.5rem; margin-bottom:.6rem; } +.task-choice { position:relative; display:flex; align-items:baseline; gap:.6rem; padding:.55rem 1rem; border:1px solid var(--border); border-radius:5px; background:var(--surface); cursor:pointer; } +.task-choice input { position:absolute; inset:0; opacity:0; width:100%; height:100%; margin:0; cursor:pointer; z-index:1; } +.task-choice:has(:checked) { background:var(--brand-blue); color:white; border-color:var(--brand-blue); } +.task-choice:has(:checked) small { color:white; } +.task-choice:has(:focus-visible) { outline:3px solid var(--brand-accent); outline-offset:3px; } +.compute-bar { justify-content:flex-start; gap:8px; } +#compute { margin-right:24px; } +.parameter-actions-label { font-size:.9rem; } +@media(max-width:480px) { #compute { flex-basis:100%; margin-right:0; } .parameter-actions-label { flex-basis:100%; } } + +/* Every completed run owns its controls and output, even while folded. */ +.session { margin-top:18px; border:1px solid var(--border); border-radius:6px; min-width:0; } +.session[data-selected=true] { border-color:var(--brand-blue); } +.session-header { display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:14px; background:var(--surface-muted); border-radius:6px; } +.session-name { display:flex; align-items:center; flex:1 1 20rem; gap:10px; font-size:.85rem; } +.session-name input { flex:1; width:12rem; font-weight:600; } +.session-header button { font-size:.85rem; } +.session-header [data-role=toggle]::before { content:'▸ '; } +.session-header [aria-expanded=true]::before { content:'▾ '; } +.delete-session { display:inline-flex; align-items:center; } +.session-panel { padding:16px; } +.session-summary { color:var(--muted); } +@media(max-width:480px) { .session-header,.session-panel { padding:10px; } } diff --git a/gui/tests/export.test.mjs b/gui/tests/export.test.mjs new file mode 100644 index 00000000..6884cf2c --- /dev/null +++ b/gui/tests/export.test.mjs @@ -0,0 +1,40 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { DEFAULTS, prepareRequest } from '../protocol.js'; +import { archiveFiles } from '../archive.js'; +import { visualizationUrl } from '../visualization.js'; + +test('visualization retains full strand orientation, bulges, names and indices crossing zero', () => { + const request = prepareRequest({ ...DEFAULTS, query: '>other\nGGGAGGAGGG\n>q;β\nGGGAGGAGGG', qIdxPos0: -3, tIdxPos0: -5 }); + const url = new URL(visualizationUrl({ id1: 'target', id2: 'q_β', start1: -3, end1: 3, start2: -2, end2: 4, E: -1, hybridDP: '((..((&)).)).' }, request)); + assert.equal(url.origin + url.pathname, 'https://backofenlab.github.io/vaRRI/'); + assert.equal(url.searchParams.get('sequence'), 'CCCUCCUCCC&GGGAGGAGGG'); + assert.equal(url.searchParams.get('structure'), '..((..((..&.)).))....'); + assert.equal(url.searchParams.get('seqName2'), 'q_β'); + assert.equal(url.searchParams.get('startIndex1'), '-5'); + assert.equal(url.searchParams.get('startIndex2'), '-3'); + assert.equal(url.searchParams.get('showRenderingOnly'), 'true'); + assert.throws(() => visualizationUrl({ id1: 'missing', hybridDP: '(&)' }, request), /not found/); + assert.throws(() => visualizationUrl({ id1: 'target', id2: 'q_β', start1: -5, end1: -4, hybridDP: '(((&)))' }, request), /coordinates/); + assert.throws(() => visualizationUrl({ id1: 'target', hybridDP: '(&)' }, { ...request, parameters: { ...request.parameters, tIdxPos0: 0 } }), /nonzero/); +}); + +test('archive preserves effective non-default settings, selected CSV, auxiliary inputs and reports', () => { + const request = prepareRequest({ ...DEFAULTS, task: 'evaluation', rri: '1||||||||||&3||||||||||', qIdxPos0: 3, parameters: { temperature: 21, qShape: '1 0.2\n2 0.3' }, csvColumns: ['E'] }); + request.outputs = ['detailed']; + const files = archiveFiles(request, { csv: 'id1;start1;end1;id2;start2;end2;E;hybridDP\ntarget;1;10;query;3;12;-21.4;((((((((((&))))))))))\n', files: [{ name: 'intarna-detailed.txt', text: 'report' }] }, 'IntaRNA 3.4.1\nViennaRNA 2.7.0\n'); + const entries = Object.fromEntries(files.map((file) => [file.name, file.text])); + assert.deepEqual(Object.keys(entries), ['parameter.json', 'intarna-interactions.csv', 'intarna-detailed.txt']); + const document = JSON.parse(entries['parameter.json']); + assert.equal(document.parameters.query.text, '>query\nGGGAGGAGGG\n'); + assert.equal(entries['intarna-interactions.csv'], 'E\n-21.4\n'); + assert.equal(document.parameters.qShape.text, '1 0.2\n2 0.3'); + assert.ok(document._comment.includes('ViennaRNA 2.7.0')); + for (const [key, value] of Object.entries({ personality: 'IntaRNAeval', temperature: 21, qIdxPos0: 3, outCsvCols: 'E' })) assert.equal(document.parameters[key], value); + assert.equal(document.parameters.tIdxPos0, undefined); + assert.equal(document.parameters.seedBP, undefined); + assert.deepEqual(document.gui.reports, ['detailed']); + assert.ok(document._comment.some((line) => line.includes('IntaRNA --parameterFile=parameter.json'))); + assert.equal(entries['intarna-detailed.txt'], 'report'); + assert.throws(() => archiveFiles(request, { csv: '', files: [] }, ''), /version/); +}); diff --git a/gui/tests/output-visualization.test.mjs b/gui/tests/output-visualization.test.mjs new file mode 100644 index 00000000..d8aa08f8 --- /dev/null +++ b/gui/tests/output-visualization.test.mjs @@ -0,0 +1,63 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { outputFileContext, outputVisualization } from '../output-visualization.js'; + +const request = { + target: { records: [{ id: 'target-1' }, { id: 'target-2' }] }, + query: { records: [{ id: 'query-1' }, { id: 'query-2' }] }, +}; + +test('profile plots retain signed categorical indices and sequence names', () => { + const spec = outputVisualization({ + name: 'qMinE-t1q2.csv', + text: 'idx;query-2;minE\n-2;G;-3.2\n-1;C;NA\n1;A;-2.1\n', + }, request); + assert.equal(spec.kind, 'profile'); + assert.deepEqual(spec.traces[0].x, ['-2', '-1', '1']); + assert.deepEqual(spec.traces[0].y, [-3.2, null, -2.1]); + assert.equal(spec.layout.xaxis.type, 'category'); + assert.deepEqual(spec.layout.xaxis.categoryarray, ['-2', '-1', '1']); + assert.match(spec.layout.title.text, /query-2/); + assert.equal(spec.context.label, 'target-1 : query-2'); +}); + +test('pair energy and probability matrices use literal category axes', () => { + const energy = outputVisualization({ + name: 'pMinE-t2q1.csv', + text: 'minE;A_-1;C_1\nG_5;-4.2;NA\nU_6;-2.0;-1.5\n', + }, request); + assert.equal(energy.kind, 'matrix'); + assert.deepEqual(energy.traces[0].z, [[-4.2, null], [-2, -1.5]]); + assert.equal(energy.layout.xaxis.type, 'category'); + assert.equal(energy.layout.yaxis.type, 'category'); + assert.match(energy.layout.title.text, /target-2 : query-1/); + + const spots = outputVisualization({ + name: 'spotProb-t1q2.csv', + text: 'spotProb;A_-1;C_1\nG_5;0.1;0.2\n', + }, request); + assert.equal(spots.kind, 'matrix'); + assert.equal(spots.traces[0].type, 'heatmap'); + assert.deepEqual(spots.layout.xaxis.categoryarray, ['A_-1', 'C_1']); +}); + +test('selected spot probabilities use a categorical bar plot', () => { + const onePair = { target: { records: [{ id: 'target' }] }, query: { records: [{ id: 'query' }] } }; + const spec = outputVisualization({ name: 'spotProb.csv', text: 'spot;probability\n0&0;0.4\n5&-2;0.6\n' }, onePair); + assert.equal(spec.kind, 'spots'); + assert.equal(spec.traces[0].type, 'bar'); + assert.deepEqual(spec.traces[0].x, ['0&0', '5&-2']); + assert.equal(spec.context.label, 'target : query'); +}); + +test('output headers identify the sequence or sequence pair they cover', () => { + assert.equal(outputFileContext('tMinE-t2q1.csv', request).label, 'target-2 : query-1'); + assert.equal(outputFileContext('qAcc-s2.csv', request).label, 'query-2'); + assert.equal(outputFileContext('intarna-detailed.txt', request).label, ''); +}); + +test('non-plot files are ignored and malformed plot data fails clearly', () => { + assert.equal(outputVisualization({ name: 'qAcc.csv', text: '# accessibility' }, request), null); + assert.throws(() => outputVisualization({ name: 'qMinE-t1q1.csv', text: 'idx;query-1;wrong\n1;A;2\n' }, request), /Unexpected qMinE/); + assert.throws(() => outputVisualization({ name: 'pMinE-t1q1.csv', text: 'minE;A_1\nG_1;not-a-number\n' }, request), /non-numeric/); +}); diff --git a/gui/tests/parameter-file.test.mjs b/gui/tests/parameter-file.test.mjs new file mode 100644 index 00000000..25f9ba6d --- /dev/null +++ b/gui/tests/parameter-file.test.mjs @@ -0,0 +1,58 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { DEFAULTS, EVALUATION_EXAMPLE, prepareRequest, CSV_COLUMNS } from '../protocol.js'; +import { FIELDS } from '../options.js'; +import { exportParameters, serializeParameters, importParameters } from '../parameter-file.js'; +const provenance = 'IntaRNA test\nViennaRNA test\n'; + +test('JSON round trip retains embedded inputs, typed options, selected columns and reports', () => { + for (const request of [ + { ...DEFAULTS, query: '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG', qIdxPos0: -3, tIdxPos0: -5, parameters: { temperature: 22, noSeed: true, mode: 'M', qRegion: '-3-7', outSpotProbSpots: '-5&-3' }, csvColumns: ['E', 'id2'], outputs: ['normal', 'qPu', 'spotProb'] }, + { ...DEFAULTS, task: 'evaluation', rri: EVALUATION_EXAMPLE, parameters: { qShape: '1 0.2\n2 0.3' }, outputs: ['detailed', 'ensemble'] }, + ]) { + const document = exportParameters(request, provenance); + const imported = importParameters(JSON.stringify(document)); + const actual = prepareRequest(imported), expected = prepareRequest(request); + actual.outputs.sort(); expected.outputs.sort(); + assert.deepEqual(actual, expected); + assert.deepEqual(exportParameters(imported, provenance), document); + assert.ok(!JSON.stringify(document).includes('/query.fa')); + } +}); + +test('empty inputs and unfinished forms remain editable after Load/Store', () => { + const request = { query: '', target: '', parameters: { seedBP: 12 }, csvColumns: [], outputs: [] }; + const document = serializeParameters(request, provenance); + const loaded = importParameters(document); + assert.equal(loaded.query, ''); assert.equal(loaded.target, ''); + assert.equal(loaded.parameters.seedBP, 12); assert.deepEqual(loaded.csvColumns, []); + assert.throws(() => prepareRequest(loaded), /enter a sequence/); + const defaults = exportParameters(DEFAULTS, provenance).parameters; + for (const field of FIELDS) assert.equal(defaults[field.key], undefined, field.key); + assert.equal(defaults.qIdxPos0, undefined); + assert.equal(defaults.outCsvCols, undefined); +}); + +test('invalid/native-only settings are rejected before replacing the form', () => { + const base = exportParameters(DEFAULTS, provenance); + for (const values of [{ threads: 8 }, { parameterFile: 'other.json' }, { query: '/input.fa' }, { qShape: '/data.txt' }, { noSeed: 'false' }, { temperature: null }, { out: ['../file'] }, { out: ['unknown:data'] }, { personality: 'IntaRNAens' }, { energyVRNA: { text: 'x' } }, { outMode: 'D' }, { query: { text: 'a', path: 'x' } }]) { + assert.throws(() => importParameters({ ...base, parameters: { ...base.parameters, ...values } }), JSON.stringify(values)); + } + for (const document of [[], null, { ...base, schema: 'new' }, { ...base, other: true }, { ...base, gui: [] }, { ...base, gui: { reports: ['unknown'] } }]) assert.throws(() => importParameters(document)); + assert.throws(() => importParameters('{invalid')); + assert.throws(() => importParameters(' '.repeat(5000001)), /5 MB/); + assert.deepEqual(importParameters('\ufeff'+JSON.stringify(base)).csvColumns, CSV_COLUMNS.split(',')); +}); + +test('maintainer examples use the same JSON import and prediction validation', async () => { + const { readFile } = await import('node:fs/promises'); + const examples = JSON.parse(await readFile(new URL('../examples/index.json', import.meta.url))); + assert.equal(examples.length, 2); + const tasks = new Set(); + for (const file of examples) { + const example = JSON.parse(await readFile(new URL(`../examples/${file}`, import.meta.url))); + assert.ok(example.name && example.description); + tasks.add(prepareRequest(importParameters(example.configuration)).task); + } + assert.deepEqual([...tasks].sort(), ['evaluation', 'prediction']); +}); diff --git a/gui/tests/protocol.test.mjs b/gui/tests/protocol.test.mjs new file mode 100644 index 00000000..07a60071 --- /dev/null +++ b/gui/tests/protocol.test.mjs @@ -0,0 +1,119 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import { DEFAULTS, EVALUATION_EXAMPLE, parseSequence, parseFasta, prepareRequest, makeArguments, CSV_COLUMNS, sequenceOffset } from '../protocol.js'; +import { FIELDS } from '../options.js'; +import { CSV_CATALOG, CSV_GROUPS, defaultColumns } from '../columns.js'; +const request = (parameters = {}, extra = {}) => ({ ...DEFAULTS, parameters, ...extra }); + +test('FASTA normalization, identifiers, bounded multi-record work and subsets', () => { + assert.equal(parseSequence('>test\r\nacgt n\r\nACG', 'Query').fasta, '>test\nACGUNACG\n'); + for (const input of ['', 'A', '>\nACGUACGU', '>one\n', 'ACGU-ACGU', '>a\nACGU\n>a\nACGU', '>a;b\nACGU\n>a_b\nACGU', '>a first\nACGU\n>a second\nACGU']) assert.throws(() => parseFasta(input, 'Query')); + const fasta = '>a\nGGGAGGAGGG\n>b\nGGGAGGAGGG'; + assert.equal(prepareRequest(request({}, { query: fasta })).query.records.length, 2); + assert.throws(() => prepareRequest(request({}, { task: 'evaluation', query: fasta, rri: EVALUATION_EXAMPLE })), /exactly one/); + assert.throws(() => prepareRequest(request({}, { query: '>a\n'+'A'.repeat(5000)+'\n>b\n'+'A'.repeat(2000), target: 'C'.repeat(300) })), /1,000,000/); + assert.doesNotThrow(() => prepareRequest(request({ qSet: '2-2' }, { query: '>a\n'+'A'.repeat(5000)+'\n>b\n'+'A'.repeat(2000), target: 'C'.repeat(300) }))); + assert.throws(() => prepareRequest(request({ outPairwise: true }, { query: fasta })), /same number/); + assert.throws(() => prepareRequest(request({ qSet: '3-3' })), /within/); + assert.throws(() => prepareRequest(request({}, { query: 'A'.repeat(5001) }))); +}); + +test('CLI defaults, ranges and strict typed controls reject invalid values', () => { + const prepared = prepareRequest(DEFAULTS); + assert.equal(prepared.parameters.outNumber, 1); + assert.equal(prepared.parameters.qIntLoopMax, 16); + assert.equal(prepared.parameters.tIntLoopMax, 10); + assert.equal(prepared.csvColumns.join(','), CSV_COLUMNS); + assert.ok(!makeArguments(prepared).some((arg) => arg.startsWith('--personality='))); + assert.ok(!makeArguments(prepared).some((arg) => arg.startsWith('--kineticScore='))); + for (const parameters of [{ outNumber: 101 }, { outNumber: 1.5 }, { temperature: '' }, { temperature: Infinity }, { qAccW: 2 }, { qAccW: 50 }, { model: '--help' }, { noSeed: 'false' }, { seedBP: 11 }]) assert.throws(() => prepareRequest(request(parameters))); + for (const qIdxPos0 of ['--help', NaN, 2e9+1, '', false]) assert.throws(() => prepareRequest(request({}, { qIdxPos0 }))); + assert.doesNotThrow(() => prepareRequest(request({}, { qIdxPos0: -2e9 }))); + assert.doesNotThrow(() => prepareRequest(request({}, { qIdxPos0: 0 }))); + assert.equal(sequenceOffset(1, -3), 3); + assert.equal(sequenceOffset(-1, -3), 2); + assert.throws(() => prepareRequest(request({}, { csvColumns: [] })), /at least one/); + assert.throws(() => prepareRequest(request({}, { outputs: ['../other'] })), /available/); +}); + +test('evaluation validates antiparallel supplied structures in signed coordinates', () => { + const evalRequest = request({ seedBP: 'ignored', model: 'ignored' }, { task: 'evaluation', rri: EVALUATION_EXAMPLE }); + const prepared = prepareRequest(evalRequest); + assert.equal(prepared.parameters.model, undefined); + assert.ok(makeArguments(prepared).includes('--personality=IntaRNAeval')); + assert.ok(makeArguments(prepared).includes(`--rri=${EVALUATION_EXAMPLE}`)); + for (const rri of ['', '1|||&1||', '1|||||||||||&1|||||||||||', '0|||&1|||', '1|||&1|||:', '1|||&1...']) assert.throws(() => prepareRequest({ ...evalRequest, rri })); + assert.doesNotThrow(() => prepareRequest({ ...evalRequest, qIdxPos0: -3, tIdxPos0: -5, rri: '-5||||||||||&-3||||||||||' })); + assert.throws(() => prepareRequest({ ...evalRequest, outputs: ['bpsvg'] }), /available/); +}); + +test('cross-option constraints, regions, probabilities, SHAPE and local file arguments', () => { + for (const parameters of [{ noSeed: true, mode: 'S' }, { mode: 'K', model: 'P' }, { model: 'B', mode: 'M' }, { model: 'B', helixMaxBP: 4 }, { qRegion: '8-2' }, { qAccConstr: 'b:1-20' }, { qAccConstr: 'bbb' }, { qShapeMethod: 'X' }, { tShapeConversion: 'bad' }, { qShape: '1 nope' }, { qAcc: 'P' }, { qAcc: 'P', qAccFile: 'bad' }, { outSpotProbSpots: '20&1' }, { windowWidth: 100 }, { qIntLenMax: 3 }, { qAcc: 'N', qRegionLenMax: 20 }, { qRegion: '1-10', qRegionLenMax: 20 }, { seedTQ: '1.|||||||||&1|||||||||.' }]) assert.throws(() => prepareRequest(request(parameters))); + assert.doesNotThrow(() => prepareRequest(request({ noSeed: true, qAccConstr: 'b:1-2,p:8-9', qRegion: '1-10' }))); + assert.throws(() => prepareRequest(request({ mode: 'K' }, { csvColumns: ['Eall'] })), /ensemble/); + assert.throws(() => prepareRequest(request({}, { outputs: ['bpsvg'] })), /model P/); + assert.throws(() => prepareRequest(request({ outCsvSort: 'ED1' })), /sort column/); + const prepared = prepareRequest(request({ model: 'P', mode: 'M', qShape: '1 0.2\n2 -999', outSpotProbSpots: '1&2' }, { outputs: ['bpProb', 'bpsvg', 'spotProb'] })); + const args = makeArguments(prepared); + assert.ok(args.includes('--qShape=/qShape.txt')); + assert.ok(args.includes('--out=spotProb:1&2:/output/spotProb.csv')); + assert.ok(args.includes('--out=bpsvg:/output/bpsvg.svg')); + assert.ok(!makeArguments(prepared, 'D').some((arg) => arg.startsWith('--outCsvCols'))); +}); + +test('browser catalog covers every native CSV column and every control names a CLI option', () => { + const header = readFileSync(new URL('../../src/IntaRNA/OutputHandlerCsv.h', import.meta.url), 'utf8'); + const ids = [...header.matchAll(/colType2string\[\w+\] = "(\w+)"/g)].map((match) => match[1]); + assert.deepEqual(CSV_CATALOG.map((c) => c.key).toSorted(), ids.toSorted()); + const source = readFileSync(new URL('../../src/bin/CommandLineParsing.cpp', import.meta.url), 'utf8'); + for (const field of FIELDS.filter((field) => field.key !== 'outSpotProbSpots')) assert.ok(source.includes(`"${field.key}"`), field.key); +}); + +test('JSON worker boundary embeds all inputs with typed non-default settings', async () => { + const { makeParameterDocument, JSON_SCHEMA } = await import('../protocol.js'); + const prepared = prepareRequest(request({ temperature: 20, noSeed: true, qShape: '1 0.2' }, { outputs: ['qPu'] })); + const document = JSON.parse(JSON.stringify(makeParameterDocument(prepared))); + assert.equal(document.schema, JSON_SCHEMA); + assert.equal(document.parameters.query.text, prepared.query.fasta); + assert.equal(document.parameters.target.text, prepared.target.fasta); + assert.equal(document.parameters.qShape.text, '1 0.2\n'); + assert.equal(document.parameters.temperature, 20); + assert.equal(document.parameters.noSeed, true); + assert.equal(document.parameters.qIdxPos0, undefined); + assert.deepEqual(document.parameters.out, ['/results.csv', 'qPu:/output/qPu.csv']); + const worker = readFileSync(new URL('../intarna-worker.js', import.meta.url), 'utf8'); + assert.ok(worker.includes("callMain(['--parameterFile=/parameter.json'])")); +}); + + +test('browser batches use longest selected strands and round-trip full FASTA inputs', async () => { + const batch = Array.from({ length: 50 }, (_, i) => `>q${i}\n${'A'.repeat(5000)}\n`).join(''); + assert.equal(parseFasta(batch, 'Query').records.length, 50); + assert.throws(() => parseFasta(batch + '>extra\nAA', 'Query'), /50 FASTA/); + assert.doesNotThrow(() => prepareRequest(request({}, { query: batch, target: 'C'.repeat(200) }))); + assert.throws(() => prepareRequest(request({}, { query: batch, target: 'C'.repeat(201) })), /1,000,000/); + const crossed = { query: '>q1\n' + 'A'.repeat(5000) + '\n>q2\nAA', target: '>t1\nCC\n>t2\n' + 'C'.repeat(5000) }; + assert.throws(() => prepareRequest(request({ outPairwise: true, noSeed: true }, crossed)), /1,000,000/); + const { serializeParameters, importParameters } = await import('../parameter-file.js'); + assert.equal(importParameters(serializeParameters(request({}, { query: batch }), 'test')).query, batch); + const parsed = parseFasta('>one\tdescription here\nACGU\n>two \nACGU', 'Query'); + assert.deepEqual(parsed.records.map((record) => record.id), ['one', 'two']); + assert.equal(parsed.warnings.length, 1); + assert.match(parsed.warnings[0], /one/); + assert.equal(parsed.fasta, '>one\nACGU\n>two\nACGU\n'); +}); + +test('CSV groups cover native columns once and task defaults serialize explicitly', async () => { + assert.deepEqual(CSV_GROUPS.flatMap((group) => group.keys).toSorted(), CSV_CATALOG.map((column) => column.key).toSorted()); + const energy = [...CSV_GROUPS.find((group) => group.label === 'Energy').keys, 'Etotal', 'Eall', 'Eall1', 'Eall2', 'EallTotal']; + for (const key of energy) assert.ok(defaultColumns('evaluation').includes(key), key); + for (const key of ['seedStart1', 'seedStart2', 'seedEnd1', 'seedEnd2']) assert.ok(!defaultColumns('evaluation').includes(key), key); + for (const key of ['ED1', 'ED2', 'seedE', 'seedStart1', 'seedStart2']) assert.ok(defaultColumns('prediction').includes(key), key); + const { exportParameters, importParameters } = await import('../parameter-file.js'); + const input = request({ outNumber: 10 }, { csvColumns: defaultColumns('prediction') }); + const saved = exportParameters(input, 'test'); + assert.equal(saved.parameters.outNumber, 10); + assert.equal(saved.parameters.outCsvCols, input.csvColumns.join(',')); + assert.deepEqual(prepareRequest(importParameters(saved)), prepareRequest(input)); +}); diff --git a/gui/tests/results.test.mjs b/gui/tests/results.test.mjs new file mode 100644 index 00000000..5ea65311 --- /dev/null +++ b/gui/tests/results.test.mjs @@ -0,0 +1,39 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { parseResults, selectRows, projectCsv } from '../results.js'; +const header = 'id1;start1;end1;id2;start2;end2;E\n'; + +test('native CSV orientation, numeric coordinates, energy and relative suboptimality', () => { + const rows = parseResults(header + 'target;2;10;query;1;9;-19.6\ntarget;1;10;query;1;10;-21.4\n'); + assert.equal(rows[0].start1, 2); + assert.equal(rows[0].start2, 1); + assert.equal(rows[0].deltaE, 1.8); + assert.equal(rows[1].deltaE, 0); + assert.deepEqual(selectRows(rows, '', 'E', 1).map((row) => row.E), [-21.4, -19.6]); + assert.deepEqual(selectRows(rows, '', 'start1', -1).map((row) => row.start1), [2, 1]); + assert.equal(selectRows(rows, 'QUERY', 'id2', 1).length, 2); + assert.equal(selectRows(rows, 'missing', 'id2', 1).length, 0); +}); + +test('empty output and literal native ID quotes; malformed output fails clearly', () => { + assert.deepEqual(parseResults(''), []); + assert.deepEqual(parseResults(header), []); + assert.equal(parseResults(header + '"name";1;7;query;1;7;-3\n')[0].id1, '"name"'); + for (const csv of ['unexpected\n', header + 'too;few\n', header + 't;0.5;1;q;1;2;-3\n', header + 't;2;1;q;1;2;-3\n', header + 't;1;7;q;1;7;NAN\n', header + 't;1;7;q;1;7;\n']) { + assert.throws(() => parseResults(csv)); + } +}); + + +test('mfe difference is per sequence pair; signed coordinates and optional NAN/list fields survive', () => { + const csv = header.trim() + ';seedE;ED1\n' + + 't;-3;5;q;1;8;-20;NAN;0\n' + + 't;-3;4;q;1;7;-18;-3:-2;1.4\n' + + 't2;1;8;q;1;8;-5;NAN;0\n'; + const rows = parseResults(csv); + assert.deepEqual(rows.map((r) => r.deltaE), [0, 2, 0]); + assert.equal(rows[1].seedE, '-3:-2'); + assert.equal(rows[0].seedE, 'NAN'); + assert.equal(projectCsv(csv, ['id2','E']), 'id2;E\nq;-20\nq;-18\nq;-5\n'); + assert.throws(() => projectCsv(csv, ['absent'])); +}); diff --git a/gui/tests/uploads.test.mjs b/gui/tests/uploads.test.mjs new file mode 100644 index 00000000..76a13200 --- /dev/null +++ b/gui/tests/uploads.test.mjs @@ -0,0 +1,15 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { readFastaFile } from '../uploads.js'; +const file = (text) => ({ size: new TextEncoder().encode(text).length, text: async () => text }); +test('FASTA uploads accept text/CRLF and validate size, format and task before replacement', async () => { + const input = '>q\r\ngggaggaggg\r\n'; + assert.equal(await readFastaFile(file(input), 'Query', 'prediction'), input); + const multi = '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG'; + assert.equal(await readFastaFile(file(multi), 'Query', 'prediction'), multi); + await assert.rejects(readFastaFile(file(multi), 'Query', 'evaluation'), /exactly one/); + for (const invalid of ['', '\u0000bin', '>q\n--!', '>q\n']) await assert.rejects(readFastaFile(file(invalid), 'Query', 'prediction')); + const batch = Array.from({ length: 50 }, (_, i) => `>q${i}\n${'A'.repeat(5000)}\n`).join(''); + assert.equal(await readFastaFile(file(batch), 'Query', 'prediction'), batch); + await assert.rejects(readFastaFile({ size: 1000001, text: () => { throw Error('must not read'); } }, 'Query', 'prediction'), /1 MB/); +}); diff --git a/gui/tests/worker.test.mjs b/gui/tests/worker.test.mjs new file mode 100644 index 00000000..e831c28c --- /dev/null +++ b/gui/tests/worker.test.mjs @@ -0,0 +1,38 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { PredictionRunner } from '../runner.js'; +import { DEFAULTS } from '../protocol.js'; + +function fakeWorker() { + return { terminated: false, terminate() { this.terminated = true; }, postMessage() {}, send(data) { this.onmessage({ data }); } }; +} + +test('abort terminates computation, rejects and permits a clean restart', async () => { + const workers = []; + const runner = new PredictionRunner(() => { const worker = fakeWorker(); workers.push(worker); return worker; }); + const first = runner.run(DEFAULTS); + await assert.rejects(runner.run(DEFAULTS), /already running/); + runner.abort(); + await assert.rejects(first, { name: 'AbortError' }); + assert.equal(workers[0].terminated, true); + const second = runner.run(DEFAULTS); + workers[0].send({ type: 'result', csv: 'stale' }); + workers[1].send({ type: 'result', csv: 'fresh' }); + assert.equal((await second).csv, 'fresh'); + assert.equal(workers[1].terminated, true); +}); + +test('runtime, load and message errors release the worker', async () => { + for (const kind of ['error', 'load', 'message', 'post']) { + const worker = fakeWorker(); + if (kind === 'post') worker.postMessage = () => { throw new Error('post failed'); }; + const runner = new PredictionRunner(() => worker); + const result = runner.run(DEFAULTS); + if (kind === 'error') worker.send({ type: 'error', message: 'allocation failed', diagnostics: 'details' }); + if (kind === 'load') worker.onerror({ preventDefault() {} }); + if (kind === 'message') worker.onmessageerror(); + await assert.rejects(result); + assert.equal(worker.terminated, true); + assert.equal(runner.worker, null); + } +}); diff --git a/gui/uploads.js b/gui/uploads.js new file mode 100644 index 00000000..81748047 --- /dev/null +++ b/gui/uploads.js @@ -0,0 +1,9 @@ +import { parseFasta, LIMITS } from './protocol.js'; + +/** Read and validate a local text file before replacing a FASTA input. */ +export async function readFastaFile(file, label, task) { + if (!file || file.size > LIMITS.maxFastaBytes) throw new Error(`${label}: choose a FASTA text file of at most 1 MB.`); + const text = await file.text(); + parseFasta(text, label, task !== 'evaluation'); + return text; +} diff --git a/gui/vendor/README.md b/gui/vendor/README.md new file mode 100644 index 00000000..1789b6db --- /dev/null +++ b/gui/vendor/README.md @@ -0,0 +1,16 @@ +# Plotly browser bundle + +`plotly-cartesian.min.js` is the unmodified browser bundle from +`plotly.js-cartesian-dist-min` 4.1.2 (MIT). It provides the scatter, bar and +heatmap traces used for additional IntaRNA output visualizations. +`plotly.css` is a static copy of its runtime plot/modebar rules. Plotly normally +inserts those rules with CSSOM; the bundle's supported `no-inline-styles` sentinel +suppresses that insertion while the same-origin copy retains the GUI's strict +`style-src 'self'` content-security policy. + +- npm integrity: `sha512-3UkyAT7/U8f3sOLavLnUjA6mqFmnqEe246GZhxT0J3TT9oZ0mh6SgwsL1yo/3/4xfmRSDFdGOxe+EsvT2XiE0g==` +- bundle SHA-256: `aaf12ff1d4671f7e93f6df4291651ab4ca6b76c0ea5f1576ec1030e3c2819a20` +- static CSS SHA-256: `3bcf2679b557067d8a3492b74092e946544d1cb8b2a72f278bcba95df59afd33` +- source: + +Keep the adjacent `plotly-LICENSE.txt` when updating the bundle. diff --git a/gui/vendor/plotly-LICENSE.txt b/gui/vendor/plotly-LICENSE.txt new file mode 100644 index 00000000..13ffac3c --- /dev/null +++ b/gui/vendor/plotly-LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2024 Plotly Technologies Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/gui/vendor/plotly-cartesian.min.js b/gui/vendor/plotly-cartesian.min.js new file mode 100644 index 00000000..11ced8ef --- /dev/null +++ b/gui/vendor/plotly-cartesian.min.js @@ -0,0 +1,149 @@ +/** +* plotly.js (cartesian - minified) v4.1.2 +* Copyright 2012-2026, Plotly, Inc. +* All rights reserved. +* Licensed under the MIT license +*/ +( + function(root, factory) { + if (typeof module === "object" && module.exports) { + module.exports = factory(); + } else { + root.moduleName = factory(); + } +} (typeof self !== "undefined" ? self : this, () => { +"use strict";var Plotly=(()=>{var jce=Object.create;var $v=Object.defineProperty,Wce=Object.defineProperties,Xce=Object.getOwnPropertyDescriptor,Zce=Object.getOwnPropertyDescriptors,$ce=Object.getOwnPropertyNames,F1=Object.getOwnPropertySymbols,Jce=Object.getPrototypeOf,s5=Object.prototype.hasOwnProperty,zS=Object.prototype.propertyIsEnumerable;var FS=(e,r,t)=>r in e?$v(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,At=(e,r)=>{for(var t in r||(r={}))s5.call(r,t)&&FS(e,t,r[t]);if(F1)for(var t of F1(r))zS.call(r,t)&&FS(e,t,r[t]);return e},Vt=(e,r)=>Wce(e,Zce(r));var NS=(e,r)=>{var t={};for(var a in e)s5.call(e,a)&&r.indexOf(a)<0&&(t[a]=e[a]);if(e!=null&&F1)for(var a of F1(e))r.indexOf(a)<0&&zS.call(e,a)&&(t[a]=e[a]);return t};var St=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(a){throw t=[a],a}};var z=(e,r)=>()=>{try{return r||e((r={exports:{}}).exports,r),r.exports}catch(t){throw r=0,t}},qt=(e,r)=>{for(var t in r)$v(e,t,{get:r[t],enumerable:!0})},IS=(e,r,t,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of $ce(r))!s5.call(e,n)&&n!==t&&$v(e,n,{get:()=>r[n],enumerable:!(a=Xce(r,n))||a.enumerable});return e};var xc=(e,r,t)=>(t=e!=null?jce(Jce(e)):{},IS(r||!e||!e.__esModule?$v(t,"default",{value:e,enumerable:!0}):t,e)),ze=e=>IS($v({},"__esModule",{value:!0}),e);var BS=(e,r,t)=>new Promise((a,n)=>{var i=s=>{try{l(t.next(s))}catch(u){n(u)}},o=s=>{try{l(t.throw(s))}catch(u){n(u)}},l=s=>s.done?a(s.value):Promise.resolve(s.value).then(i,o);l((t=t.apply(e,r)).next())});var Jv=z(OS=>{"use strict";OS.version="4.1.2"});var US=z((HS,z1)=>{(function(r,t,a){t[r]=t[r]||a(),typeof z1!="undefined"&&z1.exports&&(z1.exports=t[r])})("Promise",typeof window!="undefined"?window:HS,function(){"use strict";var r,t,a,n=Object.prototype.toString,i=typeof setImmediate!="undefined"?function(A){return setImmediate(A)}:setTimeout;try{Object.defineProperty({},"x",{}),r=function(A,w,x,_){return Object.defineProperty(A,w,{value:x,writable:!0,configurable:_!==!1})}}catch(b){r=function(w,x,_){return w[x]=_,w}}a=(function(){var A,w,x;function _(k,T){this.fn=k,this.self=T,this.next=void 0}return{add:function(T,q){x=new _(T,q),w?w.next=x:A=x,w=x,x=void 0},drain:function(){var T=A;for(A=w=t=void 0;T;)T.fn.call(T.self),T=T.next}}})();function o(b,A){a.add(b,A),t||(t=i(a.drain))}function l(b){var A,w=typeof b;return b!=null&&(w=="object"||w=="function")&&(A=b.then),typeof A=="function"?A:!1}function s(){for(var b=0;b0&&o(s,w))}catch(x){c.call(new d(w),x)}}}function c(b){var A=this;A.triggered||(A.triggered=!0,A.def&&(A=A.def),A.msg=b,A.state=2,A.chain.length>0&&o(s,A))}function v(b,A,w,x){for(var _=0;_{(function(){var e={version:"3.8.2"},r=[].slice,t=function(h){return r.call(h)},a=self.document;function n(h){return h&&(h.ownerDocument||h.document||h).documentElement}function i(h){return h&&(h.ownerDocument&&h.ownerDocument.defaultView||h.document&&h||h.defaultView)}if(a)try{t(a.documentElement.childNodes)[0].nodeType}catch(h){t=function(g){for(var M=g.length,S=new Array(M);M--;)S[M]=g[M];return S}}if(Date.now||(Date.now=function(){return+new Date}),a)try{a.createElement("DIV").style.setProperty("opacity",0,"")}catch(h){var o=this.Element.prototype,l=o.setAttribute,s=o.setAttributeNS,u=this.CSSStyleDeclaration.prototype,f=u.setProperty;o.setAttribute=function(g,M){l.call(this,g,M+"")},o.setAttributeNS=function(g,M,S){s.call(this,g,M,S+"")},u.setProperty=function(g,M,S){f.call(this,g,M+"",S)}}e.ascending=c;function c(h,g){return hg?1:h>=g?0:NaN}e.descending=function(h,g){return gh?1:g>=h?0:NaN},e.min=function(h,g){var M=-1,S=h.length,L,D;if(arguments.length===1){for(;++M=D){L=D;break}for(;++MD&&(L=D)}else{for(;++M=D){L=D;break}for(;++MD&&(L=D)}return L},e.max=function(h,g){var M=-1,S=h.length,L,D;if(arguments.length===1){for(;++M=D){L=D;break}for(;++ML&&(L=D)}else{for(;++M=D){L=D;break}for(;++ML&&(L=D)}return L},e.extent=function(h,g){var M=-1,S=h.length,L,D,B;if(arguments.length===1){for(;++M=D){L=B=D;break}for(;++MD&&(L=D),B=D){L=B=D;break}for(;++MD&&(L=D),B1)return B/(H-1)},e.deviation=function(){var h=e.variance.apply(this,arguments);return h&&Math.sqrt(h)};function p(h){return{left:function(g,M,S,L){for(arguments.length<3&&(S=0),arguments.length<4&&(L=g.length);S>>1;h(g[D],M)<0?S=D+1:L=D}return S},right:function(g,M,S,L){for(arguments.length<3&&(S=0),arguments.length<4&&(L=g.length);S>>1;h(g[D],M)>0?L=D:S=D+1}return S}}}var y=p(c);e.bisectLeft=y.left,e.bisect=e.bisectRight=y.right,e.bisector=function(h){return p(h.length===1?function(g,M){return c(h(g),M)}:h)},e.shuffle=function(h,g,M){(S=arguments.length)<3&&(M=h.length,S<2&&(g=0));for(var S=M-g,L,D;S;)D=Math.random()*S--|0,L=h[S+g],h[S+g]=h[D+g],h[D+g]=L;return h},e.permute=function(h,g){for(var M=g.length,S=new Array(M);M--;)S[M]=h[g[M]];return S},e.pairs=function(h){for(var g=0,M=h.length-1,S,L=h[0],D=new Array(M<0?0:M);g=0;)for(B=h[g],M=B.length;--M>=0;)D[--L]=B[M];return D};var b=Math.abs;e.range=function(h,g,M){if(arguments.length<3&&(M=1,arguments.length<2&&(g=h,h=0)),(g-h)/M===1/0)throw new Error("infinite range");var S=[],L=A(b(M)),D=-1,B;if(h*=L,g*=L,M*=L,M<0)for(;(B=h+M*++D)>g;)S.push(B/L);else for(;(B=h+M*++D)=g.length)return L?L.call(h,H):S?H.sort(S):H;for(var Z=-1,K=H.length,Q=g[X++],pe,we,ee,le=new x,ve;++Z=g.length)return F;var X=[],Z=M[H++];return F.forEach(function(K,Q){X.push({key:K,values:B(Q,H)})}),Z?X.sort(function(K,Q){return Z(K.key,Q.key)}):X}return h.map=function(F,H){return D(H,F,0)},h.entries=function(F){return B(D(e.map,F,0),0)},h.key=function(F){return g.push(F),h},h.sortKeys=function(F){return M[g.length-1]=F,h},h.sortValues=function(F){return S=F,h},h.rollup=function(F){return L=F,h},h},e.set=function(h){var g=new I;if(h)for(var M=0,S=h.length;M=0&&(S=h.slice(M+1),h=h.slice(0,M)),h)return arguments.length<2?this[h].on(S):this[h].on(S,g);if(arguments.length===2){if(g==null)for(h in this)this.hasOwnProperty(h)&&this[h].on(S,null);return this}};function j(h){var g=[],M=new x;function S(){for(var L=g,D=-1,B=L.length,F;++D=0&&(M=h.slice(0,g))!=="xmlns"&&(h=h.slice(g+1)),Ce.hasOwnProperty(M)?{space:Ce[M],local:h}:h}},oe.attr=function(h,g){if(arguments.length<2){if(typeof h=="string"){var M=this.node();return h=e.ns.qualify(h),h.local?M.getAttributeNS(h.space,h.local):M.getAttribute(h)}for(g in h)this.each(Me(g,h[g]));return this}return this.each(Me(h,g))};function Me(h,g){h=e.ns.qualify(h);function M(){this.removeAttribute(h)}function S(){this.removeAttributeNS(h.space,h.local)}function L(){this.setAttribute(h,g)}function D(){this.setAttributeNS(h.space,h.local,g)}function B(){var H=g.apply(this,arguments);H==null?this.removeAttribute(h):this.setAttribute(h,H)}function F(){var H=g.apply(this,arguments);H==null?this.removeAttributeNS(h.space,h.local):this.setAttributeNS(h.space,h.local,H)}return g==null?h.local?S:M:typeof g=="function"?h.local?F:B:h.local?D:L}function Le(h){return h.trim().replace(/\s+/g," ")}oe.classed=function(h,g){if(arguments.length<2){if(typeof h=="string"){var M=this.node(),S=(h=Ie(h)).length,L=-1;if(g=M.classList){for(;++L=0;)(D=M[S])&&(L&&L!==D.nextSibling&&L.parentNode.insertBefore(D,L),L=D);return this},oe.sort=function(h){h=xe.apply(this,arguments);for(var g=-1,M=this.length;++g=g&&(g=L+1);!(H=B[g])&&++g0&&(h=h.slice(0,L));var B=Ue.get(h);B&&(h=B,D=Oe);function F(){var Z=this[S];Z&&(this.removeEventListener(h,Z,Z.$),delete this[S])}function H(){var Z=D(g,t(arguments));F.call(this),this.addEventListener(h,this[S]=Z,Z.$=M),Z._=g}function X(){var Z=new RegExp("^__on([^.]+)"+e.requote(h)+"$"),K;for(var Q in this)if(K=Q.match(Z)){var pe=this[Q];this.removeEventListener(K[1],pe,pe.$),delete this[Q]}}return L?g?H:F:g?V:X}var Ue=e.map({mouseenter:"mouseover",mouseleave:"mouseout"});a&&Ue.forEach(function(h){"on"+h in a&&Ue.remove(h)});function $e(h,g){return function(M){var S=e.event;e.event=M,g[0]=this.__data__;try{h.apply(this,g)}finally{e.event=S}}}function Oe(h,g){var M=$e(h,g);return function(S){var L=this,D=S.relatedTarget;(!D||D!==L&&!(D.compareDocumentPosition(L)&8))&&M.call(L,S)}}var We,ar=0;function or(h){var g=".dragsuppress-"+ ++ar,M="click"+g,S=e.select(i(h)).on("touchmove"+g,J).on("dragstart"+g,J).on("selectstart"+g,J);if(We==null&&(We="onselectstart"in h?!1:Y(h.style,"userSelect")),We){var L=n(h).style,D=L[We];L[We]="none"}return function(B){if(S.on(g,null),We&&(L[We]=D),B){var F=function(){S.on(M,null)};S.on(M,function(){J(),F()},!0),setTimeout(F,0)}}}e.mouse=function(h){return Ee(h,te())};var sr=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function Ee(h,g){g.changedTouches&&(g=g.changedTouches[0]);var M=h.ownerSVGElement||h;if(M.createSVGPoint){var S=M.createSVGPoint();if(sr<0){var L=i(h);if(L.scrollX||L.scrollY){M=e.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var D=M[0][0].getScreenCTM();sr=!(D.f||D.e),M.remove()}}return sr?(S.x=g.pageX,S.y=g.pageY):(S.x=g.clientX,S.y=g.clientY),S=S.matrixTransform(h.getScreenCTM().inverse()),[S.x,S.y]}var B=h.getBoundingClientRect();return[g.clientX-B.left-h.clientLeft,g.clientY-B.top-h.clientTop]}e.touch=function(h,g,M){if(arguments.length<3&&(M=g,g=te().changedTouches),g){for(var S=0,L=g.length,D;S0?1:h<0?-1:0}function Kr(h,g,M){return(g[0]-h[0])*(M[1]-h[1])-(g[1]-h[1])*(M[0]-h[0])}function Qr(h){return h>1?0:h<-1?yr:Math.acos(h)}function yt(h){return h>1?ne:h<-1?-ne:Math.asin(h)}function gt(h){return((h=Math.exp(h))-1/h)/2}function Et(h){return((h=Math.exp(h))+1/h)/2}function aa(h){return((h=Math.exp(2*h))-1)/(h+1)}function $a(h){return(h=Math.sin(h/2))*h}var na=Math.SQRT2,Ja=2,hn=4;e.interpolateZoom=function(h,g){var M=h[0],S=h[1],L=h[2],D=g[0],B=g[1],F=g[2],H=D-M,X=B-S,Z=H*H+X*X,K,Q;if(Z0&&(nr=nr.transition().duration(B)),nr.call(Ae.event)}function xr(){le&&le.domain(ee.range().map(function(nr){return(nr-h.x)/h.k}).map(ee.invert)),_e&&_e.domain(ve.range().map(function(nr){return(nr-h.y)/h.k}).map(ve.invert))}function _r(nr){F++||nr({type:"zoomstart"})}function Nr(nr){xr(),nr({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function Ar(nr){--F||(nr({type:"zoomend"}),M=null)}function Er(){var nr=this,Ir=we.of(nr,arguments),Or=0,lt=e.select(i(nr)).on(X,rn).on(Z,An),Kt=de(e.mouse(nr)),La=or(nr);D1.call(nr),_r(Ir);function rn(){Or=1,dr(e.mouse(nr),Kt),Nr(Ir)}function An(){lt.on(X,null).on(Z,null),La(Or),Ar(Ir)}}function ot(){var nr=this,Ir=we.of(nr,arguments),Or={},lt=0,Kt,La=".zoom-"+e.event.changedTouches[0].identifier,rn="touchmove"+La,An="touchend"+La,Bn=[],Tn=e.select(nr),Wn=or(nr);Xn(),_r(Ir),Tn.on(H,null).on(Q,Xn);function dn(){var To=e.touches(nr);return Kt=h.k,To.forEach(function(tn){tn.identifier in Or&&(Or[tn.identifier]=de(tn))}),To}function Xn(){var To=e.event.target;e.select(To).on(rn,Lu).on(An,Vce),Bn.push(To);for(var tn=e.event.changedTouches,zi=0,el=tn.length;zi1){var Cu=Ni[0],ys=Ni[1],R1=Cu[0]-ys[0],RS=Cu[1]-ys[1];lt=R1*R1+RS*RS}}function Lu(){var To=e.touches(nr),tn,zi,el,Ni;D1.call(nr);for(var bc=0,Cu=To.length;bc1?1:g,M=M<0?0:M>1?1:M,L=M<=.5?M*(1+g):M+g-M*g,S=2*M-L;function D(F){return F>360?F-=360:F<0&&(F+=360),F<60?S+(L-S)*F/60:F<180?L:F<240?S+(L-S)*(240-F)/60:S}function B(F){return Math.round(D(F)*255)}return new ca(B(h+120),B(h),B(h-120))}e.hcl=it;function it(h,g,M){return this instanceof it?(this.h=+h,this.c=+g,void(this.l=+M)):arguments.length<2?h instanceof it?new it(h.h,h.c,h.l):h instanceof Xt?cc(h.l,h.a,h.b):cc((h=p1((h=e.rgb(h)).r,h.g,h.b)).l,h.a,h.b):new it(h,g,M)}var ia=it.prototype=new Vr;ia.brighter=function(h){return new it(this.h,this.c,Math.min(100,this.l+Pt*(arguments.length?h:1)))},ia.darker=function(h){return new it(this.h,this.c,Math.max(0,this.l-Pt*(arguments.length?h:1)))},ia.rgb=function(){return zn(this.h,this.c,this.l).rgb()};function zn(h,g,M){return isNaN(h)&&(h=0),isNaN(g)&&(g=0),new Xt(M,Math.cos(h*=ge)*g,Math.sin(h)*g)}e.lab=Xt;function Xt(h,g,M){return this instanceof Xt?(this.l=+h,this.a=+g,void(this.b=+M)):arguments.length<2?h instanceof Xt?new Xt(h.l,h.a,h.b):h instanceof it?zn(h.h,h.c,h.l):p1((h=ca(h)).r,h.g,h.b):new Xt(h,g,M)}var Pt=18,oa=.95047,la=1,dt=1.08883,Ka=Xt.prototype=new Vr;Ka.brighter=function(h){return new Xt(Math.min(100,this.l+Pt*(arguments.length?h:1)),this.a,this.b)},Ka.darker=function(h){return new Xt(Math.max(0,this.l-Pt*(arguments.length?h:1)),this.a,this.b)},Ka.rgb=function(){return Yt(this.l,this.a,this.b)};function Yt(h,g,M){var S=(h+16)/116,L=S+g/500,D=S-M/200;return L=Nn(L)*oa,S=Nn(S)*la,D=Nn(D)*dt,new ca(ci(3.2404542*L-1.5371385*S-.4985314*D),ci(-.969266*L+1.8760108*S+.041556*D),ci(.0556434*L-.2040259*S+1.0572252*D))}function cc(h,g,M){return h>0?new it(Math.atan2(M,g)*Ne,Math.sqrt(g*g+M*M),h):new it(NaN,NaN,h)}function Nn(h){return h>.206893034?h*h*h:(h-4/29)/7.787037}function wo(h){return h>.008856?Math.pow(h,1/3):7.787037*h+4/29}function ci(h){return Math.round(255*(h<=.00304?12.92*h:1.055*Math.pow(h,1/2.4)-.055))}e.rgb=ca;function ca(h,g,M){return this instanceof ca?(this.r=~~h,this.g=~~g,void(this.b=~~M)):arguments.length<2?h instanceof ca?new ca(h.r,h.g,h.b):h1(""+h,ca,kt):new ca(h,g,M)}function vc(h){return new ca(h>>16,h>>8&255,h&255)}function ds(h){return vc(h)+""}var In=ca.prototype=new Vr;In.brighter=function(h){h=Math.pow(.7,arguments.length?h:1);var g=this.r,M=this.g,S=this.b,L=30;return!g&&!M&&!S?new ca(L,L,L):(g&&g>4,S=S>>4|S,L=H&240,L=L>>4|L,D=H&15,D=D<<4|D):h.length===7&&(S=(H&16711680)>>16,L=(H&65280)>>8,D=H&255)),g(S,L,D))}function d1(h,g,M){var S=Math.min(h/=255,g/=255,M/=255),L=Math.max(h,g,M),D=L-S,B,F,H=(L+S)/2;return D?(F=H<.5?D/(L+S):D/(2-L-S),h==L?B=(g-M)/D+(g0&&H<1?0:B),new ht(B,F,H)}function p1(h,g,M){h=Bv(h),g=Bv(g),M=Bv(M);var S=wo((.4124564*h+.3575761*g+.1804375*M)/oa),L=wo((.2126729*h+.7151522*g+.072175*M)/la),D=wo((.0193339*h+.119192*g+.9503041*M)/dt);return Xt(116*L-16,500*(S-L),200*(L-D))}function Bv(h){return(h/=255)<=.04045?h/12.92:Math.pow((h+.055)/1.055,2.4)}function Ov(h){var g=parseFloat(h);return h.charAt(h.length-1)==="%"?Math.round(g*2.55):g}var kr=e.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});kr.forEach(function(h,g){kr.set(h,vc(g))});function Mr(h){return typeof h=="function"?h:function(){return h}}e.functor=Mr,e.xhr=pt(O);function pt(h){return function(g,M,S){return arguments.length===2&&typeof M=="function"&&(S=M,M=null),fr(g,M,h,S)}}function fr(h,g,M,S){var L={},D=e.dispatch("beforesend","progress","load","error"),B={},F=new XMLHttpRequest,H=null;self.XDomainRequest&&!("withCredentials"in F)&&/^(http(s)?:)?\/\//.test(h)&&(F=new XDomainRequest),"onload"in F?F.onload=F.onerror=X:F.onreadystatechange=function(){F.readyState>3&&X()};function X(){var Z=F.status,K;if(!Z&&It(F)||Z>=200&&Z<300||Z===304){try{K=M.call(L,F)}catch(Q){D.error.call(L,Q);return}D.load.call(L,K)}else D.error.call(L,F)}return F.onprogress=function(Z){var K=e.event;e.event=Z;try{D.progress.call(L,F)}finally{e.event=K}},L.header=function(Z,K){return Z=(Z+"").toLowerCase(),arguments.length<2?B[Z]:(K==null?delete B[Z]:B[Z]=K+"",L)},L.mimeType=function(Z){return arguments.length?(g=Z==null?null:Z+"",L):g},L.responseType=function(Z){return arguments.length?(H=Z,L):H},L.response=function(Z){return M=Z,L},["get","post"].forEach(function(Z){L[Z]=function(){return L.send.apply(L,[Z].concat(t(arguments)))}}),L.send=function(Z,K,Q){if(arguments.length===2&&typeof K=="function"&&(Q=K,K=null),F.open(Z,h,!0),g!=null&&!("accept"in B)&&(B.accept=g+",*/*"),F.setRequestHeader)for(var pe in B)F.setRequestHeader(pe,B[pe]);return g!=null&&F.overrideMimeType&&F.overrideMimeType(g),H!=null&&(F.responseType=H),Q!=null&&L.on("error",Q).on("load",function(we){Q(null,we)}),D.beforesend.call(L,F),F.send(K==null?null:K),L},L.abort=function(){return F.abort(),L},e.rebind(L,D,"on"),S==null?L:L.get(wn(S))}function wn(h){return h.length===1?function(g,M){h(g==null?M:null)}:h}function It(h){var g=h.responseType;return g&&g!=="text"?h.response:h.responseText}e.dsv=function(h,g){var M=new RegExp('["'+h+` +]`),S=h.charCodeAt(0);function L(X,Z,K){arguments.length<3&&(K=Z,Z=null);var Q=fr(X,g,Z==null?D:B(Z),K);return Q.row=function(pe){return arguments.length?Q.response((Z=pe)==null?D:B(pe)):Z},Q}function D(X){return L.parse(X.responseText)}function B(X){return function(Z){return L.parse(Z.responseText,X)}}L.parse=function(X,Z){var K;return L.parseRows(X,function(Q,pe){if(K)return K(Q,pe-1);var we=function(ee){for(var le={},ve=Q.length,_e=0;_e=we)return Q;if(_e)return _e=!1,K;var Ve=ee;if(X.charCodeAt(Ve)===34){for(var lr=Ve;lr++24?(isFinite(g)&&(clearTimeout(Mu),Mu=setTimeout(Rx,g)),Ri=0):(Ri=1,xk(Rx))}e.timer.flush=function(){_k(),wk()};function _k(){for(var h=Date.now(),g=Qa;g;)h>=g.t&&g.c(h-g.t)&&(g.c=null),g=g.n;return h}function wk(){for(var h,g=Qa,M=1/0;g;)g.c?(g.t=0;--F)ee.push(L[X[K[F]][2]]);for(F=+pe;F1&&Kr(h[M[S-2]],h[M[S-1]],h[L])<=0;)--S;M[S++]=L}return M.slice(0,S)}function Xue(h,g){return h[0]-g[0]||h[1]-g[1]}e.geom.polygon=function(h){return $(h,y1),h};var y1=e.geom.polygon.prototype=[];y1.area=function(){for(var h=-1,g=this.length,M,S=this[g-1],L=0;++hBe)F=F.L;else if(B=g-Kue(F,M),B>Be){if(!F.R){S=F;break}F=F.R}else{D>-Be?(S=F.P,L=F):B>-Be?(S=F,L=F.N):S=L=F;break}var H=Sk(h);if(pc.insert(S,H),!(!S&&!L)){if(S===L){yc(S),L=Sk(S.site),pc.insert(H,L),H.edge=L.edge=Gv(S.site,H.site),mc(S),mc(L);return}if(!L){H.edge=Gv(S.site,H.site);return}yc(S),yc(L);var X=S.site,Z=X.x,K=X.y,Q=h.x-Z,pe=h.y-K,we=L.site,ee=we.x-Z,le=we.y-K,ve=2*(Q*le-pe*ee),_e=Q*Q+pe*pe,Ae=ee*ee+le*le,de={x:(le*_e-pe*Ae)/ve+Z,y:(Q*Ae-ee*_e)/ve+K};g1(L.edge,X,we,de),H.edge=Gv(X,h,null,de),L.edge=Gv(h,we,null,de),mc(S),mc(L)}}function qk(h,g){var M=h.site,S=M.x,L=M.y,D=L-g;if(!D)return S;var B=h.P;if(!B)return-1/0;M=B.site;var F=M.x,H=M.y,X=H-g;if(!X)return F;var Z=F-S,K=1/D-1/X,Q=Z/X;return K?(-Q+Math.sqrt(Q*Q-2*K*(Z*Z/(-2*X)-H+X/2+L-D/2)))/K+S:(S+F)/2}function Kue(h,g){var M=h.N;if(M)return qk(M,g);var S=h.site;return S.y===g?S.x:1/0}function Lk(h){this.site=h,this.edges=[]}Lk.prototype.prepare=function(){for(var h=this.edges,g=h.length,M;g--;)M=h[g].edge,(!M.b||!M.a)&&h.splice(g,1);return h.sort(Ck),h.length};function Que(h){for(var g=h[0][0],M=h[1][0],S=h[0][1],L=h[1][1],D,B,F,H,X=ku,Z=X.length,K,Q,pe,we,ee,le;Z--;)if(K=X[Z],!(!K||!K.prepare()))for(pe=K.edges,we=pe.length,Q=0;QBe||b(H-B)>Be)&&(pe.splice(Q,0,new b1(nfe(K.site,le,b(F-g)Be?{x:g,y:b(D-g)Be?{x:b(B-L)Be?{x:M,y:b(D-M)Be?{x:b(B-S)=-mr)){var Q=H*H+X*X,pe=Z*Z+le*le,we=(le*Q-X*pe)/K,ee=(H*pe-Z*Q)/K,le=ee+F,ve=kk.pop()||new efe;ve.arc=h,ve.site=L,ve.x=we+B,ve.y=le+Math.sqrt(we*we+ee*ee),ve.cy=le,h.circle=ve;for(var _e=null,Ae=Uv._;Ae;)if(ve.y0)){if(ee/=pe,pe<0){if(ee0){if(ee>Q)return;ee>K&&(K=ee)}if(ee=M-F,!(!pe&&ee<0)){if(ee/=pe,pe<0){if(ee>Q)return;ee>K&&(K=ee)}else if(pe>0){if(ee0)){if(ee/=we,we<0){if(ee0){if(ee>Q)return;ee>K&&(K=ee)}if(ee=S-H,!(!we&&ee<0)){if(ee/=we,we<0){if(ee>Q)return;ee>K&&(K=ee)}else if(we>0){if(ee0&&(L.a={x:F+K*pe,y:H+K*we}),Q<1&&(L.b={x:F+Q*pe,y:H+Q*we}),L}}}}}}function tfe(h){for(var g=dc,M=rfe(h[0][0],h[0][1],h[1][0],h[1][1]),S=g.length,L;S--;)L=g[S],(!afe(L,h)||!M(L)||b(L.a.x-L.b.x)=D)return;if(Z>Q){if(!S)S={x:we,y:B};else if(S.y>=F)return;M={x:we,y:F}}else{if(!S)S={x:we,y:F};else if(S.y1)if(Z>Q){if(!S)S={x:(B-ve)/le,y:B};else if(S.y>=F)return;M={x:(F-ve)/le,y:F}}else{if(!S)S={x:(F-ve)/le,y:F};else if(S.y=D)return;M={x:D,y:le*D+ve}}else{if(!S)S={x:D,y:le*D+ve};else if(S.x=Z&&ve.x<=Q&&ve.y>=K&&ve.y<=pe?[[Z,pe],[Q,pe],[Q,K],[Z,K]]:[];_e.point=H[ee]}),X}function F(H){return H.map(function(X,Z){return{x:Math.round(S(X,Z)/Be)*Be,y:Math.round(L(X,Z)/Be)*Be,i:Z}})}return B.links=function(H){return Ox(F(H)).edges.filter(function(X){return X.l&&X.r}).map(function(X){return{source:H[X.l.i],target:H[X.r.i]}})},B.triangles=function(H){var X=[];return Ox(F(H)).cells.forEach(function(Z,K){for(var Q=Z.site,pe=Z.edges.sort(Ck),we=-1,ee=pe.length,le,ve,_e=pe[ee-1].edge,Ae=_e.l===Q?_e.r:_e.l;++weAe&&(Ae=Z.x),Z.y>de&&(de=Z.y),pe.push(Z.x),we.push(Z.y);else for(ee=0;eeAe&&(Ae=Ve),lr>de&&(de=lr),pe.push(Ve),we.push(lr)}var dr=Ae-ve,cr=de-_e;dr>cr?de=_e+dr:Ae=ve+cr;function xr(Ar,Er,ot,va,bt,nr,Ir,Or){if(!(isNaN(ot)||isNaN(va)))if(Ar.leaf){var lt=Ar.x,Kt=Ar.y;if(lt!=null)if(b(lt-ot)+b(Kt-va)<.01)_r(Ar,Er,ot,va,bt,nr,Ir,Or);else{var La=Ar.point;Ar.x=Ar.y=Ar.point=null,_r(Ar,La,lt,Kt,bt,nr,Ir,Or),_r(Ar,Er,ot,va,bt,nr,Ir,Or)}else Ar.x=ot,Ar.y=va,Ar.point=Er}else _r(Ar,Er,ot,va,bt,nr,Ir,Or)}function _r(Ar,Er,ot,va,bt,nr,Ir,Or){var lt=(bt+Ir)*.5,Kt=(nr+Or)*.5,La=ot>=lt,rn=va>=Kt,An=rn<<1|La;Ar.leaf=!1,Ar=Ar.nodes[An]||(Ar.nodes[An]=Pk()),La?bt=lt:Ir=lt,rn?nr=Kt:Or=Kt,xr(Ar,Er,ot,va,bt,nr,Ir,Or)}var Nr=Pk();if(Nr.add=function(Ar){xr(Nr,Ar,+K(Ar,++ee),+Q(Ar,ee),ve,_e,Ae,de)},Nr.visit=function(Ar){jv(Ar,Nr,ve,_e,Ae,de)},Nr.find=function(Ar){return ufe(Nr,Ar[0],Ar[1],ve,_e,Ae,de)},ee=-1,g==null){for(;++eeD||Q>B||pe=Ve,cr=M>=lr,xr=cr<<1|dr,_r=xr+4;xr<_r;++xr)if(Z=de[xr&3])switch(xr&3){case 0:X(Z,K,Q,Ve,lr);break;case 1:X(Z,Ve,Q,pe,lr);break;case 2:X(Z,K,lr,Ve,we);break;case 3:X(Z,Ve,lr,pe,we);break}}})(h,S,L,D,B),H}e.interpolateRgb=Hx;function Hx(h,g){h=e.rgb(h),g=e.rgb(g);var M=h.r,S=h.g,L=h.b,D=g.r-M,B=g.g-S,F=g.b-L;return function(H){return"#"+ps(Math.round(M+D*H))+ps(Math.round(S+B*H))+ps(Math.round(L+F*H))}}e.interpolateObject=Rk;function Rk(h,g){var M={},S={},L;for(L in h)L in g?M[L]=Su(h[L],g[L]):S[L]=h[L];for(L in g)L in h||(S[L]=g[L]);return function(D){for(L in M)S[L]=M[L](D);return S}}e.interpolateNumber=Fl;function Fl(h,g){return h=+h,g=+g,function(M){return h*(1-M)+g*M}}e.interpolateString=Fk;function Fk(h,g){var M=Ux.lastIndex=Gx.lastIndex=0,S,L,D,B=-1,F=[],H=[];for(h=h+"",g=g+"";(S=Ux.exec(h))&&(L=Gx.exec(g));)(D=L.index)>M&&(D=g.slice(M,D),F[B]?F[B]+=D:F[++B]=D),(S=S[0])===(L=L[0])?F[B]?F[B]+=L:F[++B]=L:(F[++B]=null,H.push({i:B,x:Fl(S,L)})),M=Gx.lastIndex;return M=0&&!(S=e.interpolators[M](h,g)););return S}e.interpolators=[function(h,g){var M=typeof g;return(M==="string"?kr.has(g.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(g)?Hx:Fk:g instanceof Vr?Hx:Array.isArray(g)?w1:M==="object"&&isNaN(g)?Rk:Fl)(h,g)}],e.interpolateArray=w1;function w1(h,g){var M=[],S=[],L=h.length,D=g.length,B=Math.min(h.length,g.length),F;for(F=0;F=0?h.slice(0,g):h,S=g>=0?h.slice(g+1):"in";return M=ffe.get(M)||zk,S=cfe.get(S)||O,vfe(S(M.apply(null,r.call(arguments,1))))};function vfe(h){return function(g){return g<=0?0:g>=1?1:h(g)}}function Nk(h){return function(g){return 1-h(1-g)}}function Ik(h){return function(g){return .5*(g<.5?h(2*g):2-h(2-2*g))}}function hfe(h){return h*h}function dfe(h){return h*h*h}function pfe(h){if(h<=0)return 0;if(h>=1)return 1;var g=h*h,M=g*h;return 4*(h<.5?M:3*(h-g)+M-.75)}function mfe(h){return function(g){return Math.pow(g,h)}}function yfe(h){return 1-Math.cos(h*ne)}function gfe(h){return Math.pow(2,10*(h-1))}function bfe(h){return 1-Math.sqrt(1-h*h)}function xfe(h,g){var M;return arguments.length<2&&(g=.45),arguments.length?M=g/ur*Math.asin(1/h):(h=1,M=g/4),function(S){return 1+h*Math.pow(2,-10*S)*Math.sin((S-M)*ur/g)}}function _fe(h){return h||(h=1.70158),function(g){return g*g*((h+1)*g-h)}}function wfe(h){return h<1/2.75?7.5625*h*h:h<2/2.75?7.5625*(h-=1.5/2.75)*h+.75:h<2.5/2.75?7.5625*(h-=2.25/2.75)*h+.9375:7.5625*(h-=2.625/2.75)*h+.984375}e.interpolateHcl=Afe;function Afe(h,g){h=e.hcl(h),g=e.hcl(g);var M=h.h,S=h.c,L=h.l,D=g.h-M,B=g.c-S,F=g.l-L;return isNaN(B)&&(B=0,S=isNaN(S)?g.c:S),isNaN(D)?(D=0,M=isNaN(M)?g.h:M):D>180?D-=360:D<-180&&(D+=360),function(H){return zn(M+D*H,S+B*H,L+F*H)+""}}e.interpolateHsl=Tfe;function Tfe(h,g){h=e.hsl(h),g=e.hsl(g);var M=h.h,S=h.s,L=h.l,D=g.h-M,B=g.s-S,F=g.l-L;return isNaN(B)&&(B=0,S=isNaN(S)?g.s:S),isNaN(D)?(D=0,M=isNaN(M)?g.h:M):D>180?D-=360:D<-180&&(D+=360),function(H){return kt(M+D*H,S+B*H,L+F*H)+""}}e.interpolateLab=Mfe;function Mfe(h,g){h=e.lab(h),g=e.lab(g);var M=h.l,S=h.a,L=h.b,D=g.l-M,B=g.a-S,F=g.b-L;return function(H){return Yt(M+D*H,S+B*H,L+F*H)+""}}e.interpolateRound=Bk;function Bk(h,g){return g-=h,function(M){return Math.round(h+g*M)}}e.transform=function(h){var g=a.createElementNS(e.ns.prefix.svg,"g");return(e.transform=function(M){if(M!=null){g.setAttribute("transform",M);var S=g.transform.baseVal.consolidate()}return new Ok(S?S.matrix:Sfe)})(h)};function Ok(h){var g=[h.a,h.b],M=[h.c,h.d],S=Uk(g),L=Hk(g,M),D=Uk(kfe(M,g,-L))||0;g[0]*M[1]180?g+=360:g-h>180&&(h+=360),S.push({i:M.push(gc(M)+"rotate(",null,")")-2,x:Fl(h,g)})):g&&M.push(gc(M)+"rotate("+g+")")}function Cfe(h,g,M,S){h!==g?S.push({i:M.push(gc(M)+"skewX(",null,")")-2,x:Fl(h,g)}):g&&M.push(gc(M)+"skewX("+g+")")}function Dfe(h,g,M,S){if(h[0]!==g[0]||h[1]!==g[1]){var L=M.push(gc(M)+"scale(",null,",",null,")");S.push({i:L-4,x:Fl(h[0],g[0])},{i:L-2,x:Fl(h[1],g[1])})}else(g[0]!==1||g[1]!==1)&&M.push(gc(M)+"scale("+g+")")}function Gk(h,g){var M=[],S=[];return h=e.transform(h),g=e.transform(g),qfe(h.translate,g.translate,M,S),Lfe(h.rotate,g.rotate,M,S),Cfe(h.skew,g.skew,M,S),Dfe(h.scale,g.scale,M,S),h=g=null,function(L){for(var D=-1,B=S.length,F;++D0?D=de:(M.c=null,M.t=NaN,M=null,g.end({type:"end",alpha:D=0})):de>0&&(g.start({type:"start",alpha:D=de}),M=m1(h.tick)),h):D},h.start=function(){var de,Ve=pe.length,lr=we.length,dr=S[0],cr=S[1],xr,_r;for(de=0;de=0;)D.push(Z=X[H]),Z.parent=F,Z.depth=F.depth+1;M&&(F.value=0),F.children=X}else M&&(F.value=+M.call(S,F,F.depth)||0),delete F.children;return Qo(L,function(K){var Q,pe;h&&(Q=K.children)&&Q.sort(h),M&&(pe=K.parent)&&(pe.value+=K.value)}),B}return S.sort=function(L){return arguments.length?(h=L,S):h},S.children=function(L){return arguments.length?(g=L,S):g},S.value=function(L){return arguments.length?(M=L,S):M},S.revalue=function(L){return M&&(Xv(L,function(D){D.children&&(D.value=0)}),Qo(L,function(D){var B;D.children||(D.value=+M.call(S,D,D.depth)||0),(B=D.parent)&&(B.value+=D.value)})),L},S};function Wv(h,g){return e.rebind(h,g,"sort","children","value"),h.nodes=h,h.links=jfe,h}function Xv(h,g){for(var M=[h];(h=M.pop())!=null;)if(g(h),(L=h.children)&&(S=L.length))for(var S,L;--S>=0;)M.push(L[S])}function Qo(h,g){for(var M=[h],S=[];(h=M.pop())!=null;)if(S.push(h),(B=h.children)&&(D=B.length))for(var L=-1,D,B;++LL&&(L=F),S.push(F)}for(B=0;BS&&(M=g,S=L);return M}function Qfe(h){return h.reduce(ece,0)}function ece(h,g){return h+g[1]}e.layout.histogram=function(){var h=!0,g=Number,M=tce,S=rce;function L(D,Q){for(var F=[],H=D.map(g,this),X=M.call(this,H,Q),Z=S.call(this,X,H,Q),K,Q=-1,pe=H.length,we=Z.length-1,ee=h?1:1/pe,le;++Q0)for(Q=-1;++Q=X[0]&&le<=X[1]&&(K=F[e.bisect(Z,le,1,we)-1],K.y+=ee,K.push(D[Q]));return F}return L.value=function(D){return arguments.length?(g=D,L):g},L.range=function(D){return arguments.length?(M=Mr(D),L):M},L.bins=function(D){return arguments.length?(S=typeof D=="number"?function(B){return Wk(B,D)}:Mr(D),L):S},L.frequency=function(D){return arguments.length?(h=!!D,L):h},L};function rce(h,g){return Wk(h,Math.ceil(Math.log(g.length)/Math.LN2+1))}function Wk(h,g){for(var M=-1,S=+h[0],L=(h[1]-S)/g,D=[];++M<=g;)D[M]=L*M+S;return D}function tce(h){return[e.min(h),e.max(h)]}e.layout.pack=function(){var h=e.layout.hierarchy().sort(ace),g=0,M=[1,1],S;function L(D,B){var F=h.call(this,D,B),H=F[0],X=M[0],Z=M[1],K=S==null?Math.sqrt:typeof S=="function"?S:function(){return S};if(H.x=H.y=0,Qo(H,function(pe){pe.r=+K(pe.value)}),Qo(H,$k),g){var Q=g*(S?1:Math.max(2*H.r/X,2*H.r/Z))/2;Qo(H,function(pe){pe.r+=Q}),Qo(H,$k),Qo(H,function(pe){pe.r-=Q})}return Jk(H,X/2,Z/2,S?1:1/Math.max(2*H.r/X,2*H.r/Z)),F}return L.size=function(D){return arguments.length?(M=D,L):M},L.radius=function(D){return arguments.length?(S=D==null||typeof D=="function"?D:+D,L):S},L.padding=function(D){return arguments.length?(g=+D,L):g},Wv(L,h)};function ace(h,g){return h.value-g.value}function jx(h,g){var M=h._pack_next;h._pack_next=g,g._pack_prev=h,g._pack_next=M,M._pack_prev=g}function Xk(h,g){h._pack_next=g,g._pack_prev=h}function Zk(h,g){var M=g.x-h.x,S=g.y-h.y,L=h.r+g.r;return .999*L*L>M*M+S*S}function $k(h){if(!(g=h.children)||!(Q=g.length))return;var g,M=1/0,S=-1/0,L=1/0,D=-1/0,B,F,H,X,Z,K,Q;function pe(de){M=Math.min(de.x-de.r,M),S=Math.max(de.x+de.r,S),L=Math.min(de.y-de.r,L),D=Math.max(de.y+de.r,D)}if(g.forEach(nce),B=g[0],B.x=-B.r,B.y=0,pe(B),Q>1&&(F=g[1],F.x=F.r,F.y=0,pe(F),Q>2))for(H=g[2],Kk(B,F,H),pe(H),jx(B,H),B._pack_prev=H,jx(H,F),F=B._pack_next,X=3;Xle.x&&(le=Ve),Ve.depth>ve.depth&&(ve=Ve)});var _e=g(ee,le)/2-ee.x,Ae=M[0]/(le.x+g(le,ee)/2+_e),de=M[1]/(ve.depth||1);Xv(pe,function(Ve){Ve.x=(Ve.x+_e)*Ae,Ve.y=Ve.depth*de})}return Q}function D(Z){for(var K={A:null,children:[Z]},Q=[K],pe;(pe=Q.pop())!=null;)for(var we=pe.children,ee,le=0,ve=we.length;le0&&(oce(sce(ee,Z,Q),Z,Ve),ve+=Ve,_e+=Ve),Ae+=ee.m,ve+=pe.m,de+=le.m,_e+=we.m;ee&&!Xx(we)&&(we.t=ee,we.m+=Ae-_e),pe&&!Wx(le)&&(le.t=pe,le.m+=ve-de,Q=Z)}return Q}function X(Z){Z.x*=M[0],Z.y=Z.depth*M[1]}return L.separation=function(Z){return arguments.length?(g=Z,L):g},L.size=function(Z){return arguments.length?(S=(M=Z)==null?X:null,L):S?null:M},L.nodeSize=function(Z){return arguments.length?(S=(M=Z)==null?null:X,L):S?M:null},Wv(L,h)};function Qk(h,g){return h.parent==g.parent?1:2}function Wx(h){var g=h.children;return g.length?g[0]:h.t}function Xx(h){var g=h.children,M;return(M=g.length)?g[M-1]:h.t}function oce(h,g,M){var S=M/(g.i-h.i);g.c-=S,g.s+=M,h.c+=S,g.z+=M,g.m+=M}function lce(h){for(var g=0,M=0,S=h.children,L=S.length,D;--L>=0;)D=S[L],D.z+=g,D.m+=g,g+=D.s+(M+=D.c)}function sce(h,g,M){return h.a.parent===g.parent?h.a:M}e.layout.cluster=function(){var h=e.layout.hierarchy().sort(null).value(null),g=Qk,M=[1,1],S=!1;function L(D,B){var F=h.call(this,D,B),H=F[0],X,Z=0;Qo(H,function(ee){var le=ee.children;le&&le.length?(ee.x=fce(le),ee.y=uce(le)):(ee.x=X?Z+=g(ee,X):0,ee.y=0,X=ee)});var K=eS(H),Q=rS(H),pe=K.x-g(K,Q)/2,we=Q.x+g(Q,K)/2;return Qo(H,S?function(ee){ee.x=(ee.x-H.x)*M[0],ee.y=(H.y-ee.y)*M[1]}:function(ee){ee.x=(ee.x-pe)/(we-pe)*M[0],ee.y=(1-(H.y?ee.y/H.y:1))*M[1]}),F}return L.separation=function(D){return arguments.length?(g=D,L):g},L.size=function(D){return arguments.length?(S=(M=D)==null,L):S?null:M},L.nodeSize=function(D){return arguments.length?(S=(M=D)!=null,L):S?M:null},Wv(L,h)};function uce(h){return 1+e.max(h,function(g){return g.y})}function fce(h){return h.reduce(function(g,M){return g+M.x},0)/h.length}function eS(h){var g=h.children;return g&&g.length?eS(g[0]):h}function rS(h){var g=h.children,M;return g&&(M=g.length)?rS(g[M-1]):h}e.layout.treemap=function(){var h=e.layout.hierarchy(),g=Math.round,M=[1,1],S=null,L=Zx,D=!1,B,F="squarify",H=.5*(1+Math.sqrt(5));function X(ee,le){for(var ve=-1,_e=ee.length,Ae,de;++ve<_e;)de=(Ae=ee[ve]).value*(le<0?0:le),Ae.area=isNaN(de)||de<=0?0:de}function Z(ee){var le=ee.children;if(le&&le.length){var ve=L(ee),_e=[],Ae=le.slice(),de,Ve=1/0,lr,dr=F==="slice"?ve.dx:F==="dice"?ve.dy:F==="slice-dice"?ee.depth&1?ve.dy:ve.dx:Math.min(ve.dx,ve.dy),cr;for(X(Ae,ve.dx*ve.dy/ee.value),_e.area=0;(cr=Ae.length)>0;)_e.push(de=Ae[cr-1]),_e.area+=de.area,F!=="squarify"||(lr=Q(_e,dr))<=Ve?(Ae.pop(),Ve=lr):(_e.area-=_e.pop().area,pe(_e,dr,ve,!1),dr=Math.min(ve.dx,ve.dy),_e.length=_e.area=0,Ve=1/0);_e.length&&(pe(_e,dr,ve,!0),_e.length=_e.area=0),le.forEach(Z)}}function K(ee){var le=ee.children;if(le&&le.length){var ve=L(ee),_e=le.slice(),Ae,de=[];for(X(_e,ve.dx*ve.dy/ee.value),de.area=0;Ae=_e.pop();)de.push(Ae),de.area+=Ae.area,Ae.z!=null&&(pe(de,Ae.z?ve.dx:ve.dy,ve,!_e.length),de.length=de.area=0);le.forEach(K)}}function Q(ee,le){for(var ve=ee.area,_e,Ae=0,de=1/0,Ve=-1,lr=ee.length;++VeAe&&(Ae=_e));return ve*=ve,le*=le,ve?Math.max(le*Ae*H/ve,ve/(le*de*H)):1/0}function pe(ee,le,ve,_e){var Ae=-1,de=ee.length,Ve=ve.x,lr=ve.y,dr=le?g(ee.area/le):0,cr;if(le==ve.dx){for((_e||dr>ve.dy)&&(dr=ve.dy);++Aeve.dx)&&(dr=ve.dx);++Ae1);return h+g*S*Math.sqrt(-2*Math.log(D)/D)}},logNormal:function(){var h=e.random.normal.apply(e,arguments);return function(){return Math.exp(h())}},bates:function(h){var g=e.random.irwinHall(h);return function(){return g()/h}},irwinHall:function(h){return function(){for(var g=0,M=0;M2?hce:cce,X=S?Pfe:Efe;return L=H(h,g,X,M),D=H(g,h,X,Su),F}function F(H){return L(H)}return F.invert=function(H){return D(H)},F.domain=function(H){return arguments.length?(h=H.map(Number),B()):h},F.range=function(H){return arguments.length?(g=H,B()):g},F.rangeRound=function(H){return F.range(H).interpolate(Bk)},F.clamp=function(H){return arguments.length?(S=H,B()):S},F.interpolate=function(H){return arguments.length?(M=H,B()):M},F.ticks=function(H){return Kx(h,H)},F.tickFormat=function(H,X){return d3_scale_linearTickFormat(h,H,X)},F.nice=function(H){return oS(h,H),B()},F.copy=function(){return nS(h,g,M,S)},B()}function iS(h,g){return e.rebind(h,g,"range","rangeRound","interpolate","clamp")}function oS(h,g){return $x(h,aS(Jx(h,g)[2])),$x(h,aS(Jx(h,g)[2])),h}function Jx(h,g){g==null&&(g=10);var M=A1(h),S=M[1]-M[0],L=Math.pow(10,Math.floor(Math.log(S/g)/Math.LN10)),D=g/S*L;return D<=.15?L*=10:D<=.35?L*=5:D<=.75&&(L*=2),M[0]=Math.ceil(M[0]/L)*L,M[1]=Math.floor(M[1]/L)*L+L*.5,M[2]=L,M}function Kx(h,g){return e.range.apply(e,Jx(h,g))}var dce={s:1,g:1,p:1,r:1,e:1};function lS(h){return-Math.floor(Math.log(h)/Math.LN10+.01)}function ije(h,g){var M=lS(g[2]);return h in dce?Math.abs(M-lS(Math.max(b(g[0]),b(g[1]))))+ +(h!=="e"):M-(h==="%")*2}e.scale.log=function(){return sS(e.scale.linear().domain([0,1]),10,!0,[1,10])};function sS(h,g,M,S){function L(F){return(M?Math.log(F<0?0:F):-Math.log(F>0?0:-F))/Math.log(g)}function D(F){return M?Math.pow(g,F):-Math.pow(g,-F)}function B(F){return h(L(F))}return B.invert=function(F){return D(h.invert(F))},B.domain=function(F){return arguments.length?(M=F[0]>=0,h.domain((S=F.map(Number)).map(L)),B):S},B.base=function(F){return arguments.length?(g=+F,h.domain(S.map(L)),B):g},B.nice=function(){var F=$x(S.map(L),M?Math:pce);return h.domain(F),S=F.map(D),B},B.ticks=function(){var F=A1(S),H=[],X=F[0],Z=F[1],K=Math.floor(L(X)),Q=Math.ceil(L(Z)),pe=g%1?2:g;if(isFinite(Q-K)){if(M){for(;K0;we--)H.push(D(K)*we);for(K=0;H[K]Z;Q--);H=H.slice(K,Q)}return H},B.copy=function(){return sS(h.copy(),g,M,S)},iS(B,h)}var pce={floor:function(h){return-Math.ceil(-h)},ceil:function(h){return-Math.floor(-h)}};e.scale.pow=function(){return uS(e.scale.linear(),1,[0,1])};function uS(h,g,M){var S=M1(g),L=M1(1/g);function D(B){return h(S(B))}return D.invert=function(B){return L(h.invert(B))},D.domain=function(B){return arguments.length?(h.domain((M=B.map(Number)).map(S)),D):M},D.ticks=function(B){return Kx(M,B)},D.tickFormat=function(B,F){return d3_scale_linearTickFormat(M,B,F)},D.nice=function(B){return D.domain(oS(M,B))},D.exponent=function(B){return arguments.length?(S=M1(g=B),L=M1(1/g),h.domain(M.map(S)),D):g},D.copy=function(){return uS(h.copy(),g,M)},iS(D,h)}function M1(h){return function(g){return g<0?-Math.pow(-g,h):Math.pow(g,h)}}e.scale.sqrt=function(){return e.scale.pow().exponent(.5)},e.scale.ordinal=function(){return fS([],{t:"range",a:[[]]})};function fS(h,g){var M,S,L;function D(F){return S[((M.get(F)||(g.t==="range"?M.set(F,h.push(F)):NaN))-1)%S.length]}function B(F,H){return e.range(h.length).map(function(X){return F+H*X})}return D.domain=function(F){if(!arguments.length)return h;h=[],M=new x;for(var H=-1,X=F.length,Z;++H0?M[D-1]:h[0],DQ?0:1;if(Z=gr)return H(Z,we)+(X?H(X,1-we):"")+"Z";var ee,le,ve,_e,Ae=0,de=0,Ve,lr,dr,cr,xr,_r,Nr,Ar,Er=[];if((_e=(+B.apply(this,arguments)||0)/2)&&(ve=S===k1?Math.sqrt(X*X+Z*Z):+S.apply(this,arguments),we||(de*=-1),Z&&(de=yt(ve/Z*Math.sin(_e))),X&&(Ae=yt(ve/X*Math.sin(_e)))),Z){Ve=Z*Math.cos(K+de),lr=Z*Math.sin(K+de),dr=Z*Math.cos(Q-de),cr=Z*Math.sin(Q-de);var ot=Math.abs(Q-K-2*de)<=yr?0:1;if(de&&S1(Ve,lr,dr,cr)===we^ot){var va=(K+Q)/2;Ve=Z*Math.cos(va),lr=Z*Math.sin(va),dr=cr=null}}else Ve=lr=0;if(X){xr=X*Math.cos(Q-Ae),_r=X*Math.sin(Q-Ae),Nr=X*Math.cos(K+Ae),Ar=X*Math.sin(K+Ae);var bt=Math.abs(K-Q+2*Ae)<=yr?0:1;if(Ae&&S1(xr,_r,Nr,Ar)===1-we^bt){var nr=(K+Q)/2;xr=X*Math.cos(nr),_r=X*Math.sin(nr),Nr=Ar=null}}else xr=_r=0;if(pe>Be&&(ee=Math.min(Math.abs(Z-X)/2,+M.apply(this,arguments)))>.001){le=X0?0:1}function q1(h,g,M,S,L){var D=h[0]-g[0],B=h[1]-g[1],F=(L?S:-S)/Math.sqrt(D*D+B*B),H=F*B,X=-F*D,Z=h[0]+H,K=h[1]+X,Q=g[0]+H,pe=g[1]+X,we=(Z+Q)/2,ee=(K+pe)/2,le=Q-Z,ve=pe-K,_e=le*le+ve*ve,Ae=M-S,de=Z*pe-Q*K,Ve=(ve<0?-1:1)*Math.sqrt(Math.max(0,Ae*Ae*_e-de*de)),lr=(de*ve-le*Ve)/_e,dr=(-de*le-ve*Ve)/_e,cr=(de*ve+le*Ve)/_e,xr=(-de*le+ve*Ve)/_e,_r=lr-we,Nr=dr-ee,Ar=cr-we,Er=xr-ee;return _r*_r+Nr*Nr>Ar*Ar+Er*Er&&(lr=cr,dr=xr),[[lr-H,dr-X],[lr*M/Ae,dr*M/Ae]]}function yS(){return!0}function gS(h){var g=hc,M=Hv,S=yS,L=Ao,D=L.key,B=.7;function F(H){var X=[],Z=[],K=-1,Q=H.length,pe,we=Mr(g),ee=Mr(M);function le(){X.push("M",L(h(Z),B))}for(;++K1?h.join("L"):h+"Z"}function bS(h){return h.join("L")+"Z"}function Tce(h){for(var g=0,M=h.length,S=h[0],L=[S[0],",",S[1]];++g1&&L.push("H",S[0]),L.join("")}function e5(h){for(var g=0,M=h.length,S=h[0],L=[S[0],",",S[1]];++g1){F=g[1],D=h[H],H++,S+="C"+(L[0]+B[0])+","+(L[1]+B[1])+","+(D[0]-F[0])+","+(D[1]-F[1])+","+D[0]+","+D[1];for(var X=2;X9&&(D=M*3/Math.sqrt(D),B[F]=D*S,B[F+1]=D*L));for(F=-1;++F<=H;)D=(h[Math.min(H,F+1)][0]-h[Math.max(0,F-1)][0])/(6*(1+B[F]*B[F])),g.push([D||0,B[F]*D||0]);return g}function Pce(h){return h.length<3?Ao(h):h[0]+L1(h,Ece(h))}e.svg.line.radial=function(){var h=gS(AS);return h.radius=h.x,delete h.x,h.angle=h.y,delete h.y,h};function AS(h){for(var g,M=-1,S=h.length,L,D;++Myr)+",1 "+K}function X(Z,K,Q,pe){return"Q 0,0 "+pe}return D.radius=function(Z){return arguments.length?(M=Mr(Z),D):M},D.source=function(Z){return arguments.length?(h=Mr(Z),D):h},D.target=function(Z){return arguments.length?(g=Mr(Z),D):g},D.startAngle=function(Z){return arguments.length?(S=Mr(Z),D):S},D.endAngle=function(Z){return arguments.length?(L=Mr(Z),D):L},D};function Rce(h){return h.radius}e.svg.diagonal=function(){var h=MS,g=kS,M=SS;function S(L,D){var B=h.call(this,L,D),F=g.call(this,L,D),H=(B.y+F.y)/2,X=[B,{x:B.x,y:H},{x:F.x,y:H},F];return X=X.map(M),"M"+X[0]+"C"+X[1]+" "+X[2]+" "+X[3]}return S.source=function(L){return arguments.length?(h=Mr(L),S):h},S.target=function(L){return arguments.length?(g=Mr(L),S):g},S.projection=function(L){return arguments.length?(M=L,S):M},S};function SS(h){return[h.x,h.y]}e.svg.diagonal.radial=function(){var h=e.svg.diagonal(),g=SS,M=h.projection;return h.projection=function(S){return arguments.length?M(Fce(g=S)):g},h};function Fce(h){return function(){var g=h.apply(this,arguments),M=g[0],S=g[1]-ne;return[M*Math.cos(S),M*Math.sin(S)]}}e.svg.symbol=function(){var h=Nce,g=zce;function M(S,L){return(LS.get(h.call(this,S,L))||qS)(g.call(this,S,L))}return M.type=function(S){return arguments.length?(h=Mr(S),M):h},M.size=function(S){return arguments.length?(g=Mr(S),M):g},M};function zce(){return 64}function Nce(){return"circle"}function qS(h){var g=Math.sqrt(h/yr);return"M0,"+g+"A"+g+","+g+" 0 1,1 0,"+-g+"A"+g+","+g+" 0 1,1 0,"+g+"Z"}var LS=e.map({circle:qS,cross:function(h){var g=Math.sqrt(h/5)/2;return"M"+-3*g+","+-g+"H"+-g+"V"+-3*g+"H"+g+"V"+-g+"H"+3*g+"V"+g+"H"+g+"V"+3*g+"H"+-g+"V"+g+"H"+-3*g+"Z"},diamond:function(h){var g=Math.sqrt(h/(2*CS)),M=g*CS;return"M0,"+-g+"L"+M+",0 0,"+g+" "+-M+",0Z"},square:function(h){var g=Math.sqrt(h)/2;return"M"+-g+","+-g+"L"+g+","+-g+" "+g+","+g+" "+-g+","+g+"Z"},"triangle-down":function(h){var g=Math.sqrt(h/C1),M=g*C1/2;return"M0,"+M+"L"+g+","+-M+" "+-g+","+-M+"Z"},"triangle-up":function(h){var g=Math.sqrt(h/C1),M=g*C1/2;return"M0,"+-M+"L"+g+","+M+" "+-g+","+M+"Z"}});e.svg.symbolTypes=LS.keys();var C1=Math.sqrt(3),CS=Math.tan(30*ge);oe.transition=function(h){for(var g=qu||++ES,M=o5(h),S=[],L,D,B=E1||{time:Date.now(),ease:pfe,delay:0,duration:250},F=-1,H=this.length;++F0;)K[--_e].call(h,ve);if(le>=1)return B.event&&B.event.end.call(h,h.__data__,g),--D.count?delete D[S]:delete h[M],1}B||(F=L.time,H=m1(Q,0,F),B=D[S]={tween:new x,time:F,timer:H,delay:L.delay,duration:L.duration,ease:L.ease,index:g},L=null,++D.count)}e.svg.axis=function(){var h=e.scale.linear(),g=PS,M=6,S=6,L=3,D=[10],B=null,F;function H(X){X.each(function(){var Z=e.select(this),K=this.__chart__||h,Q=this.__chart__=h.copy(),pe=B==null?Q.ticks?Q.ticks.apply(Q,D):Q.domain():B,we=F==null?Q.tickFormat?Q.tickFormat.apply(Q,D):O:F,ee=Z.selectAll(".tick").data(pe,Q),le=ee.enter().insert("g",".domain").attr("class","tick").style("opacity",Be),ve=e.transition(ee.exit()).style("opacity",Be).remove(),_e=e.transition(ee.order()).style("opacity",1),Ae=Math.max(M,0)+L,de,Ve=T1(Q),lr=Z.selectAll(".domain").data([0]),dr=(lr.enter().append("path").attr("class","domain"),e.transition(lr));le.append("line"),le.append("text");var cr=le.select("line"),xr=_e.select("line"),_r=ee.select("text").text(we),Nr=le.select("text"),Ar=_e.select("text"),Er=g==="top"||g==="left"?-1:1,ot,va,bt,nr;if(g==="bottom"||g==="top"?(de=Oce,ot="x",bt="y",va="x2",nr="y2",_r.attr("dy",Er<0?"0em":".71em").style("text-anchor","middle"),dr.attr("d","M"+Ve[0]+","+Er*S+"V0H"+Ve[1]+"V"+Er*S)):(de=Hce,ot="y",bt="x",va="y2",nr="x2",_r.attr("dy",".32em").style("text-anchor",Er<0?"end":"start"),dr.attr("d","M"+Er*S+","+Ve[0]+"H0V"+Ve[1]+"H"+Er*S)),cr.attr(nr,Er*M),Nr.attr(bt,Er*Ae),xr.attr(va,0).attr(nr,Er*M),Ar.attr(ot,0).attr(bt,Er*Ae),Q.rangeBand){var Ir=Q,Or=Ir.rangeBand()/2;K=Q=function(lt){return Ir(lt)+Or}}else K.rangeBand?K=Q:ve.call(de,Q,K);le.call(de,K,Q),_e.call(de,Q,Q)})}return H.scale=function(X){return arguments.length?(h=X,H):h},H.orient=function(X){return arguments.length?(g=X in Bce?X+"":PS,H):g},H.ticks=function(){return arguments.length?(D=t(arguments),H):D},H.tickValues=function(X){return arguments.length?(B=X,H):B},H.tickFormat=function(X){return arguments.length?(F=X,H):F},H.tickSize=function(X){var Z=arguments.length;return Z?(M=+X,S=+arguments[Z-1],H):M},H.innerTickSize=function(X){return arguments.length?(M=+X,H):M},H.outerTickSize=function(X){return arguments.length?(S=+X,H):S},H.tickPadding=function(X){return arguments.length?(L=+X,H):L},H.tickSubdivide=function(){return arguments.length&&H},H};var PS="bottom",Bce={top:1,right:1,bottom:1,left:1};function Oce(h,g,M){h.attr("transform",function(S){var L=g(S);return"translate("+(isFinite(L)?L:M(S))+",0)"})}function Hce(h,g,M){h.attr("transform",function(S){var L=g(S);return"translate(0,"+(isFinite(L)?L:M(S))+")"})}e.svg.brush=function(){var h=ae(Z,"brushstart","brush","brushend"),g=null,M=null,S=[0,0],L=[0,0],D,B,F=!0,H=!0,X=l5[0];function Z(ee){ee.each(function(){var le=e.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",we).on("touchstart.brush",we),ve=le.selectAll(".background").data([0]);ve.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),le.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var _e=le.selectAll(".resize").data(X,O);_e.exit().remove(),_e.enter().append("g").attr("class",function(lr){return"resize "+lr}).style("cursor",function(lr){return Uce[lr]}).append("rect").attr("x",function(lr){return/[ew]$/.test(lr)?-3:null}).attr("y",function(lr){return/^[ns]/.test(lr)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),_e.style("display",Z.empty()?"none":null);var Ae=e.transition(le),de=e.transition(ve),Ve;g&&(Ve=T1(g),de.attr("x",Ve[0]).attr("width",Ve[1]-Ve[0]),Q(Ae)),M&&(Ve=T1(M),de.attr("y",Ve[0]).attr("height",Ve[1]-Ve[0]),pe(Ae)),K(Ae)})}Z.event=function(ee){ee.each(function(){var le=h.of(this,arguments),ve={x:S,y:L,i:D,j:B},_e=this.__chart__||ve;this.__chart__=ve,qu?e.select(this).transition().each("start.brush",function(){D=_e.i,B=_e.j,S=_e.x,L=_e.y,le({type:"brushstart"})}).tween("brush:brush",function(){var Ae=w1(S,ve.x),de=w1(L,ve.y);return D=B=null,function(Ve){S=ve.x=Ae(Ve),L=ve.y=de(Ve),le({type:"brush",mode:"resize"})}}).each("end.brush",function(){D=ve.i,B=ve.j,le({type:"brush",mode:"resize"}),le({type:"brushend"})}):(le({type:"brushstart"}),le({type:"brush",mode:"resize"}),le({type:"brushend"}))})};function K(ee){ee.selectAll(".resize").attr("transform",function(le){return"translate("+S[+/e$/.test(le)]+","+L[+/^s/.test(le)]+")"})}function Q(ee){ee.select(".extent").attr("x",S[0]),ee.selectAll(".extent,.n>rect,.s>rect").attr("width",S[1]-S[0])}function pe(ee){ee.select(".extent").attr("y",L[0]),ee.selectAll(".extent,.e>rect,.w>rect").attr("height",L[1]-L[0])}function we(){var ee=this,le=e.select(e.event.target),ve=h.of(ee,arguments),_e=e.select(ee),Ae=le.datum(),de=!/^(n|s)$/.test(Ae)&&g,Ve=!/^(e|w)$/.test(Ae)&&M,lr=le.classed("extent"),dr=or(ee),cr,xr=e.mouse(ee),_r,Nr=e.select(i(ee)).on("keydown.brush",ot).on("keyup.brush",va);if(e.event.changedTouches?Nr.on("touchmove.brush",bt).on("touchend.brush",Ir):Nr.on("mousemove.brush",bt).on("mouseup.brush",Ir),_e.interrupt().selectAll("*").interrupt(),lr)xr[0]=S[0]-xr[0],xr[1]=L[0]-xr[1];else if(Ae){var Ar=+/w$/.test(Ae),Er=+/^n/.test(Ae);_r=[S[1-Ar]-xr[0],L[1-Er]-xr[1]],xr[0]=S[Ar],xr[1]=L[Er]}else e.event.altKey&&(cr=xr.slice());_e.style("pointer-events","none").selectAll(".resize").style("display",null),e.select("body").style("cursor",le.style("cursor")),ve({type:"brushstart"}),bt();function ot(){e.event.keyCode==32&&(lr||(cr=null,xr[0]-=S[1],xr[1]-=L[1],lr=2),J())}function va(){e.event.keyCode==32&&lr==2&&(xr[0]+=S[1],xr[1]+=L[1],lr=0,J())}function bt(){var Or=e.mouse(ee),lt=!1;_r&&(Or[0]+=_r[0],Or[1]+=_r[1]),lr||(e.event.altKey?(cr||(cr=[(S[0]+S[1])/2,(L[0]+L[1])/2]),xr[0]=S[+(Or[0]{(function(e,r){typeof I1=="object"&&typeof GS!="undefined"?r(I1):(e=e||self,r(e.d3=e.d3||{}))})(I1,function(e){"use strict";var r=new Date,t=new Date;function a(re,xe,Ye,vr){function Pe(me){return re(me=arguments.length===0?new Date:new Date(+me)),me}return Pe.floor=function(me){return re(me=new Date(+me)),me},Pe.ceil=function(me){return re(me=new Date(me-1)),xe(me,1),re(me),me},Pe.round=function(me){var Te=Pe(me),Ue=Pe.ceil(me);return me-Te0))return $e;do $e.push(Oe=new Date(+me)),xe(me,Ue),re(me);while(Oe=Te)for(;re(Te),!me(Te);)Te.setTime(Te-1)},function(Te,Ue){if(Te>=Te)if(Ue<0)for(;++Ue<=0;)for(;xe(Te,-1),!me(Te););else for(;--Ue>=0;)for(;xe(Te,1),!me(Te););})},Ye&&(Pe.count=function(me,Te){return r.setTime(+me),t.setTime(+Te),re(r),re(t),Math.floor(Ye(r,t))},Pe.every=function(me){return me=Math.floor(me),!isFinite(me)||!(me>0)?null:me>1?Pe.filter(vr?function(Te){return vr(Te)%me===0}:function(Te){return Pe.count(0,Te)%me===0}):Pe}),Pe}var n=a(function(){},function(re,xe){re.setTime(+re+xe)},function(re,xe){return xe-re});n.every=function(re){return re=Math.floor(re),!isFinite(re)||!(re>0)?null:re>1?a(function(xe){xe.setTime(Math.floor(xe/re)*re)},function(xe,Ye){xe.setTime(+xe+Ye*re)},function(xe,Ye){return(Ye-xe)/re}):n};var i=n.range,o=1e3,l=6e4,s=36e5,u=864e5,f=6048e5,c=a(function(re){re.setTime(re-re.getMilliseconds())},function(re,xe){re.setTime(+re+xe*o)},function(re,xe){return(xe-re)/o},function(re){return re.getUTCSeconds()}),v=c.range,d=a(function(re){re.setTime(re-re.getMilliseconds()-re.getSeconds()*o)},function(re,xe){re.setTime(+re+xe*l)},function(re,xe){return(xe-re)/l},function(re){return re.getMinutes()}),p=d.range,y=a(function(re){re.setTime(re-re.getMilliseconds()-re.getSeconds()*o-re.getMinutes()*l)},function(re,xe){re.setTime(+re+xe*s)},function(re,xe){return(xe-re)/s},function(re){return re.getHours()}),m=y.range,b=a(function(re){re.setHours(0,0,0,0)},function(re,xe){re.setDate(re.getDate()+xe)},function(re,xe){return(xe-re-(xe.getTimezoneOffset()-re.getTimezoneOffset())*l)/u},function(re){return re.getDate()-1}),A=b.range;function w(re){return a(function(xe){xe.setDate(xe.getDate()-(xe.getDay()+7-re)%7),xe.setHours(0,0,0,0)},function(xe,Ye){xe.setDate(xe.getDate()+Ye*7)},function(xe,Ye){return(Ye-xe-(Ye.getTimezoneOffset()-xe.getTimezoneOffset())*l)/f})}var x=w(0),_=w(1),k=w(2),T=w(3),q=w(4),C=w(5),E=w(6),P=x.range,R=_.range,N=k.range,I=T.range,O=q.range,U=C.range,Y=E.range,G=a(function(re){re.setDate(1),re.setHours(0,0,0,0)},function(re,xe){re.setMonth(re.getMonth()+xe)},function(re,xe){return xe.getMonth()-re.getMonth()+(xe.getFullYear()-re.getFullYear())*12},function(re){return re.getMonth()}),V=G.range,W=a(function(re){re.setMonth(0,1),re.setHours(0,0,0,0)},function(re,xe){re.setFullYear(re.getFullYear()+xe)},function(re,xe){return xe.getFullYear()-re.getFullYear()},function(re){return re.getFullYear()});W.every=function(re){return!isFinite(re=Math.floor(re))||!(re>0)?null:a(function(xe){xe.setFullYear(Math.floor(xe.getFullYear()/re)*re),xe.setMonth(0,1),xe.setHours(0,0,0,0)},function(xe,Ye){xe.setFullYear(xe.getFullYear()+Ye*re)})};var j=W.range,J=a(function(re){re.setUTCSeconds(0,0)},function(re,xe){re.setTime(+re+xe*l)},function(re,xe){return(xe-re)/l},function(re){return re.getUTCMinutes()}),te=J.range,ae=a(function(re){re.setUTCMinutes(0,0,0)},function(re,xe){re.setTime(+re+xe*s)},function(re,xe){return(xe-re)/s},function(re){return re.getUTCHours()}),se=ae.range,$=a(function(re){re.setUTCHours(0,0,0,0)},function(re,xe){re.setUTCDate(re.getUTCDate()+xe)},function(re,xe){return(xe-re)/u},function(re){return re.getUTCDate()-1}),fe=$.range;function ie(re){return a(function(xe){xe.setUTCDate(xe.getUTCDate()-(xe.getUTCDay()+7-re)%7),xe.setUTCHours(0,0,0,0)},function(xe,Ye){xe.setUTCDate(xe.getUTCDate()+Ye*7)},function(xe,Ye){return(Ye-xe)/f})}var ue=ie(0),ce=ie(1),oe=ie(2),be=ie(3),Re=ie(4),ye=ie(5),Ce=ie(6),Me=ue.range,Le=ce.range,De=oe.range,Ie=be.range,qe=Re.range,Ze=ye.range,Je=Ce.range,Xe=a(function(re){re.setUTCDate(1),re.setUTCHours(0,0,0,0)},function(re,xe){re.setUTCMonth(re.getUTCMonth()+xe)},function(re,xe){return xe.getUTCMonth()-re.getUTCMonth()+(xe.getUTCFullYear()-re.getUTCFullYear())*12},function(re){return re.getUTCMonth()}),Se=Xe.range,Fe=a(function(re){re.setUTCMonth(0,1),re.setUTCHours(0,0,0,0)},function(re,xe){re.setUTCFullYear(re.getUTCFullYear()+xe)},function(re,xe){return xe.getUTCFullYear()-re.getUTCFullYear()},function(re){return re.getUTCFullYear()});Fe.every=function(re){return!isFinite(re=Math.floor(re))||!(re>0)?null:a(function(xe){xe.setUTCFullYear(Math.floor(xe.getUTCFullYear()/re)*re),xe.setUTCMonth(0,1),xe.setUTCHours(0,0,0,0)},function(xe,Ye){xe.setUTCFullYear(xe.getUTCFullYear()+Ye*re)})};var er=Fe.range;e.timeDay=b,e.timeDays=A,e.timeFriday=C,e.timeFridays=U,e.timeHour=y,e.timeHours=m,e.timeInterval=a,e.timeMillisecond=n,e.timeMilliseconds=i,e.timeMinute=d,e.timeMinutes=p,e.timeMonday=_,e.timeMondays=R,e.timeMonth=G,e.timeMonths=V,e.timeSaturday=E,e.timeSaturdays=Y,e.timeSecond=c,e.timeSeconds=v,e.timeSunday=x,e.timeSundays=P,e.timeThursday=q,e.timeThursdays=O,e.timeTuesday=k,e.timeTuesdays=N,e.timeWednesday=T,e.timeWednesdays=I,e.timeWeek=x,e.timeWeeks=P,e.timeYear=W,e.timeYears=j,e.utcDay=$,e.utcDays=fe,e.utcFriday=ye,e.utcFridays=Ze,e.utcHour=ae,e.utcHours=se,e.utcMillisecond=n,e.utcMilliseconds=i,e.utcMinute=J,e.utcMinutes=te,e.utcMonday=ce,e.utcMondays=Le,e.utcMonth=Xe,e.utcMonths=Se,e.utcSaturday=Ce,e.utcSaturdays=Je,e.utcSecond=c,e.utcSeconds=v,e.utcSunday=ue,e.utcSundays=Me,e.utcThursday=Re,e.utcThursdays=qe,e.utcTuesday=oe,e.utcTuesdays=De,e.utcWednesday=be,e.utcWednesdays=Ie,e.utcWeek=ue,e.utcWeeks=Me,e.utcYear=Fe,e.utcYears=er,Object.defineProperty(e,"__esModule",{value:!0})})});var _c=z((B1,YS)=>{(function(e,r){typeof B1=="object"&&typeof YS!="undefined"?r(B1,u5()):(e=e||self,r(e.d3=e.d3||{},e.d3))})(B1,function(e,r){"use strict";function t(ne){if(0<=ne.y&&ne.y<100){var ge=new Date(-1,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L);return ge.setFullYear(ne.y),ge}return new Date(ne.y,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L)}function a(ne){if(0<=ne.y&&ne.y<100){var ge=new Date(Date.UTC(-1,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L));return ge.setUTCFullYear(ne.y),ge}return new Date(Date.UTC(ne.y,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L))}function n(ne,ge,Ne){return{y:ne,m:ge,d:Ne,H:0,M:0,S:0,L:0}}function i(ne){var ge=ne.dateTime,Ne=ne.date,He=ne.time,Kr=ne.periods,Qr=ne.days,yt=ne.shortDays,gt=ne.months,Et=ne.shortMonths,aa=v(Kr),$a=d(Kr),na=v(Qr),Ja=d(Qr),hn=v(yt),fa=d(yt),hr=v(gt),wt=d(gt),Vr=v(Et),ht=d(Et),Nt={a:wo,A:ci,b:ca,B:vc,c:null,d:G,e:G,f:te,g:ye,G:Me,H:V,I:W,j,L:J,m:ae,M:se,p:ds,q:In,Q:or,s:sr,S:$,u:fe,U:ie,V:ce,w:oe,W:be,x:null,X:null,y:Re,Y:Ce,Z:Le,"%":ar},kt={a:ps,A:h1,b:d1,B:p1,c:null,d:De,e:De,f:Xe,g:Ue,G:Oe,H:Ie,I:qe,j:Ze,L:Je,m:Se,M:Fe,p:Bv,q:Ov,Q:or,s:sr,S:er,u:re,U:xe,V:vr,w:Pe,W:me,x:null,X:null,y:Te,Y:$e,Z:We,"%":ar},it={a:oa,A:la,b:dt,B:Ka,c:Yt,d:q,e:q,f:I,g:x,G:w,H:E,I:E,j:C,L:N,m:T,M:P,p:Pt,q:k,Q:U,s:Y,S:R,u:y,U:m,V:b,w:p,W:A,x:cc,X:Nn,y:x,Y:w,Z:_,"%":O};Nt.x=ia(Ne,Nt),Nt.X=ia(He,Nt),Nt.c=ia(ge,Nt),kt.x=ia(Ne,kt),kt.X=ia(He,kt),kt.c=ia(ge,kt);function ia(kr,Mr){return function(pt){var fr=[],wn=-1,It=0,Qa=kr.length,en,Ri,Mu;for(pt instanceof Date||(pt=new Date(+pt));++wn53)return null;"w"in fr||(fr.w=1),"Z"in fr?(It=a(n(fr.y,0,1)),Qa=It.getUTCDay(),It=Qa>4||Qa===0?r.utcMonday.ceil(It):r.utcMonday(It),It=r.utcDay.offset(It,(fr.V-1)*7),fr.y=It.getUTCFullYear(),fr.m=It.getUTCMonth(),fr.d=It.getUTCDate()+(fr.w+6)%7):(It=t(n(fr.y,0,1)),Qa=It.getDay(),It=Qa>4||Qa===0?r.timeMonday.ceil(It):r.timeMonday(It),It=r.timeDay.offset(It,(fr.V-1)*7),fr.y=It.getFullYear(),fr.m=It.getMonth(),fr.d=It.getDate()+(fr.w+6)%7)}else("W"in fr||"U"in fr)&&("w"in fr||(fr.w="u"in fr?fr.u%7:"W"in fr?1:0),Qa="Z"in fr?a(n(fr.y,0,1)).getUTCDay():t(n(fr.y,0,1)).getDay(),fr.m=0,fr.d="W"in fr?(fr.w+6)%7+fr.W*7-(Qa+5)%7:fr.w+fr.U*7-(Qa+6)%7);return"Z"in fr?(fr.H+=fr.Z/100|0,fr.M+=fr.Z%100,a(fr)):t(fr)}}function Xt(kr,Mr,pt,fr){for(var wn=0,It=Mr.length,Qa=pt.length,en,Ri;wn=Qa)return-1;if(en=Mr.charCodeAt(wn++),en===37){if(en=Mr.charAt(wn++),Ri=it[en in o?Mr.charAt(wn++):en],!Ri||(fr=Ri(kr,pt,fr))<0)return-1}else if(en!=pt.charCodeAt(fr++))return-1}return fr}function Pt(kr,Mr,pt){var fr=aa.exec(Mr.slice(pt));return fr?(kr.p=$a[fr[0].toLowerCase()],pt+fr[0].length):-1}function oa(kr,Mr,pt){var fr=hn.exec(Mr.slice(pt));return fr?(kr.w=fa[fr[0].toLowerCase()],pt+fr[0].length):-1}function la(kr,Mr,pt){var fr=na.exec(Mr.slice(pt));return fr?(kr.w=Ja[fr[0].toLowerCase()],pt+fr[0].length):-1}function dt(kr,Mr,pt){var fr=Vr.exec(Mr.slice(pt));return fr?(kr.m=ht[fr[0].toLowerCase()],pt+fr[0].length):-1}function Ka(kr,Mr,pt){var fr=hr.exec(Mr.slice(pt));return fr?(kr.m=wt[fr[0].toLowerCase()],pt+fr[0].length):-1}function Yt(kr,Mr,pt){return Xt(kr,ge,Mr,pt)}function cc(kr,Mr,pt){return Xt(kr,Ne,Mr,pt)}function Nn(kr,Mr,pt){return Xt(kr,He,Mr,pt)}function wo(kr){return yt[kr.getDay()]}function ci(kr){return Qr[kr.getDay()]}function ca(kr){return Et[kr.getMonth()]}function vc(kr){return gt[kr.getMonth()]}function ds(kr){return Kr[+(kr.getHours()>=12)]}function In(kr){return 1+~~(kr.getMonth()/3)}function ps(kr){return yt[kr.getUTCDay()]}function h1(kr){return Qr[kr.getUTCDay()]}function d1(kr){return Et[kr.getUTCMonth()]}function p1(kr){return gt[kr.getUTCMonth()]}function Bv(kr){return Kr[+(kr.getUTCHours()>=12)]}function Ov(kr){return 1+~~(kr.getUTCMonth()/3)}return{format:function(kr){var Mr=ia(kr+="",Nt);return Mr.toString=function(){return kr},Mr},parse:function(kr){var Mr=zn(kr+="",!1);return Mr.toString=function(){return kr},Mr},utcFormat:function(kr){var Mr=ia(kr+="",kt);return Mr.toString=function(){return kr},Mr},utcParse:function(kr){var Mr=zn(kr+="",!0);return Mr.toString=function(){return kr},Mr}}}var o={"-":"",_:" ",0:"0"},l=/^\s*\d+/,s=/^%/,u=/[\\^$*+?|[\]().{}]/g;function f(ne,ge,Ne){var He=ne<0?"-":"",Kr=(He?-ne:ne)+"",Qr=Kr.length;return He+(Qr68?1900:2e3),Ne+He[0].length):-1}function _(ne,ge,Ne){var He=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(ge.slice(Ne,Ne+6));return He?(ne.Z=He[1]?0:-(He[2]+(He[3]||"00")),Ne+He[0].length):-1}function k(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+1));return He?(ne.q=He[0]*3-3,Ne+He[0].length):-1}function T(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+2));return He?(ne.m=He[0]-1,Ne+He[0].length):-1}function q(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+2));return He?(ne.d=+He[0],Ne+He[0].length):-1}function C(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+3));return He?(ne.m=0,ne.d=+He[0],Ne+He[0].length):-1}function E(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+2));return He?(ne.H=+He[0],Ne+He[0].length):-1}function P(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+2));return He?(ne.M=+He[0],Ne+He[0].length):-1}function R(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+2));return He?(ne.S=+He[0],Ne+He[0].length):-1}function N(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+3));return He?(ne.L=+He[0],Ne+He[0].length):-1}function I(ne,ge,Ne){var He=l.exec(ge.slice(Ne,Ne+6));return He?(ne.L=Math.floor(He[0]/1e3),Ne+He[0].length):-1}function O(ne,ge,Ne){var He=s.exec(ge.slice(Ne,Ne+1));return He?Ne+He[0].length:-1}function U(ne,ge,Ne){var He=l.exec(ge.slice(Ne));return He?(ne.Q=+He[0],Ne+He[0].length):-1}function Y(ne,ge,Ne){var He=l.exec(ge.slice(Ne));return He?(ne.s=+He[0],Ne+He[0].length):-1}function G(ne,ge){return f(ne.getDate(),ge,2)}function V(ne,ge){return f(ne.getHours(),ge,2)}function W(ne,ge){return f(ne.getHours()%12||12,ge,2)}function j(ne,ge){return f(1+r.timeDay.count(r.timeYear(ne),ne),ge,3)}function J(ne,ge){return f(ne.getMilliseconds(),ge,3)}function te(ne,ge){return J(ne,ge)+"000"}function ae(ne,ge){return f(ne.getMonth()+1,ge,2)}function se(ne,ge){return f(ne.getMinutes(),ge,2)}function $(ne,ge){return f(ne.getSeconds(),ge,2)}function fe(ne){var ge=ne.getDay();return ge===0?7:ge}function ie(ne,ge){return f(r.timeSunday.count(r.timeYear(ne)-1,ne),ge,2)}function ue(ne){var ge=ne.getDay();return ge>=4||ge===0?r.timeThursday(ne):r.timeThursday.ceil(ne)}function ce(ne,ge){return ne=ue(ne),f(r.timeThursday.count(r.timeYear(ne),ne)+(r.timeYear(ne).getDay()===4),ge,2)}function oe(ne){return ne.getDay()}function be(ne,ge){return f(r.timeMonday.count(r.timeYear(ne)-1,ne),ge,2)}function Re(ne,ge){return f(ne.getFullYear()%100,ge,2)}function ye(ne,ge){return ne=ue(ne),f(ne.getFullYear()%100,ge,2)}function Ce(ne,ge){return f(ne.getFullYear()%1e4,ge,4)}function Me(ne,ge){var Ne=ne.getDay();return ne=Ne>=4||Ne===0?r.timeThursday(ne):r.timeThursday.ceil(ne),f(ne.getFullYear()%1e4,ge,4)}function Le(ne){var ge=ne.getTimezoneOffset();return(ge>0?"-":(ge*=-1,"+"))+f(ge/60|0,"0",2)+f(ge%60,"0",2)}function De(ne,ge){return f(ne.getUTCDate(),ge,2)}function Ie(ne,ge){return f(ne.getUTCHours(),ge,2)}function qe(ne,ge){return f(ne.getUTCHours()%12||12,ge,2)}function Ze(ne,ge){return f(1+r.utcDay.count(r.utcYear(ne),ne),ge,3)}function Je(ne,ge){return f(ne.getUTCMilliseconds(),ge,3)}function Xe(ne,ge){return Je(ne,ge)+"000"}function Se(ne,ge){return f(ne.getUTCMonth()+1,ge,2)}function Fe(ne,ge){return f(ne.getUTCMinutes(),ge,2)}function er(ne,ge){return f(ne.getUTCSeconds(),ge,2)}function re(ne){var ge=ne.getUTCDay();return ge===0?7:ge}function xe(ne,ge){return f(r.utcSunday.count(r.utcYear(ne)-1,ne),ge,2)}function Ye(ne){var ge=ne.getUTCDay();return ge>=4||ge===0?r.utcThursday(ne):r.utcThursday.ceil(ne)}function vr(ne,ge){return ne=Ye(ne),f(r.utcThursday.count(r.utcYear(ne),ne)+(r.utcYear(ne).getUTCDay()===4),ge,2)}function Pe(ne){return ne.getUTCDay()}function me(ne,ge){return f(r.utcMonday.count(r.utcYear(ne)-1,ne),ge,2)}function Te(ne,ge){return f(ne.getUTCFullYear()%100,ge,2)}function Ue(ne,ge){return ne=Ye(ne),f(ne.getUTCFullYear()%100,ge,2)}function $e(ne,ge){return f(ne.getUTCFullYear()%1e4,ge,4)}function Oe(ne,ge){var Ne=ne.getUTCDay();return ne=Ne>=4||Ne===0?r.utcThursday(ne):r.utcThursday.ceil(ne),f(ne.getUTCFullYear()%1e4,ge,4)}function We(){return"+0000"}function ar(){return"%"}function or(ne){return+ne}function sr(ne){return Math.floor(+ne/1e3)}var Ee;Ke({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Ke(ne){return Ee=i(ne),e.timeFormat=Ee.format,e.timeParse=Ee.parse,e.utcFormat=Ee.utcFormat,e.utcParse=Ee.utcParse,Ee}var Be="%Y-%m-%dT%H:%M:%S.%LZ";function mr(ne){return ne.toISOString()}var yr=Date.prototype.toISOString?mr:e.utcFormat(Be);function ur(ne){var ge=new Date(ne);return isNaN(ge)?null:ge}var gr=+new Date("2000-01-01T00:00:00.000Z")?ur:e.utcParse(Be);e.isoFormat=yr,e.isoParse=gr,e.timeFormatDefaultLocale=Ke,e.timeFormatLocale=i,Object.defineProperty(e,"__esModule",{value:!0})})});var f5=z((O1,VS)=>{(function(e,r){typeof O1=="object"&&typeof VS!="undefined"?r(O1):(e=typeof globalThis!="undefined"?globalThis:e||self,r(e.d3=e.d3||{}))})(O1,(function(e){"use strict";function r(T){return Math.abs(T=Math.round(T))>=1e21?T.toLocaleString("en").replace(/,/g,""):T.toString(10)}function t(T,q){if((C=(T=q?T.toExponential(q-1):T.toExponential()).indexOf("e"))<0)return null;var C,E=T.slice(0,C);return[E.length>1?E[0]+E.slice(2):E,+T.slice(C+1)]}function a(T){return T=t(Math.abs(T)),T?T[1]:NaN}function n(T,q){return function(C,E){for(var P=C.length,R=[],N=0,I=T[0],O=0;P>0&&I>0&&(O+I+1>E&&(I=Math.max(1,E-O)),R.push(C.substring(P-=I,P+I)),!((O+=I+1)>E));)I=T[N=(N+1)%T.length];return R.reverse().join(q)}}function i(T){return function(q){return q.replace(/[0-9]/g,function(C){return T[+C]})}}var o=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function l(T){if(!(q=o.exec(T)))throw new Error("invalid format: "+T);var q;return new s({fill:q[1],align:q[2],sign:q[3],symbol:q[4],zero:q[5],width:q[6],comma:q[7],precision:q[8]&&q[8].slice(1),trim:q[9],type:q[10]})}l.prototype=s.prototype;function s(T){this.fill=T.fill===void 0?" ":T.fill+"",this.align=T.align===void 0?">":T.align+"",this.sign=T.sign===void 0?"-":T.sign+"",this.symbol=T.symbol===void 0?"":T.symbol+"",this.zero=!!T.zero,this.width=T.width===void 0?void 0:+T.width,this.comma=!!T.comma,this.precision=T.precision===void 0?void 0:+T.precision,this.trim=!!T.trim,this.type=T.type===void 0?"":T.type+""}s.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function u(T){e:for(var q=T.length,C=1,E=-1,P;C0&&(E=0);break}return E>0?T.slice(0,E)+T.slice(P+1):T}var f;function c(T,q){var C=t(T,q);if(!C)return T+"";var E=C[0],P=C[1],R=P-(f=Math.max(-8,Math.min(8,Math.floor(P/3)))*3)+1,N=E.length;return R===N?E:R>N?E+new Array(R-N+1).join("0"):R>0?E.slice(0,R)+"."+E.slice(R):"0."+new Array(1-R).join("0")+t(T,Math.max(0,q+R-1))[0]}function v(T,q){var C=t(T,q);if(!C)return T+"";var E=C[0],P=C[1];return P<0?"0."+new Array(-P).join("0")+E:E.length>P+1?E.slice(0,P+1)+"."+E.slice(P+1):E+new Array(P-E.length+2).join("0")}var d={"%":function(T,q){return(T*100).toFixed(q)},b:function(T){return Math.round(T).toString(2)},c:function(T){return T+""},d:r,e:function(T,q){return T.toExponential(q)},f:function(T,q){return T.toFixed(q)},g:function(T,q){return T.toPrecision(q)},o:function(T){return Math.round(T).toString(8)},p:function(T,q){return v(T*100,q)},r:v,s:c,X:function(T){return Math.round(T).toString(16).toUpperCase()},x:function(T){return Math.round(T).toString(16)}};function p(T){return T}var y=Array.prototype.map,m=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function b(T){var q=T.grouping===void 0||T.thousands===void 0?p:n(y.call(T.grouping,Number),T.thousands+""),C=T.currency===void 0?"":T.currency[0]+"",E=T.currency===void 0?"":T.currency[1]+"",P=T.decimal===void 0?".":T.decimal+"",R=T.numerals===void 0?p:i(y.call(T.numerals,String)),N=T.percent===void 0?"%":T.percent+"",I=T.minus===void 0?"-":T.minus+"",O=T.nan===void 0?"NaN":T.nan+"";function U(G){G=l(G);var V=G.fill,W=G.align,j=G.sign,J=G.symbol,te=G.zero,ae=G.width,se=G.comma,$=G.precision,fe=G.trim,ie=G.type;ie==="n"?(se=!0,ie="g"):d[ie]||($===void 0&&($=12),fe=!0,ie="g"),(te||V==="0"&&W==="=")&&(te=!0,V="0",W="=");var ue=J==="$"?C:J==="#"&&/[boxX]/.test(ie)?"0"+ie.toLowerCase():"",ce=J==="$"?E:/[%p]/.test(ie)?N:"",oe=d[ie],be=/[defgprs%]/.test(ie);$=$===void 0?6:/[gprs]/.test(ie)?Math.max(1,Math.min(21,$)):Math.max(0,Math.min(20,$));function Re(ye){var Ce=ue,Me=ce,Le,De,Ie;if(ie==="c")Me=oe(ye)+Me,ye="";else{ye=+ye;var qe=ye<0||1/ye<0;if(ye=isNaN(ye)?O:oe(Math.abs(ye),$),fe&&(ye=u(ye)),qe&&+ye==0&&j!=="+"&&(qe=!1),Ce=(qe?j==="("?j:I:j==="-"||j==="("?"":j)+Ce,Me=(ie==="s"?m[8+f/3]:"")+Me+(qe&&j==="("?")":""),be){for(Le=-1,De=ye.length;++LeIe||Ie>57){Me=(Ie===46?P+ye.slice(Le+1):ye.slice(Le))+Me,ye=ye.slice(0,Le);break}}}se&&!te&&(ye=q(ye,1/0));var Ze=Ce.length+ye.length+Me.length,Je=Ze>1)+Ce+ye+Me+Je.slice(Ze);break;default:ye=Je+Ce+ye+Me;break}return R(ye)}return Re.toString=function(){return G+""},Re}function Y(G,V){var W=U((G=l(G),G.type="f",G)),j=Math.max(-8,Math.min(8,Math.floor(a(V)/3)))*3,J=Math.pow(10,-j),te=m[8+j/3];return function(ae){return W(J*ae)+te}}return{format:U,formatPrefix:Y}}var A;w({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});function w(T){return A=b(T),e.format=A.format,e.formatPrefix=A.formatPrefix,A}function x(T){return Math.max(0,-a(Math.abs(T)))}function _(T,q){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(a(q)/3)))*3-a(Math.abs(T)))}function k(T,q){return T=Math.abs(T),q=Math.abs(q)-T,Math.max(0,a(q)-a(T))+1}e.FormatSpecifier=s,e.formatDefaultLocale=w,e.formatLocale=b,e.formatSpecifier=l,e.precisionFixed=x,e.precisionPrefix=_,e.precisionRound=k,Object.defineProperty(e,"__esModule",{value:!0})}))});var WS=z((uje,jS)=>{"use strict";jS.exports=function(e){for(var r=e.length,t,a=0;a13)&&t!==32&&t!==133&&t!==160&&t!==5760&&t!==6158&&(t<8192||t>8205)&&t!==8232&&t!==8233&&t!==8239&&t!==8287&&t!==8288&&t!==12288&&t!==65279)return!1;return!0}});var Br=z((fje,XS)=>{"use strict";var Kce=WS();XS.exports=function(e){var r=typeof e;if(r==="string"){var t=e;if(e=+e,e===0&&Kce(t))return!1}else if(r!=="number")return!1;return e-e<1}});var Zt={};qt(Zt,{ALMOST_EQUAL:()=>y0e,BADNUM:()=>c5,EPOCHJD:()=>m0e,FP_SAFE:()=>Qce,LOG_CLIP:()=>g0e,MINUS_SIGN:()=>b0e,ONEAVGMONTH:()=>l0e,ONEAVGQUARTER:()=>n0e,ONEAVGYEAR:()=>r0e,ONEDAY:()=>f0e,ONEHOUR:()=>c0e,ONEMAXMONTH:()=>o0e,ONEMAXQUARTER:()=>a0e,ONEMAXYEAR:()=>e0e,ONEMICROSEC:()=>p0e,ONEMILLI:()=>d0e,ONEMIN:()=>v0e,ONEMINMONTH:()=>s0e,ONEMINQUARTER:()=>i0e,ONEMINYEAR:()=>t0e,ONESEC:()=>h0e,ONEWEEK:()=>u0e});var c5,Qce,e0e,r0e,t0e,a0e,n0e,i0e,o0e,l0e,s0e,u0e,f0e,c0e,v0e,h0e,d0e,p0e,m0e,y0e,g0e,b0e,jt=St(()=>{"use strict";c5=void 0,Qce=Number.MAX_VALUE*1e-4,e0e=316224e5,r0e=315576e5,t0e=31536e6,a0e=79488e5,n0e=78894e5,i0e=76896e5,o0e=26784e5,l0e=26298e5,s0e=24192e5,u0e=6048e5,f0e=864e5,c0e=36e5,v0e=6e4,h0e=1e3,d0e=1,p0e=.001,m0e=24405875e-1,y0e=1-1e-6,g0e=10,b0e="\u2212"});var v5=z((H1,ZS)=>{(function(e,r){typeof H1=="object"&&typeof ZS!="undefined"?r(H1):(e=typeof globalThis!="undefined"?globalThis:e||self,r(e["base64-arraybuffer"]={}))})(H1,(function(e){"use strict";for(var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=typeof Uint8Array=="undefined"?[]:new Uint8Array(256),a=0;a>2],f+=r[(l[s]&3)<<4|l[s+1]>>4],f+=r[(l[s+1]&15)<<2|l[s+2]>>6],f+=r[l[s+2]&63];return u%3===2?f=f.substring(0,f.length-1)+"=":u%3===1&&(f=f.substring(0,f.length-2)+"=="),f},i=function(o){var l=o.length*.75,s=o.length,u,f=0,c,v,d,p;o[o.length-1]==="="&&(l--,o[o.length-2]==="="&&l--);var y=new ArrayBuffer(l),m=new Uint8Array(y);for(u=0;u>4,m[f++]=(v&15)<<4|d>>2,m[f++]=(d&3)<<6|p&63;return y};e.decode=i,e.encode=n,Object.defineProperty(e,"__esModule",{value:!0})}))});var Du=z((cje,$S)=>{"use strict";$S.exports=function(r){return window&&window.process&&window.process.versions?Object.prototype.toString.call(r)==="[object Object]":Object.prototype.toString.call(r)==="[object Object]"&&Object.getPrototypeOf(r).hasOwnProperty("hasOwnProperty")}});var Zn=z(Mo=>{"use strict";var x0e=v5().decode,_0e=Du(),h5=Array.isArray,w0e=ArrayBuffer,A0e=DataView;function JS(e){return w0e.isView(e)&&!(e instanceof A0e)}Mo.isTypedArray=JS;function U1(e){return h5(e)||JS(e)}Mo.isArrayOrTypedArray=U1;function T0e(e){return!U1(e[0])}Mo.isArray1D=T0e;Mo.ensureArray=function(e,r){return h5(e)||(e=[]),e.length=r,e};var Va={u1c:typeof Uint8ClampedArray=="undefined"?void 0:Uint8ClampedArray,i1:typeof Int8Array=="undefined"?void 0:Int8Array,u1:typeof Uint8Array=="undefined"?void 0:Uint8Array,i2:typeof Int16Array=="undefined"?void 0:Int16Array,u2:typeof Uint16Array=="undefined"?void 0:Uint16Array,i4:typeof Int32Array=="undefined"?void 0:Int32Array,u4:typeof Uint32Array=="undefined"?void 0:Uint32Array,f4:typeof Float32Array=="undefined"?void 0:Float32Array,f8:typeof Float64Array=="undefined"?void 0:Float64Array};Va.uint8c=Va.u1c;Va.uint8=Va.u1;Va.int8=Va.i1;Va.uint16=Va.u2;Va.int16=Va.i2;Va.uint32=Va.u4;Va.int32=Va.i4;Va.float32=Va.f4;Va.float64=Va.f8;function d5(e){return e.constructor===ArrayBuffer}Mo.isArrayBuffer=d5;Mo.decodeTypedArraySpec=function(e){var r=[],t=M0e(e),a=t.dtype,n=Va[a];if(!n)throw new Error('Error in dtype: "'+a+'"');var i=n.BYTES_PER_ELEMENT,o=t.bdata;d5(o)||(o=x0e(o));var l=t.shape===void 0?[o.byteLength/i]:(""+t.shape).split(",");l.reverse();var s=l.length,u,f,c=+l[0],v=i*c,d=0;if(s===1)r=new n(o);else if(s===2)for(u=+l[1],f=0;f{"use strict";var QS=Br(),m5=Zn().isArrayOrTypedArray;aq.exports=function(r,t){if(QS(t))t=String(t);else if(typeof t!="string"||t.slice(-4)==="[-1]")throw"bad property string";var a=t.split("."),n,i,o,l;for(l=0;l{"use strict";var wc=G1(),C0e=/^\w*$/,D0e=0,nq=1,Y1=2,iq=3,Eu=4;oq.exports=function(r,t,a,n){a=a||"name",n=n||"value";var i,o,l,s={};t&&t.length?(l=wc(r,t),o=l.get()):o=r,t=t||"";var u={};if(o)for(i=0;i2)return s[d]=s[d]|Y1,c.set(v,null);if(f){for(i=d;i{"use strict";var E0e=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,P0e=/^[^\.\[\]]+$/;sq.exports=function(e,r){for(;r;){var t=e.match(E0e);if(t)e=t[1];else if(e.match(P0e))e="";else throw new Error("bad relativeAttr call:"+[e,r]);if(r.charAt(0)==="^")r=r.slice(1);else break}return e&&r.charAt(0)!=="["?e+"."+r:e+r}});var V1=z((mje,fq)=>{"use strict";var R0e=Br();fq.exports=function(r,t){if(r>0)return Math.log(r)/Math.LN10;var a=Math.log(Math.min(t[0],t[1]))/Math.LN10;return R0e(a)||(a=Math.log(Math.max(t[0],t[1]))/Math.LN10-6),a}});var hq=z((yje,vq)=>{"use strict";var cq=Zn().isArrayOrTypedArray,Kv=Du();vq.exports=function e(r,t){for(var a in t){var n=t[a],i=r[a];if(i!==n)if(a.charAt(0)==="_"||typeof n=="function"){if(a in r)continue;r[a]=n}else if(cq(n)&&cq(i)&&Kv(n[0])){if(a==="customdata"||a==="ids")continue;for(var o=Math.min(n.length,i.length),l=0;lF0e,modHalf:()=>z0e});function F0e(e,r){let t=e%r;return t<0?t+r:t}function z0e(e,r){return Math.abs(e)>r/2?e-Math.round(e/r)*r:e}var Tc=St(()=>{"use strict"});var Mt=z(rh=>{"use strict";var dq=Du(),Qv=Array.isArray;function N0e(e,r){var t,a;for(t=0;t{"use strict";pq.exports=function(e){var r=e.variantValues,t=e.editType,a=e.colorEditType;a===void 0&&(a=t);var n={editType:t,valType:"integer",min:1,max:1e3,extras:["normal","bold"],dflt:"normal"};e.noNumericWeightValues&&(n.valType="enumerated",n.values=n.extras,n.extras=void 0,n.min=void 0,n.max=void 0);var i={family:{valType:"string",noBlank:!0,strict:!0,editType:t},size:{valType:"number",min:1,editType:t},color:{valType:"color",editType:a},weight:n,style:{editType:t,valType:"enumerated",values:["normal","italic"],dflt:"normal"},variant:e.noFontVariant?void 0:{editType:t,valType:"enumerated",values:r||["normal","small-caps","all-small-caps","all-petite-caps","petite-caps","unicase"],dflt:"normal"},textcase:e.noFontTextcase?void 0:{editType:t,valType:"enumerated",values:["normal","word caps","upper","lower"],dflt:"normal"},lineposition:e.noFontLineposition?void 0:{editType:t,valType:"flaglist",flags:["under","over","through"],extras:["none"],dflt:"none"},shadow:e.noFontShadow?void 0:{editType:t,valType:"string",dflt:e.autoShadowDflt?"auto":"none"},editType:t};return e.autoSize&&(i.size.dflt="auto"),e.autoColor&&(i.color.dflt="auto"),e.arrayOk&&(i.family.arrayOk=!0,i.weight.arrayOk=!0,i.style.arrayOk=!0,e.noFontVariant||(i.variant.arrayOk=!0),e.noFontTextcase||(i.textcase.arrayOk=!0),e.noFontLineposition||(i.lineposition.arrayOk=!0),e.noFontShadow||(i.shadow.arrayOk=!0),i.size.arrayOk=!0,i.color.arrayOk=!0),i}});var th={};qt(th,{HOVERARROWSIZE:()=>B0e,HOVERFONT:()=>U0e,HOVERFONTSIZE:()=>H0e,HOVERID:()=>Y0e,HOVERMINTIME:()=>G0e,HOVERTEXTPAD:()=>O0e,YANGLE:()=>I0e});var I0e,B0e,O0e,H0e,U0e,G0e,Y0e,ah=St(()=>{"use strict";I0e=60,B0e=6,O0e=3,H0e=13,U0e="Arial, sans-serif",G0e=50,Y0e="-hover"});var Mc=z((xje,gq)=>{"use strict";var mq=(ah(),ze(th)),yq=Ca(),y5=yq({editType:"none"});y5.family.dflt=mq.HOVERFONT;y5.size.dflt=mq.HOVERFONTSIZE;gq.exports={clickmode:{valType:"flaglist",flags:["event","select"],dflt:"event",editType:"plot",extras:["none"]},dragmode:{valType:"enumerated",values:["zoom","pan","select","lasso","drawclosedpath","drawopenpath","drawline","drawrect","drawcircle","orbit","turntable",!1],dflt:"zoom",editType:"modebar"},hovermode:{valType:"enumerated",values:["x","y","closest",!1,"x unified","y unified"],dflt:"closest",editType:"modebar"},hoversort:{valType:"enumerated",values:["trace","value descending","value ascending"],dflt:"trace",editType:"none"},hoversubplots:{valType:"enumerated",values:["single","overlaying","axis"],dflt:"overlaying",editType:"none"},hoveranywhere:{valType:"boolean",dflt:!1,editType:"none"},clickanywhere:{valType:"boolean",dflt:!1,editType:"none"},hoverdistance:{valType:"integer",min:-1,dflt:20,editType:"none"},spikedistance:{valType:"integer",min:-1,dflt:-1,editType:"none"},hoverlabel:{bgcolor:{valType:"color",editType:"none"},bordercolor:{valType:"color",editType:"none"},font:y5,grouptitlefont:yq({editType:"none"}),align:{valType:"enumerated",values:["left","right","auto"],dflt:"auto",editType:"none"},namelength:{valType:"integer",min:-1,dflt:15,editType:"none"},showarrow:{valType:"boolean",dflt:!0,editType:"none"},editType:"none"},selectdirection:{valType:"enumerated",values:["h","v","d","any"],dflt:"any",editType:"none"}}});var j1=z((_je,bq)=>{"use strict";var V0e=Ca(),nh=Mc().hoverlabel,ih=Mt().extendFlat;bq.exports={hoverlabel:{bgcolor:ih({},nh.bgcolor,{arrayOk:!0}),bordercolor:ih({},nh.bordercolor,{arrayOk:!0}),font:V0e({arrayOk:!0,editType:"none"}),align:ih({},nh.align,{arrayOk:!0}),namelength:ih({},nh.namelength,{arrayOk:!0}),showarrow:ih({},nh.showarrow),editType:"none"}}});var On=z((wje,xq)=>{"use strict";var j0e=Ca(),W0e=j1();xq.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes",_noTemplating:!0},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legend:{valType:"subplotid",dflt:"legend",editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},legendgrouptitle:{text:{valType:"string",dflt:"",editType:"style"},font:j0e({editType:"style"}),editType:"style"},legendrank:{valType:"number",dflt:1e3,editType:"style"},legendwidth:{valType:"number",min:0,editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",editType:"plot",anim:!0},ids:{valType:"data_array",editType:"calc",anim:!0},customdata:{valType:"data_array",editType:"calc"},meta:{valType:"any",arrayOk:!0,editType:"plot"},selectedpoints:{valType:"any",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:W0e.hoverlabel,uirevision:{valType:"any",editType:"none"}}});var vC=z((Lje,cC)=>{var u_=Object.defineProperty,X0e=Object.getOwnPropertyDescriptor,Z0e=Object.getOwnPropertyNames,$0e=Object.prototype.hasOwnProperty,J0e=(e,r)=>{for(var t in r)u_(e,t,{get:r[t],enumerable:!0})},K0e=(e,r,t,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Z0e(r))!$0e.call(e,n)&&n!==t&&u_(e,n,{get:()=>r[n],enumerable:!(a=X0e(r,n))||a.enumerable});return e},Q0e=e=>K0e(u_({},"__esModule",{value:!0}),e),Cq={};J0e(Cq,{a98:()=>Y2e,average:()=>Zve,averageAngle:()=>al,averageNumber:()=>Wq,blend:()=>Xde,blerp:()=>G5,clampChroma:()=>d2e,clampGamut:()=>z_,clampRgb:()=>h2e,colorsNamed:()=>Eq,convertA98ToXyz65:()=>Y5,convertCubehelixToRgb:()=>Vq,convertDlchToLab65:()=>rp,convertHsiToRgb:()=>rL,convertHslToRgb:()=>nL,convertHsvToRgb:()=>p_,convertHwbToRgb:()=>sL,convertItpToXyz65:()=>j5,convertJabToJch:()=>X5,convertJabToRgb:()=>__,convertJabToXyz65:()=>b_,convertJchToJab:()=>Z5,convertLab65ToDlch:()=>tp,convertLab65ToRgb:()=>hh,convertLab65ToXyz65:()=>v_,convertLabToLch:()=>zl,convertLabToRgb:()=>A_,convertLabToXyz50:()=>vp,convertLchToLab:()=>Nl,convertLchuvToLuv:()=>k_,convertLrgbToOklab:()=>S_,convertLrgbToRgb:()=>Bu,convertLuvToLchuv:()=>M_,convertLuvToXyz50:()=>np,convertOkhslToOklab:()=>K5,convertOkhsvToOklab:()=>e_,convertOklabToLrgb:()=>Pc,convertOklabToOkhsl:()=>J5,convertOklabToOkhsv:()=>Q5,convertOklabToRgb:()=>mh,convertP3ToXyz65:()=>r_,convertProphotoToXyz50:()=>n_,convertRec2020ToXyz65:()=>o_,convertRgbToCubehelix:()=>Yq,convertRgbToHsi:()=>tL,convertRgbToHsl:()=>iL,convertRgbToHsv:()=>m_,convertRgbToHwb:()=>uL,convertRgbToJab:()=>x_,convertRgbToLab:()=>T_,convertRgbToLab65:()=>dh,convertRgbToLrgb:()=>Iu,convertRgbToOklab:()=>ph,convertRgbToXyb:()=>NL,convertRgbToXyz50:()=>Ec,convertRgbToXyz65:()=>gs,convertRgbToYiq:()=>YL,convertXybToRgb:()=>IL,convertXyz50ToLab:()=>hp,convertXyz50ToLuv:()=>ap,convertXyz50ToProphoto:()=>a_,convertXyz50ToRgb:()=>Dc,convertXyz50ToXyz65:()=>UL,convertXyz65ToA98:()=>V5,convertXyz65ToItp:()=>W5,convertXyz65ToJab:()=>g_,convertXyz65ToLab65:()=>h_,convertXyz65ToP3:()=>t_,convertXyz65ToRec2020:()=>i_,convertXyz65ToRgb:()=>bs,convertXyz65ToXyz50:()=>HL,convertYiqToRgb:()=>VL,converter:()=>Bt,cubehelix:()=>V2e,differenceCie76:()=>Uve,differenceCie94:()=>Gve,differenceCiede2000:()=>Yve,differenceCmc:()=>Vve,differenceEuclidean:()=>Cc,differenceHueChroma:()=>vh,differenceHueNaive:()=>jq,differenceHueSaturation:()=>ch,differenceHyab:()=>jve,differenceItp:()=>Xve,differenceKotsarenkoRamos:()=>Wve,displayable:()=>F_,dlab:()=>j2e,dlch:()=>W2e,easingGamma:()=>oC,easingInOutSine:()=>U2e,easingMidpoint:()=>QL,easingSmootherstep:()=>O2e,easingSmoothstep:()=>N2e,easingSmoothstepInverse:()=>I2e,filterBrightness:()=>A2e,filterContrast:()=>T2e,filterDeficiencyDeuter:()=>F2e,filterDeficiencyProt:()=>R2e,filterDeficiencyTrit:()=>z2e,filterGrayscale:()=>S2e,filterHueRotate:()=>L2e,filterInvert:()=>q2e,filterSaturate:()=>k2e,filterSepia:()=>M2e,fixupAlpha:()=>Ba,fixupHueDecreasing:()=>Nve,fixupHueIncreasing:()=>zve,fixupHueLonger:()=>Fve,fixupHueShorter:()=>tl,formatCss:()=>Hde,formatHex:()=>Ude,formatHex8:()=>Gde,formatHsl:()=>Vde,formatRgb:()=>Yde,getMode:()=>Mn,hsi:()=>X2e,hsl:()=>Z2e,hsv:()=>$2e,hwb:()=>J2e,inGamut:()=>mp,interpolate:()=>a2e,interpolateWith:()=>rC,interpolateWithPremultipliedAlpha:()=>n2e,interpolatorLinear:()=>wr,interpolatorPiecewise:()=>Uq,interpolatorSplineBasis:()=>aC,interpolatorSplineBasisClosed:()=>nC,interpolatorSplineMonotone:()=>l2e,interpolatorSplineMonotone2:()=>s2e,interpolatorSplineMonotoneClosed:()=>u2e,interpolatorSplineNatural:()=>i2e,interpolatorSplineNaturalClosed:()=>o2e,itp:()=>K2e,jab:()=>Q2e,jch:()=>e1e,lab:()=>r1e,lab65:()=>t1e,lch:()=>a1e,lch65:()=>n1e,lchuv:()=>i1e,lerp:()=>Ru,lrgb:()=>o1e,luv:()=>l1e,mapAlphaDivide:()=>KL,mapAlphaMultiply:()=>JL,mapTransferGamma:()=>Qde,mapTransferLinear:()=>E_,mapper:()=>yh,modeA98:()=>Gq,modeCubehelix:()=>Xq,modeDlab:()=>Qq,modeDlch:()=>eL,modeHsi:()=>aL,modeHsl:()=>d_,modeHsv:()=>y_,modeHwb:()=>cL,modeItp:()=>dL,modeJab:()=>pL,modeJch:()=>mL,modeLab:()=>dp,modeLab65:()=>gL,modeLch:()=>pp,modeLch65:()=>xL,modeLchuv:()=>AL,modeLrgb:()=>TL,modeLuv:()=>ML,modeOkhsl:()=>SL,modeOkhsv:()=>qL,modeOklab:()=>CL,modeOklch:()=>EL,modeP3:()=>PL,modeProphoto:()=>RL,modeRec2020:()=>FL,modeRgb:()=>Nu,modeXyb:()=>BL,modeXyz50:()=>OL,modeXyz65:()=>GL,modeYiq:()=>jL,nearest:()=>y2e,okhsl:()=>s1e,okhsv:()=>u1e,oklab:()=>f1e,oklch:()=>c1e,p3:()=>v1e,parse:()=>Bq,parseHex:()=>Rq,parseHsl:()=>lL,parseHslLegacy:()=>oL,parseHwb:()=>fL,parseLab:()=>yL,parseLch:()=>bL,parseNamed:()=>Pq,parseOklab:()=>LL,parseOklch:()=>DL,parseRgb:()=>Oq,parseRgbLegacy:()=>Fq,parseTransparent:()=>Hq,prophoto:()=>h1e,random:()=>Kde,rec2020:()=>d1e,removeParser:()=>hve,rgb:()=>p1e,round:()=>WL,samples:()=>v2e,serializeHex:()=>D_,serializeHex8:()=>XL,serializeHsl:()=>$L,serializeRgb:()=>ZL,toGamut:()=>p2e,trilerp:()=>Tve,unlerp:()=>Ave,useMode:()=>Lt,useParser:()=>Nq,wcagContrast:()=>G2e,wcagLuminance:()=>s_,xyb:()=>m1e,xyz50:()=>y1e,xyz65:()=>g1e,yiq:()=>b1e});cC.exports=Q0e(Cq);var eve=(e,r)=>{if(typeof e=="number"){if(r===3)return{mode:"rgb",r:(e>>8&15|e>>4&240)/255,g:(e>>4&15|e&240)/255,b:(e&15|e<<4&240)/255};if(r===4)return{mode:"rgb",r:(e>>12&15|e>>8&240)/255,g:(e>>8&15|e>>4&240)/255,b:(e>>4&15|e&240)/255,alpha:(e&15|e<<4&240)/255};if(r===6)return{mode:"rgb",r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(r===8)return{mode:"rgb",r:(e>>24&255)/255,g:(e>>16&255)/255,b:(e>>8&255)/255,alpha:(e&255)/255}}},Dq=eve,rve={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Eq=rve,tve=e=>Dq(Eq[e.toLowerCase()],6),Pq=tve,ave=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,nve=e=>{let r;return(r=e.match(ave))?Dq(parseInt(r[1],16),r[1].length):void 0},Rq=nve,$n="([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)",Aje=`(?:${$n}|none)`,sh=`${$n}%`,Tje=`(?:${$n}%|none)`,f_=`(?:${$n}%|${$n})`,ive=`(?:${$n}%|${$n}|none)`,ove=`(?:${$n}(deg|grad|rad|turn)|${$n})`,Mje=`(?:${$n}(deg|grad|rad|turn)|${$n}|none)`,qc="\\s*,\\s*",kje=new RegExp("^"+ive+"$"),lve=new RegExp(`^rgba?\\(\\s*${$n}${qc}${$n}${qc}${$n}\\s*(?:,\\s*${f_}\\s*)?\\)$`),sve=new RegExp(`^rgba?\\(\\s*${sh}${qc}${sh}${qc}${sh}\\s*(?:,\\s*${f_}\\s*)?\\)$`),uve=e=>{let r={mode:"rgb"},t;if(t=e.match(lve))t[1]!==void 0&&(r.r=t[1]/255),t[2]!==void 0&&(r.g=t[2]/255),t[3]!==void 0&&(r.b=t[3]/255);else if(t=e.match(sve))t[1]!==void 0&&(r.r=t[1]/100),t[2]!==void 0&&(r.g=t[2]/100),t[3]!==void 0&&(r.b=t[3]/100);else return;return t[4]!==void 0?r.alpha=Math.max(0,Math.min(1,t[4]/100)):t[5]!==void 0&&(r.alpha=Math.max(0,Math.min(1,+t[5]))),r},Fq=uve,fve=(e,r)=>e===void 0?void 0:typeof e!="object"?Bq(e):e.mode!==void 0?e:r?Vt(At({},e),{mode:r}):void 0,ko=fve,cve=(e="rgb")=>r=>(r=ko(r,e))!==void 0?r.mode===e?r:rl[r.mode][e]?rl[r.mode][e](r):e==="rgb"?rl[r.mode].rgb(r):rl.rgb[e](rl[r.mode].rgb(r)):void 0,Bt=cve,rl={},zq={},Lc=[],c_={},vve=e=>e,Lt=e=>(rl[e.mode]=At(At({},rl[e.mode]),e.toMode),Object.keys(e.fromMode||{}).forEach(r=>{rl[r]||(rl[r]={}),rl[r][e.mode]=e.fromMode[r]}),e.ranges||(e.ranges={}),e.difference||(e.difference={}),e.channels.forEach(r=>{if(e.ranges[r]===void 0&&(e.ranges[r]=[0,1]),!e.interpolate[r])throw new Error(`Missing interpolator for: ${r}`);typeof e.interpolate[r]=="function"&&(e.interpolate[r]={use:e.interpolate[r]}),e.interpolate[r].fixup||(e.interpolate[r].fixup=vve)}),zq[e.mode]=e,(e.parse||[]).forEach(r=>{Nq(r,e.mode)}),Bt(e.mode)),Mn=e=>zq[e],Nq=(e,r)=>{if(typeof e=="string"){if(!r)throw new Error("'mode' required when 'parser' is a string");c_[e]=r}else typeof e=="function"&&Lc.indexOf(e)<0&&Lc.push(e)},hve=e=>{if(typeof e=="string")delete c_[e];else if(typeof e=="function"){let r=Lc.indexOf(e);r>0&&Lc.splice(r,1)}},H5=/[^\x00-\x7F]|[a-zA-Z_]/,dve=/[^\x00-\x7F]|[-\w]/,pr={Function:"function",Ident:"ident",Number:"number",Percentage:"percentage",ParenClose:")",None:"none",Hue:"hue",Alpha:"alpha"},Ur=0;function W1(e){let r=e[Ur],t=e[Ur+1];return r==="-"||r==="+"?/\d/.test(t)||t==="."&&/\d/.test(e[Ur+2]):r==="."?/\d/.test(t):/\d/.test(r)}function U5(e){if(Ur>=e.length)return!1;let r=e[Ur];if(H5.test(r))return!0;if(r==="-"){if(e.length-Ur<2)return!1;let t=e[Ur+1];return!!(t==="-"||H5.test(t))}return!1}var pve={deg:1,rad:180/Math.PI,grad:9/10,turn:360};function oh(e){let r="";if((e[Ur]==="-"||e[Ur]==="+")&&(r+=e[Ur++]),r+=X1(e),e[Ur]==="."&&/\d/.test(e[Ur+1])&&(r+=e[Ur++]+X1(e)),(e[Ur]==="e"||e[Ur]==="E")&&((e[Ur+1]==="-"||e[Ur+1]==="+")&&/\d/.test(e[Ur+2])?r+=e[Ur++]+e[Ur++]+X1(e):/\d/.test(e[Ur+1])&&(r+=e[Ur++]+X1(e))),U5(e)){let t=J1(e);return t==="deg"||t==="rad"||t==="turn"||t==="grad"?{type:pr.Hue,value:r*pve[t]}:void 0}return e[Ur]==="%"?(Ur++,{type:pr.Percentage,value:+r}):{type:pr.Number,value:+r}}function X1(e){let r="";for(;/\d/.test(e[Ur]);)r+=e[Ur++];return r}function J1(e){let r="";for(;Ur4)){if(t.length===4){if(t[3].type!==pr.Alpha)return;t[3]=t[3].value}return t.length===3&&t.push({type:pr.None,value:void 0}),t.every(n=>n.type!==pr.Alpha)?t:void 0}}function bve(e,r){e._i=0;let t=e[e._i++];if(!t||t.type!==pr.Function)return;let a=Iq(e,r);if(a)return a.unshift(t.value),a}var xve=e=>{if(typeof e!="string")return;let r=yve(e),t=r?bve(r,!0):void 0,a,n=0,i=Lc.length;for(;ne==="transparent"?{mode:"rgb",r:0,g:0,b:0,alpha:0}:void 0,Hq=wve,Ru=(e,r,t)=>e+t*(r-e),Ave=(e,r,t)=>(t-e)/(r-e),G5=(e,r,t,a,n,i)=>Ru(Ru(e,r,n),Ru(t,a,n),i),Tve=(e,r,t,a,n,i,o,l,s,u,f)=>Ru(G5(e,r,t,a,s,u),G5(n,i,o,l,s,u),f),Mve=e=>{let r=[];for(let t=0;tr=>{let t=Mve(r);return a=>{let n=a*t.length,i=a>=1?t.length-1:Math.max(Math.floor(n),0),o=t[i];return o===void 0?void 0:e(o[0],o[1],n-i)}},wr=Uq(Ru),Ba=e=>{let r=!1,t=e.map(a=>a!==void 0?(r=!0,a):1);return r?t:e},kve={mode:"rgb",channels:["r","g","b","alpha"],parse:[Oq,Rq,Fq,Pq,Hq,"srgb"],serialize:"srgb",interpolate:{r:wr,g:wr,b:wr,alpha:{use:wr,fixup:Ba}},gamut:!0,white:{r:1,g:1,b:1},black:{r:0,g:0,b:0}},Nu=kve,g5=(e=0)=>Math.pow(Math.abs(e),563/256)*Math.sign(e),Sve=e=>{let r=g5(e.r),t=g5(e.g),a=g5(e.b),n={mode:"xyz65",x:.5766690429101305*r+.1855582379065463*t+.1882286462349947*a,y:.297344975250536*r+.6273635662554661*t+.0752914584939979*a,z:.0270313613864123*r+.0706888525358272*t+.9913375368376386*a};return e.alpha!==void 0&&(n.alpha=e.alpha),n},Y5=Sve,b5=e=>Math.pow(Math.abs(e),256/563)*Math.sign(e),qve=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:"a98",r:b5(e*2.0415879038107465-r*.5650069742788597-.3447313507783297*t),g:b5(e*-.9692436362808798+r*1.8759675015077206+.0415550574071756*t),b:b5(e*.0134442806320312-r*.1183623922310184+1.0151749943912058*t)};return a!==void 0&&(n.alpha=a),n},V5=qve,x5=(e=0)=>{let r=Math.abs(e);return r<=.04045?e/12.92:(Math.sign(e)||1)*Math.pow((r+.055)/1.055,2.4)},Lve=({r:e,g:r,b:t,alpha:a})=>{let n={mode:"lrgb",r:x5(e),g:x5(r),b:x5(t)};return a!==void 0&&(n.alpha=a),n},Iu=Lve,Cve=e=>{let{r,g:t,b:a,alpha:n}=Iu(e),i={mode:"xyz65",x:.4123907992659593*r+.357584339383878*t+.1804807884018343*a,y:.2126390058715102*r+.715168678767756*t+.0721923153607337*a,z:.0193308187155918*r+.119194779794626*t+.9505321522496607*a};return n!==void 0&&(i.alpha=n),i},gs=Cve,_5=(e=0)=>{let r=Math.abs(e);return r>.0031308?(Math.sign(e)||1)*(1.055*Math.pow(r,1/2.4)-.055):e*12.92},Dve=({r:e,g:r,b:t,alpha:a},n="rgb")=>{let i={mode:n,r:_5(e),g:_5(r),b:_5(t)};return a!==void 0&&(i.alpha=a),i},Bu=Dve,Eve=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Bu({r:e*3.2409699419045226-r*1.537383177570094-.4986107602930034*t,g:e*-.9692436362808796+r*1.8759675015077204+.0415550574071756*t,b:e*.0556300796969936-r*.2039769588889765+1.0569715142428784*t});return a!==void 0&&(n.alpha=a),n},bs=Eve,Pve=Vt(At({},Nu),{mode:"a98",parse:["a98-rgb"],serialize:"a98-rgb",fromMode:{rgb:e=>V5(gs(e)),xyz65:V5},toMode:{rgb:e=>bs(Y5(e)),xyz65:Y5}}),Gq=Pve,Rve=e=>(e=e%360)<0?e+360:e,pn=Rve,op=(e,r)=>e.map((t,a,n)=>{if(t===void 0)return t;let i=pn(t);return a===0||e[a-1]===void 0?i:r(i-pn(n[a-1]))}).reduce((t,a)=>!t.length||a===void 0||t[t.length-1]===void 0?(t.push(a),t):(t.push(a+t[t.length-1]),t),[]),tl=e=>op(e,r=>Math.abs(r)<=180?r:r-360*Math.sign(r)),Fve=e=>op(e,r=>Math.abs(r)>=180||r===0?r:r-360*Math.sign(r)),zve=e=>op(e,r=>r>=0?r:r+360),Nve=e=>op(e,r=>r<=0?r:r-360),an=[-.14861,1.78277,-.29227,-.90649,1.97294,0],Ive=Math.PI/180,Bve=180/Math.PI,_q=an[3]*an[4],wq=an[1]*an[4],Aq=an[1]*an[2]-an[0]*an[3],Ove=({r:e,g:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(Aq*t+e*_q-r*wq)/(Aq+_q-wq),i=t-n,o=(an[4]*(r-n)-an[2]*i)/an[3],l={mode:"cubehelix",l:n,s:n===0||n===1?void 0:Math.sqrt(i*i+o*o)/(an[4]*n*(1-n))};return l.s&&(l.h=Math.atan2(o,i)*Bve-120),a!==void 0&&(l.alpha=a),l},Yq=Ove,Hve=({h:e,s:r,l:t,alpha:a})=>{let n={mode:"rgb"};e=(e===void 0?0:e+120)*Ive,t===void 0&&(t=0);let i=r===void 0?0:r*t*(1-t),o=Math.cos(e),l=Math.sin(e);return n.r=t+i*(an[0]*o+an[1]*l),n.g=t+i*(an[2]*o+an[3]*l),n.b=t+i*(an[4]*o+an[5]*l),a!==void 0&&(n.alpha=a),n},Vq=Hve,ch=(e,r)=>{if(e.h===void 0||r.h===void 0||!e.s||!r.s)return 0;let t=pn(e.h),a=pn(r.h),n=Math.sin((a-t+360)/2*Math.PI/180);return 2*Math.sqrt(e.s*r.s)*n},jq=(e,r)=>{if(e.h===void 0||r.h===void 0)return 0;let t=pn(e.h),a=pn(r.h);return Math.abs(a-t)>180?t-(a-360*Math.sign(a-t)):a-t},vh=(e,r)=>{if(e.h===void 0||r.h===void 0||!e.c||!r.c)return 0;let t=pn(e.h),a=pn(r.h),n=Math.sin((a-t+360)/2*Math.PI/180);return 2*Math.sqrt(e.c*r.c)*n},Cc=(e="rgb",r=[1,1,1,0])=>{let t=Mn(e),a=t.channels,n=t.difference,i=Bt(e);return(o,l)=>{let s=i(o),u=i(l);return Math.sqrt(a.reduce((f,c,v)=>{let d=n[c]?n[c](s,u):s[c]-u[c];return f+(r[v]||0)*Math.pow(isNaN(d)?0:d,2)},0))}},Uve=()=>Cc("lab65"),Gve=(e=1,r=.045,t=.015)=>{let a=Bt("lab65");return(n,i)=>{let o=a(n),l=a(i),s=o.l,u=o.a,f=o.b,c=Math.sqrt(u*u+f*f),v=l.l,d=l.a,p=l.b,y=Math.sqrt(d*d+p*p),m=Math.pow(s-v,2),b=Math.pow(c-y,2),A=Math.pow(u-d,2)+Math.pow(f-p,2)-b;return Math.sqrt(m/Math.pow(e,2)+b/Math.pow(1+r*c,2)+A/Math.pow(1+t*c,2))}},Yve=(e=1,r=1,t=1)=>{let a=Bt("lab65");return(n,i)=>{let o=a(n),l=a(i),s=o.l,u=o.a,f=o.b,c=Math.sqrt(u*u+f*f),v=l.l,d=l.a,p=l.b,y=Math.sqrt(d*d+p*p),m=(c+y)/2,b=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),A=u*(1+b),w=d*(1+b),x=Math.sqrt(A*A+f*f),_=Math.sqrt(w*w+p*p),k=Math.abs(A)+Math.abs(f)===0?0:Math.atan2(f,A);k+=(k<0)*2*Math.PI;let T=Math.abs(w)+Math.abs(p)===0?0:Math.atan2(p,w);T+=(T<0)*2*Math.PI;let q=v-s,C=_-x,E=x*_===0?0:T-k;E-=(E>Math.PI)*2*Math.PI,E+=(E<-Math.PI)*2*Math.PI;let P=2*Math.sqrt(x*_)*Math.sin(E/2),R=(s+v)/2,N=(x+_)/2,I;x*_===0?I=k+T:(I=(k+T)/2,I-=(Math.abs(k-T)>Math.PI)*Math.PI,I+=(I<0)*2*Math.PI);let O=Math.pow(R-50,2),U=1-.17*Math.cos(I-Math.PI/6)+.24*Math.cos(2*I)+.32*Math.cos(3*I+Math.PI/30)-.2*Math.cos(4*I-63*Math.PI/180),Y=1+.015*O/Math.sqrt(20+O),G=1+.045*N,V=1+.015*N*U,W=30*Math.PI/180*Math.exp(-1*Math.pow((180/Math.PI*I-275)/25,2)),j=2*Math.sqrt(Math.pow(N,7)/(Math.pow(N,7)+Math.pow(25,7))),J=-1*Math.sin(2*W)*j;return Math.sqrt(Math.pow(q/(e*Y),2)+Math.pow(C/(r*G),2)+Math.pow(P/(t*V),2)+J*C/(r*G)*P/(t*V))}},Vve=(e=1,r=1)=>{let t=Bt("lab65");return(a,n)=>{let i=t(a),o=i.l,l=i.a,s=i.b,u=Math.sqrt(l*l+s*s),f=Math.atan2(s,l);f=f+2*Math.PI*(f<0);let c=t(n),v=c.l,d=c.a,p=c.b,y=Math.sqrt(d*d+p*p),m=Math.pow(o-v,2),b=Math.pow(u-y,2),A=Math.pow(l-d,2)+Math.pow(s-p,2)-b,w=Math.sqrt(Math.pow(u,4)/(Math.pow(u,4)+1900)),x=f>=164/180*Math.PI&&f<=345/180*Math.PI?.56+Math.abs(.2*Math.cos(f+168/180*Math.PI)):.36+Math.abs(.4*Math.cos(f+35/180*Math.PI)),_=o<16?.511:.040975*o/(1+.01765*o),k=.0638*u/(1+.0131*u)+.638,T=k*(w*x+1-w);return Math.sqrt(m/Math.pow(e*_,2)+b/Math.pow(r*k,2)+A/Math.pow(T,2))}},jve=()=>{let e=Bt("lab65");return(r,t)=>{let a=e(r),n=e(t),i=a.l-n.l,o=a.a-n.a,l=a.b-n.b;return Math.abs(i)+Math.sqrt(o*o+l*l)}},Wve=()=>Cc("yiq",[.5053,.299,.1957]),Xve=()=>Cc("itp",[518400,129600,518400]),al=e=>{let r=e.reduce((a,n)=>{if(n!==void 0){let i=n*Math.PI/180;a.sin+=Math.sin(i),a.cos+=Math.cos(i)}return a},{sin:0,cos:0}),t=Math.atan2(r.sin,r.cos)*180/Math.PI;return t<0?360+t:t},Wq=e=>{let r=e.filter(t=>t!==void 0);return r.length?r.reduce((t,a)=>t+a,0)/r.length:void 0},w5=e=>typeof e=="function";function Zve(e,r="rgb",t){let a=Mn(r),n=e.map(Bt(r));return a.channels.reduce((i,o)=>{let l=n.map(s=>s[o]).filter(s=>s!==void 0);if(l.length){let s;w5(t)?s=t:t&&w5(t[o])?s=t[o]:a.average&&w5(a.average[o])?s=a.average[o]:s=Wq,i[o]=s(l,o)}return i},{mode:r})}var $ve={mode:"cubehelix",channels:["h","s","l","alpha"],parse:["--cubehelix"],serialize:"--cubehelix",ranges:{h:[0,360],s:[0,4.614],l:[0,1]},fromMode:{rgb:Yq},toMode:{rgb:Vq},interpolate:{h:{use:wr,fixup:tl},s:wr,l:wr,alpha:{use:wr,fixup:Ba}},difference:{h:ch},average:{h:al}},Xq=$ve,Jve=({l:e,a:r,b:t,alpha:a},n="lch")=>{r===void 0&&(r=0),t===void 0&&(t=0);let i=Math.sqrt(r*r+t*t),o={mode:n,l:e,c:i};return i&&(o.h=pn(Math.atan2(t,r)*180/Math.PI)),a!==void 0&&(o.alpha=a),o},zl=Jve,Kve=({l:e,c:r,h:t,alpha:a},n="lab")=>{t===void 0&&(t=0);let i={mode:n,l:e,a:r?r*Math.cos(t/180*Math.PI):0,b:r?r*Math.sin(t/180*Math.PI):0};return a!==void 0&&(i.alpha=a),i},Nl=Kve,Zq=Math.pow(29,3)/Math.pow(3,3),$q=Math.pow(6,3)/Math.pow(29,3),Ia={X:.3457/.3585,Y:1,Z:(1-.3457-.3585)/.3585},Sc={X:.3127/.329,Y:1,Z:(1-.3127-.329)/.329},Sje=Math.pow(29,3)/Math.pow(3,3),qje=Math.pow(6,3)/Math.pow(29,3),A5=e=>Math.pow(e,3)>$q?Math.pow(e,3):(116*e-16)/Zq,Qve=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(e+16)/116,i=r/500+n,o=n-t/200,l={mode:"xyz65",x:A5(i)*Sc.X,y:A5(n)*Sc.Y,z:A5(o)*Sc.Z};return a!==void 0&&(l.alpha=a),l},v_=Qve,ehe=e=>bs(v_(e)),hh=ehe,T5=e=>e>$q?Math.cbrt(e):(Zq*e+16)/116,rhe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=T5(e/Sc.X),i=T5(r/Sc.Y),o=T5(t/Sc.Z),l={mode:"lab65",l:116*i-16,a:500*(n-i),b:200*(i-o)};return a!==void 0&&(l.alpha=a),l},h_=rhe,the=e=>{let r=h_(gs(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},dh=the,K1=1,Jq=1,fh=26/180*Math.PI,Q1=Math.cos(fh),ep=Math.sin(fh),Kq=100/Math.log(139/100),ahe=({l:e,c:r,h:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:"lab65",l:(Math.exp(e*K1/Kq)-1)/.0039},i=(Math.exp(.0435*r*Jq*K1)-1)/.075,o=i*Math.cos(t/180*Math.PI-fh),l=i*Math.sin(t/180*Math.PI-fh);return n.a=o*Q1-l/.83*ep,n.b=o*ep+l/.83*Q1,a!==void 0&&(n.alpha=a),n},rp=ahe,nhe=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=r*Q1+t*ep,i=.83*(t*Q1-r*ep),o=Math.sqrt(n*n+i*i),l={mode:"dlch",l:Kq/K1*Math.log(1+.0039*e),c:Math.log(1+.075*o)/(.0435*Jq*K1)};return l.c&&(l.h=pn((Math.atan2(i,n)+fh)/Math.PI*180)),a!==void 0&&(l.alpha=a),l},tp=nhe,Tq=e=>rp(zl(e,"dlch")),Mq=e=>Nl(tp(e),"dlab"),ihe={mode:"dlab",parse:["--din99o-lab"],serialize:"--din99o-lab",toMode:{lab65:Tq,rgb:e=>hh(Tq(e))},fromMode:{lab65:Mq,rgb:e=>Mq(dh(e))},channels:["l","a","b","alpha"],ranges:{l:[0,100],a:[-40.09,45.501],b:[-40.469,44.344]},interpolate:{l:wr,a:wr,b:wr,alpha:{use:wr,fixup:Ba}}},Qq=ihe,ohe={mode:"dlch",parse:["--din99o-lch"],serialize:"--din99o-lch",toMode:{lab65:rp,dlab:e=>Nl(e,"dlab"),rgb:e=>hh(rp(e))},fromMode:{lab65:tp,dlab:e=>zl(e,"dlch"),rgb:e=>tp(dh(e))},channels:["l","c","h","alpha"],ranges:{l:[0,100],c:[0,51.484],h:[0,360]},interpolate:{l:wr,c:wr,h:{use:wr,fixup:tl},alpha:{use:wr,fixup:Ba}},difference:{h:vh},average:{h:al}},eL=ohe;function rL({h:e,s:r,i:t,alpha:a}){e=pn(e!==void 0?e:0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.abs(e/60%2-1),i;switch(Math.floor(e/60)){case 0:i={r:t*(1+r*(3/(2-n)-1)),g:t*(1+r*(3*(1-n)/(2-n)-1)),b:t*(1-r)};break;case 1:i={r:t*(1+r*(3*(1-n)/(2-n)-1)),g:t*(1+r*(3/(2-n)-1)),b:t*(1-r)};break;case 2:i={r:t*(1-r),g:t*(1+r*(3/(2-n)-1)),b:t*(1+r*(3*(1-n)/(2-n)-1))};break;case 3:i={r:t*(1-r),g:t*(1+r*(3*(1-n)/(2-n)-1)),b:t*(1+r*(3/(2-n)-1))};break;case 4:i={r:t*(1+r*(3*(1-n)/(2-n)-1)),g:t*(1-r),b:t*(1+r*(3/(2-n)-1))};break;case 5:i={r:t*(1+r*(3/(2-n)-1)),g:t*(1-r),b:t*(1+r*(3*(1-n)/(2-n)-1))};break;default:i={r:t*(1-r),g:t*(1-r),b:t*(1-r)}}return i.mode="rgb",a!==void 0&&(i.alpha=a),i}function tL({r:e,g:r,b:t,alpha:a}){e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.max(e,r,t),i=Math.min(e,r,t),o={mode:"hsi",s:e+r+t===0?0:1-3*i/(e+r+t),i:(e+r+t)/3};return n-i!==0&&(o.h=(n===e?(r-t)/(n-i)+(r{switch(r){case"deg":return+e;case"rad":return e/Math.PI*180;case"grad":return e/10*9;case"turn":return e*360}},uhe=she,fhe=new RegExp(`^hsla?\\(\\s*${ove}${qc}${sh}${qc}${sh}\\s*(?:,\\s*${f_}\\s*)?\\)$`),che=e=>{let r=e.match(fhe);if(!r)return;let t={mode:"hsl"};return r[3]!==void 0?t.h=+r[3]:r[1]!==void 0&&r[2]!==void 0&&(t.h=uhe(r[1],r[2])),r[4]!==void 0&&(t.s=Math.min(Math.max(0,r[4]/100),1)),r[5]!==void 0&&(t.l=Math.min(Math.max(0,r[5]/100),1)),r[6]!==void 0?t.alpha=Math.max(0,Math.min(1,r[6]/100)):r[7]!==void 0&&(t.alpha=Math.max(0,Math.min(1,+r[7]))),t},oL=che;function vhe(e,r){if(!r||r[0]!=="hsl"&&r[0]!=="hsla")return;let t={mode:"hsl"},[,a,n,i,o]=r;if(a.type!==pr.None){if(a.type===pr.Percentage)return;t.h=a.value}if(n.type!==pr.None){if(n.type===pr.Hue)return;t.s=n.value/100}if(i.type!==pr.None){if(i.type===pr.Hue)return;t.l=i.value/100}return o.type!==pr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===pr.Number?o.value:o.value/100))),t}var lL=vhe,hhe={mode:"hsl",toMode:{rgb:nL},fromMode:{rgb:iL},channels:["h","s","l","alpha"],ranges:{h:[0,360]},gamut:"rgb",parse:[lL,oL],serialize:e=>`hsl(${e.h!==void 0?e.h:"none"} ${e.s!==void 0?e.s*100+"%":"none"} ${e.l!==void 0?e.l*100+"%":"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{h:{use:wr,fixup:tl},s:wr,l:wr,alpha:{use:wr,fixup:Ba}},difference:{h:ch},average:{h:al}},d_=hhe;function p_({h:e,s:r,v:t,alpha:a}){e=pn(e!==void 0?e:0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.abs(e/60%2-1),i;switch(Math.floor(e/60)){case 0:i={r:t,g:t*(1-r*n),b:t*(1-r)};break;case 1:i={r:t*(1-r*n),g:t,b:t*(1-r)};break;case 2:i={r:t*(1-r),g:t,b:t*(1-r*n)};break;case 3:i={r:t*(1-r),g:t*(1-r*n),b:t};break;case 4:i={r:t*(1-r*n),g:t*(1-r),b:t};break;case 5:i={r:t,g:t*(1-r),b:t*(1-r*n)};break;default:i={r:t*(1-r),g:t*(1-r),b:t*(1-r)}}return i.mode="rgb",a!==void 0&&(i.alpha=a),i}function m_({r:e,g:r,b:t,alpha:a}){e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.max(e,r,t),i=Math.min(e,r,t),o={mode:"hsv",s:n===0?0:1-i/n,v:n};return n-i!==0&&(o.h=(n===e?(r-t)/(n-i)+(r1){let n=r+t;r/=n,t/=n}return p_({h:e,s:t===1?1:1-r/(1-t),v:1-t,alpha:a})}function uL(e){let r=m_(e);if(r===void 0)return;let t=r.s!==void 0?r.s:0,a=r.v!==void 0?r.v:0,n={mode:"hwb",w:(1-t)*a,b:1-a};return r.h!==void 0&&(n.h=r.h),r.alpha!==void 0&&(n.alpha=r.alpha),n}function phe(e,r){if(!r||r[0]!=="hwb")return;let t={mode:"hwb"},[,a,n,i,o]=r;if(a.type!==pr.None){if(a.type===pr.Percentage)return;t.h=a.value}if(n.type!==pr.None){if(n.type===pr.Hue)return;t.w=n.value/100}if(i.type!==pr.None){if(i.type===pr.Hue)return;t.b=i.value/100}return o.type!==pr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===pr.Number?o.value:o.value/100))),t}var fL=phe,mhe={mode:"hwb",toMode:{rgb:sL},fromMode:{rgb:uL},channels:["h","w","b","alpha"],ranges:{h:[0,360]},gamut:"rgb",parse:[fL],serialize:e=>`hwb(${e.h!==void 0?e.h:"none"} ${e.w!==void 0?e.w*100+"%":"none"} ${e.b!==void 0?e.b*100+"%":"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{h:{use:wr,fixup:tl},w:wr,b:wr,alpha:{use:wr,fixup:Ba}},difference:{h:jq},average:{h:al}},cL=mhe,vL=203,lp=.1593017578125,hL=78.84375,sp=.8359375,up=18.8515625,fp=18.6875;function M5(e){if(e<0)return 0;let r=Math.pow(e,1/hL);return 1e4*Math.pow(Math.max(0,r-sp)/(up-fp*r),1/lp)}function k5(e){if(e<0)return 0;let r=Math.pow(e/1e4,lp);return Math.pow((sp+up*r)/(1+fp*r),hL)}var S5=e=>Math.max(e/vL,0),yhe=({i:e,t:r,p:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=M5(e+.008609037037932761*r+.11102962500302593*t),i=M5(e-.00860903703793275*r-.11102962500302599*t),o=M5(e+.5600313357106791*r-.32062717498731885*t),l={mode:"xyz65",x:S5(2.070152218389422*n-1.3263473389671556*i+.2066510476294051*o),y:S5(.3647385209748074*n+.680566024947227*i-.0453045459220346*o),z:S5(-.049747207535812*n-.0492609666966138*i+1.1880659249923042*o)};return a!==void 0&&(l.alpha=a),l},j5=yhe,q5=(e=0)=>Math.max(e*vL,0),ghe=({x:e,y:r,z:t,alpha:a})=>{let n=q5(e),i=q5(r),o=q5(t),l=k5(.3592832590121217*n+.6976051147779502*i-.0358915932320289*o),s=k5(-.1920808463704995*n+1.1004767970374323*i+.0753748658519118*o),u=k5(.0070797844607477*n+.0748396662186366*i+.8433265453898765*o),f=.5*l+.5*s,c=1.61376953125*l-3.323486328125*s+1.709716796875*u,v=4.378173828125*l-4.24560546875*s-.132568359375*u,d={mode:"itp",i:f,t:c,p:v};return a!==void 0&&(d.alpha=a),d},W5=ghe,bhe={mode:"itp",channels:["i","t","p","alpha"],parse:["--ictcp"],serialize:"--ictcp",toMode:{xyz65:j5,rgb:e=>bs(j5(e))},fromMode:{xyz65:W5,rgb:e=>W5(gs(e))},ranges:{i:[0,.581],t:[-.369,.272],p:[-.164,.331]},interpolate:{i:wr,t:wr,p:wr,alpha:{use:wr,fixup:Ba}}},dL=bhe,xhe=134.03437499999998,_he=16295499532821565e-27,L5=e=>{if(e<0)return 0;let r=Math.pow(e/1e4,lp);return Math.pow((sp+up*r)/(1+fp*r),xhe)},C5=(e=0)=>Math.max(e*203,0),whe=({x:e,y:r,z:t,alpha:a})=>{e=C5(e),r=C5(r),t=C5(t);let n=1.15*e-.15*t,i=.66*r+.34*e,o=L5(.41478972*n+.579999*i+.014648*t),l=L5(-.20151*n+1.120649*i+.0531008*t),s=L5(-.0166008*n+.2648*i+.6684799*t),u=(o+l)/2,f={mode:"jab",j:.44*u/(1-.56*u)-_he,a:3.524*o-4.066708*l+.542708*s,b:.199076*o+1.096799*l-1.295875*s};return a!==void 0&&(f.alpha=a),f},g_=whe,Ahe=134.03437499999998,kq=16295499532821565e-27,D5=e=>{if(e<0)return 0;let r=Math.pow(e,1/Ahe);return 1e4*Math.pow((sp-r)/(fp*r-up),1/lp)},E5=e=>e/203,The=({j:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(e+kq)/(.44+.56*(e+kq)),i=D5(n+.13860504*r+.058047316*t),o=D5(n-.13860504*r-.058047316*t),l=D5(n-.096019242*r-.8118919*t),s={mode:"xyz65",x:E5(1.661373024652174*i-.914523081304348*o+.23136208173913045*l),y:E5(-.3250758611844533*i+1.571847026732543*o-.21825383453227928*l),z:E5(-.090982811*i-.31272829*o+1.5227666*l)};return a!==void 0&&(s.alpha=a),s},b_=The,Mhe=e=>{let r=g_(gs(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},x_=Mhe,khe=e=>bs(b_(e)),__=khe,She={mode:"jab",channels:["j","a","b","alpha"],parse:["--jzazbz"],serialize:"--jzazbz",fromMode:{rgb:x_,xyz65:g_},toMode:{rgb:__,xyz65:b_},ranges:{j:[0,.222],a:[-.109,.129],b:[-.185,.134]},interpolate:{j:wr,a:wr,b:wr,alpha:{use:wr,fixup:Ba}}},pL=She,qhe=({j:e,a:r,b:t,alpha:a})=>{r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.sqrt(r*r+t*t),i={mode:"jch",j:e,c:n};return n&&(i.h=pn(Math.atan2(t,r)*180/Math.PI)),a!==void 0&&(i.alpha=a),i},X5=qhe,Lhe=({j:e,c:r,h:t,alpha:a})=>{t===void 0&&(t=0);let n={mode:"jab",j:e,a:r?r*Math.cos(t/180*Math.PI):0,b:r?r*Math.sin(t/180*Math.PI):0};return a!==void 0&&(n.alpha=a),n},Z5=Lhe,Che={mode:"jch",parse:["--jzczhz"],serialize:"--jzczhz",toMode:{jab:Z5,rgb:e=>__(Z5(e))},fromMode:{rgb:e=>X5(x_(e)),jab:X5},channels:["j","c","h","alpha"],ranges:{j:[0,.221],c:[0,.19],h:[0,360]},interpolate:{h:{use:wr,fixup:tl},c:wr,j:wr,alpha:{use:wr,fixup:Ba}},difference:{h:vh},average:{h:al}},mL=Che,cp=Math.pow(29,3)/Math.pow(3,3),w_=Math.pow(6,3)/Math.pow(29,3),P5=e=>Math.pow(e,3)>w_?Math.pow(e,3):(116*e-16)/cp,Dhe=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(e+16)/116,i=r/500+n,o=n-t/200,l={mode:"xyz50",x:P5(i)*Ia.X,y:P5(n)*Ia.Y,z:P5(o)*Ia.Z};return a!==void 0&&(l.alpha=a),l},vp=Dhe,Ehe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Bu({r:e*3.1341359569958707-r*1.6173863321612538-.4906619460083532*t,g:e*-.978795502912089+r*1.916254567259524+.03344273116131949*t,b:e*.07195537988411677-r*.2289768264158322+1.405386058324125*t});return a!==void 0&&(n.alpha=a),n},Dc=Ehe,Phe=e=>Dc(vp(e)),A_=Phe,Rhe=e=>{let{r,g:t,b:a,alpha:n}=Iu(e),i={mode:"xyz50",x:.436065742824811*r+.3851514688337912*t+.14307845442264197*a,y:.22249319175623702*r+.7168870538238823*t+.06061979053616537*a,z:.013923904500943465*r+.09708128566574634*t+.7140993584005155*a};return n!==void 0&&(i.alpha=n),i},Ec=Rhe,R5=e=>e>w_?Math.cbrt(e):(cp*e+16)/116,Fhe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=R5(e/Ia.X),i=R5(r/Ia.Y),o=R5(t/Ia.Z),l={mode:"lab",l:116*i-16,a:500*(n-i),b:200*(i-o)};return a!==void 0&&(l.alpha=a),l},hp=Fhe,zhe=e=>{let r=hp(Ec(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},T_=zhe;function Nhe(e,r){if(!r||r[0]!=="lab")return;let t={mode:"lab"},[,a,n,i,o]=r;if(!(a.type===pr.Hue||n.type===pr.Hue||i.type===pr.Hue))return a.type!==pr.None&&(t.l=Math.min(Math.max(0,a.value),100)),n.type!==pr.None&&(t.a=n.type===pr.Number?n.value:n.value*125/100),i.type!==pr.None&&(t.b=i.type===pr.Number?i.value:i.value*125/100),o.type!==pr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===pr.Number?o.value:o.value/100))),t}var yL=Nhe,Ihe={mode:"lab",toMode:{xyz50:vp,rgb:A_},fromMode:{xyz50:hp,rgb:T_},channels:["l","a","b","alpha"],ranges:{l:[0,100],a:[-125,125],b:[-125,125]},parse:[yL],serialize:e=>`lab(${e.l!==void 0?e.l:"none"} ${e.a!==void 0?e.a:"none"} ${e.b!==void 0?e.b:"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{l:wr,a:wr,b:wr,alpha:{use:wr,fixup:Ba}}},dp=Ihe,Bhe=Vt(At({},dp),{mode:"lab65",parse:["--lab-d65"],serialize:"--lab-d65",toMode:{xyz65:v_,rgb:hh},fromMode:{xyz65:h_,rgb:dh},ranges:{l:[0,100],a:[-125,125],b:[-125,125]}}),gL=Bhe;function Ohe(e,r){if(!r||r[0]!=="lch")return;let t={mode:"lch"},[,a,n,i,o]=r;if(a.type!==pr.None){if(a.type===pr.Hue)return;t.l=Math.min(Math.max(0,a.value),100)}if(n.type!==pr.None&&(t.c=Math.max(0,n.type===pr.Number?n.value:n.value*150/100)),i.type!==pr.None){if(i.type===pr.Percentage)return;t.h=i.value}return o.type!==pr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===pr.Number?o.value:o.value/100))),t}var bL=Ohe,Hhe={mode:"lch",toMode:{lab:Nl,rgb:e=>A_(Nl(e))},fromMode:{rgb:e=>zl(T_(e)),lab:zl},channels:["l","c","h","alpha"],ranges:{l:[0,100],c:[0,150],h:[0,360]},parse:[bL],serialize:e=>`lch(${e.l!==void 0?e.l:"none"} ${e.c!==void 0?e.c:"none"} ${e.h!==void 0?e.h:"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{h:{use:wr,fixup:tl},c:wr,l:wr,alpha:{use:wr,fixup:Ba}},difference:{h:vh},average:{h:al}},pp=Hhe,Uhe=Vt(At({},pp),{mode:"lch65",parse:["--lch-d65"],serialize:"--lch-d65",toMode:{lab65:e=>Nl(e,"lab65"),rgb:e=>hh(Nl(e,"lab65"))},fromMode:{rgb:e=>zl(dh(e),"lch65"),lab65:e=>zl(e,"lch65")},ranges:{l:[0,100],c:[0,150],h:[0,360]}}),xL=Uhe,Ghe=({l:e,u:r,v:t,alpha:a})=>{r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.sqrt(r*r+t*t),i={mode:"lchuv",l:e,c:n};return n&&(i.h=pn(Math.atan2(t,r)*180/Math.PI)),a!==void 0&&(i.alpha=a),i},M_=Ghe,Yhe=({l:e,c:r,h:t,alpha:a})=>{t===void 0&&(t=0);let n={mode:"luv",l:e,u:r?r*Math.cos(t/180*Math.PI):0,v:r?r*Math.sin(t/180*Math.PI):0};return a!==void 0&&(n.alpha=a),n},k_=Yhe,_L=(e,r,t)=>4*e/(e+15*r+3*t),wL=(e,r,t)=>9*r/(e+15*r+3*t),Vhe=_L(Ia.X,Ia.Y,Ia.Z),jhe=wL(Ia.X,Ia.Y,Ia.Z),Whe=e=>e<=w_?cp*e:116*Math.cbrt(e)-16,Xhe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Whe(r/Ia.Y),i=_L(e,r,t),o=wL(e,r,t);!isFinite(i)||!isFinite(o)?n=i=o=0:(i=13*n*(i-Vhe),o=13*n*(o-jhe));let l={mode:"luv",l:n,u:i,v:o};return a!==void 0&&(l.alpha=a),l},ap=Xhe,Zhe=(e,r,t)=>4*e/(e+15*r+3*t),$he=(e,r,t)=>9*r/(e+15*r+3*t),Jhe=Zhe(Ia.X,Ia.Y,Ia.Z),Khe=$he(Ia.X,Ia.Y,Ia.Z),Qhe=({l:e,u:r,v:t,alpha:a})=>{if(e===void 0&&(e=0),e===0)return{mode:"xyz50",x:0,y:0,z:0};r===void 0&&(r=0),t===void 0&&(t=0);let n=r/(13*e)+Jhe,i=t/(13*e)+Khe,o=Ia.Y*(e<=8?e/cp:Math.pow((e+16)/116,3)),l=o*(9*n)/(4*i),s=o*(12-3*n-20*i)/(4*i),u={mode:"xyz50",x:l,y:o,z:s};return a!==void 0&&(u.alpha=a),u},np=Qhe,ede=e=>M_(ap(Ec(e))),rde=e=>Dc(np(k_(e))),tde={mode:"lchuv",toMode:{luv:k_,rgb:rde},fromMode:{rgb:ede,luv:M_},channels:["l","c","h","alpha"],parse:["--lchuv"],serialize:"--lchuv",ranges:{l:[0,100],c:[0,176.956],h:[0,360]},interpolate:{h:{use:wr,fixup:tl},c:wr,l:wr,alpha:{use:wr,fixup:Ba}},difference:{h:vh},average:{h:al}},AL=tde,ade=Vt(At({},Nu),{mode:"lrgb",toMode:{rgb:Bu},fromMode:{rgb:Iu},parse:["srgb-linear"],serialize:"srgb-linear"}),TL=ade,nde={mode:"luv",toMode:{xyz50:np,rgb:e=>Dc(np(e))},fromMode:{xyz50:ap,rgb:e=>ap(Ec(e))},channels:["l","u","v","alpha"],parse:["--luv"],serialize:"--luv",ranges:{l:[0,100],u:[-84.936,175.042],v:[-125.882,87.243]},interpolate:{l:wr,u:wr,v:wr,alpha:{use:wr,fixup:Ba}}},ML=nde,ide=({r:e,g:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.cbrt(.412221469470763*e+.5363325372617348*r+.0514459932675022*t),i=Math.cbrt(.2119034958178252*e+.6806995506452344*r+.1073969535369406*t),o=Math.cbrt(.0883024591900564*e+.2817188391361215*r+.6299787016738222*t),l={mode:"oklab",l:.210454268309314*n+.7936177747023054*i-.0040720430116193*o,a:1.9779985324311684*n-2.42859224204858*i+.450593709617411*o,b:.0259040424655478*n+.7827717124575296*i-.8086757549230774*o};return a!==void 0&&(l.alpha=a),l},S_=ide,ode=e=>{let r=S_(Iu(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},ph=ode,lde=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.pow(e+.3963377773761749*r+.2158037573099136*t,3),i=Math.pow(e-.1055613458156586*r-.0638541728258133*t,3),o=Math.pow(e-.0894841775298119*r-1.2914855480194092*t,3),l={mode:"lrgb",r:4.076741636075957*n-3.3077115392580616*i+.2309699031821044*o,g:-1.2684379732850317*n+2.6097573492876887*i-.3413193760026573*o,b:-.0041960761386756*n-.7034186179359362*i+1.7076146940746117*o};return a!==void 0&&(l.alpha=a),l},Pc=lde,sde=e=>Bu(Pc(e)),mh=sde;function $5(e){let a=1.170873786407767;return .5*(a*e-.206+Math.sqrt((a*e-.206)*(a*e-.206)+4*.03*a*e))}function ip(e){return(e*e+.206*e)/(1.170873786407767*(e+.03))}function ude(e,r){let t,a,n,i,o,l,s,u;-1.88170328*e-.80936493*r>1?(t=1.19086277,a=1.76576728,n=.59662641,i=.75515197,o=.56771245,l=4.0767416621,s=-3.3077115913,u=.2309699292):1.81444104*e-1.19445276*r>1?(t=.73956515,a=-.45954404,n=.08285427,i=.1254107,o=.14503204,l=-1.2684380046,s=2.6097574011,u=-.3413193965):(t=1.35733652,a=-.00915799,n=-1.1513021,i=-.50559606,o=.00692167,l=-.0041960863,s=-.7034186147,u=1.707614701);let f=t+a*e+n*r+i*e*e+o*e*r,c=.3963377774*e+.2158037573*r,v=-.1055613458*e-.0638541728*r,d=-.0894841775*e-1.291485548*r;{let p=1+f*c,y=1+f*v,m=1+f*d,b=p*p*p,A=y*y*y,w=m*m*m,x=3*c*p*p,_=3*v*y*y,k=3*d*m*m,T=6*c*c*p,q=6*v*v*y,C=6*d*d*m,E=l*b+s*A+u*w,P=l*x+s*_+u*k,R=l*T+s*q+u*C;f=f-E*P/(P*P-.5*E*R)}return f}function q_(e,r){let t=ude(e,r),a=Pc({l:1,a:t*e,b:t*r}),n=Math.cbrt(1/Math.max(a.r,a.g,a.b)),i=n*t;return[n,i]}function fde(e,r,t,a,n,i=null){i||(i=q_(e,r));let o;if((t-n)*i[1]-(i[0]-n)*a<=0)o=i[1]*n/(a*i[0]+i[1]*(n-t));else{o=i[1]*(n-1)/(a*(i[0]-1)+i[1]*(n-t));{let l=t-n,s=a,u=.3963377774*e+.2158037573*r,f=-.1055613458*e-.0638541728*r,c=-.0894841775*e-1.291485548*r,v=l+s*u,d=l+s*f,p=l+s*c;{let y=n*(1-o)+o*t,m=o*a,b=y+m*u,A=y+m*f,w=y+m*c,x=b*b*b,_=A*A*A,k=w*w*w,T=3*v*b*b,q=3*d*A*A,C=3*p*w*w,E=6*v*v*b,P=6*d*d*A,R=6*p*p*w,N=4.0767416621*x-3.3077115913*_+.2309699292*k-1,I=4.0767416621*T-3.3077115913*q+.2309699292*C,O=4.0767416621*E-3.3077115913*P+.2309699292*R,U=I/(I*I-.5*N*O),Y=-N*U,G=-1.2684380046*x+2.6097574011*_-.3413193965*k-1,V=-1.2684380046*T+2.6097574011*q-.3413193965*C,W=-1.2684380046*E+2.6097574011*P-.3413193965*R,j=V/(V*V-.5*G*W),J=-G*j,te=-.0041960863*x-.7034186147*_+1.707614701*k-1,ae=-.0041960863*T-.7034186147*q+1.707614701*C,se=-.0041960863*E-.7034186147*P+1.707614701*R,$=ae/(ae*ae-.5*te*se),fe=-te*$;Y=U>=0?Y:1e6,J=j>=0?J:1e6,fe=$>=0?fe:1e6,o+=Math.min(Y,Math.min(J,fe))}}}return o}function L_(e,r,t=null){t||(t=q_(e,r));let a=t[0],n=t[1];return[n/a,n/(1-a)]}function kL(e,r,t){let a=q_(r,t),n=fde(r,t,e,1,e,a),i=L_(r,t,a),o=.11516993+1/(7.4477897+4.1590124*t+r*(-2.19557347+1.75198401*t+r*(-2.13704948-10.02301043*t+r*(-4.24894561+5.38770819*t+4.69891013*r)))),l=.11239642+1/(1.6132032-.68124379*t+r*(.40370612+.90148123*t+r*(-.27087943+.6122399*t+r*(.00299215-.45399568*t-.14661872*r)))),s=n/Math.min(e*i[0],(1-e)*i[1]),u=e*o,f=(1-e)*l,c=.9*s*Math.sqrt(Math.sqrt(1/(1/(u*u*u*u)+1/(f*f*f*f))));return u=e*.4,f=(1-e)*.8,[Math.sqrt(1/(1/(u*u)+1/(f*f))),c,n]}function J5(e){let r=e.l!==void 0?e.l:0,t=e.a!==void 0?e.a:0,a=e.b!==void 0?e.b:0,n={mode:"okhsl",l:$5(r)};e.alpha!==void 0&&(n.alpha=e.alpha);let i=Math.sqrt(t*t+a*a);if(!i)return n.s=0,n;let[o,l,s]=kL(r,t/i,a/i),u;if(iJ5(ph(e))},toMode:{oklab:K5,rgb:e=>mh(K5(e))}}),SL=cde;function Q5(e){let r=e.l!==void 0?e.l:0,t=e.a!==void 0?e.a:0,a=e.b!==void 0?e.b:0,n=Math.sqrt(t*t+a*a),i=n?t/n:1,o=n?a/n:1,[l,s]=L_(i,o),u=.5,f=1-u/l,c=s/(n+r*s),v=c*r,d=c*n,p=ip(v),y=d*p/v,m=Pc({l:p,a:i*y,b:o*y}),b=Math.cbrt(1/Math.max(m.r,m.g,m.b,0));r=r/b,n=n/b*$5(r)/r,r=$5(r);let A={mode:"okhsv",s:n?(u+s)*d/(s*u+s*f*d):0,v:r?r/v:0};return A.s&&(A.h=pn(Math.atan2(a,t)*180/Math.PI)),e.alpha!==void 0&&(A.alpha=e.alpha),A}function e_(e){let r={mode:"oklab"};e.alpha!==void 0&&(r.alpha=e.alpha);let t=e.h!==void 0?e.h:0,a=e.s!==void 0?e.s:0,n=e.v!==void 0?e.v:0,i=Math.cos(t/180*Math.PI),o=Math.sin(t/180*Math.PI),[l,s]=L_(i,o),u=.5,f=1-u/l,c=1-a*u/(u+s-s*f*a),v=a*s*u/(u+s-s*f*a),d=ip(c),p=v*d/c,y=Pc({l:d,a:i*p,b:o*p}),m=Math.cbrt(1/Math.max(y.r,y.g,y.b,0)),b=ip(n*c),A=v*b/c;return r.l=b*m,r.a=A*i*m,r.b=A*o*m,r}var vde=Vt(At({},y_),{mode:"okhsv",channels:["h","s","v","alpha"],parse:["--okhsv"],serialize:"--okhsv",fromMode:{oklab:Q5,rgb:e=>Q5(ph(e))},toMode:{oklab:e_,rgb:e=>mh(e_(e))}}),qL=vde;function hde(e,r){if(!r||r[0]!=="oklab")return;let t={mode:"oklab"},[,a,n,i,o]=r;if(!(a.type===pr.Hue||n.type===pr.Hue||i.type===pr.Hue))return a.type!==pr.None&&(t.l=Math.min(Math.max(0,a.type===pr.Number?a.value:a.value/100),1)),n.type!==pr.None&&(t.a=n.type===pr.Number?n.value:n.value*.4/100),i.type!==pr.None&&(t.b=i.type===pr.Number?i.value:i.value*.4/100),o.type!==pr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===pr.Number?o.value:o.value/100))),t}var LL=hde,dde=Vt(At({},dp),{mode:"oklab",toMode:{lrgb:Pc,rgb:mh},fromMode:{lrgb:S_,rgb:ph},ranges:{l:[0,1],a:[-.4,.4],b:[-.4,.4]},parse:[LL],serialize:e=>`oklab(${e.l!==void 0?e.l:"none"} ${e.a!==void 0?e.a:"none"} ${e.b!==void 0?e.b:"none"}${e.alpha<1?` / ${e.alpha}`:""})`}),CL=dde;function pde(e,r){if(!r||r[0]!=="oklch")return;let t={mode:"oklch"},[,a,n,i,o]=r;if(a.type!==pr.None){if(a.type===pr.Hue)return;t.l=Math.min(Math.max(0,a.type===pr.Number?a.value:a.value/100),1)}if(n.type!==pr.None&&(t.c=Math.max(0,n.type===pr.Number?n.value:n.value*.4/100)),i.type!==pr.None){if(i.type===pr.Percentage)return;t.h=i.value}return o.type!==pr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===pr.Number?o.value:o.value/100))),t}var DL=pde,mde=Vt(At({},pp),{mode:"oklch",toMode:{oklab:e=>Nl(e,"oklab"),rgb:e=>mh(Nl(e,"oklab"))},fromMode:{rgb:e=>zl(ph(e),"oklch"),oklab:e=>zl(e,"oklch")},parse:[DL],serialize:e=>`oklch(${e.l!==void 0?e.l:"none"} ${e.c!==void 0?e.c:"none"} ${e.h!==void 0?e.h:"none"}${e.alpha<1?` / ${e.alpha}`:""})`,ranges:{l:[0,1],c:[0,.4],h:[0,360]}}),EL=mde,yde=e=>{let{r,g:t,b:a,alpha:n}=Iu(e),i={mode:"xyz65",x:.486570948648216*r+.265667693169093*t+.1982172852343625*a,y:.2289745640697487*r+.6917385218365062*t+.079286914093745*a,z:0*r+.0451133818589026*t+1.043944368900976*a};return n!==void 0&&(i.alpha=n),i},r_=yde,gde=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Bu({r:e*2.4934969119414263-r*.9313836179191242-.402710784450717*t,g:e*-.8294889695615749+r*1.7626640603183465+.0236246858419436*t,b:e*.0358458302437845-r*.0761723892680418+.9568845240076871*t},"p3");return a!==void 0&&(n.alpha=a),n},t_=gde,bde=Vt(At({},Nu),{mode:"p3",parse:["display-p3"],serialize:"display-p3",fromMode:{rgb:e=>t_(gs(e)),xyz65:t_},toMode:{rgb:e=>bs(r_(e)),xyz65:r_}}),PL=bde,F5=e=>{let r=Math.abs(e);return r>=1/512?Math.sign(e)*Math.pow(r,1/1.8):16*e},xde=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:"prophoto",r:F5(e*1.3457868816471585-r*.2555720873797946-.0511018649755453*t),g:F5(e*-.5446307051249019+r*1.5082477428451466+.0205274474364214*t),b:F5(e*0+r*0+1.2119675456389452*t)};return a!==void 0&&(n.alpha=a),n},a_=xde,z5=(e=0)=>{let r=Math.abs(e);return r>=16/512?Math.sign(e)*Math.pow(r,1.8):e/16},_de=e=>{let r=z5(e.r),t=z5(e.g),a=z5(e.b),n={mode:"xyz50",x:.7977666449006423*r+.1351812974005331*t+.0313477341283922*a,y:.2880748288194013*r+.7118352342418731*t+899369387256e-16*a,z:0*r+0*t+.8251046025104602*a};return e.alpha!==void 0&&(n.alpha=e.alpha),n},n_=_de,wde=Vt(At({},Nu),{mode:"prophoto",parse:["prophoto-rgb"],serialize:"prophoto-rgb",fromMode:{xyz50:a_,rgb:e=>a_(Ec(e))},toMode:{xyz50:n_,rgb:e=>Dc(n_(e))}}),RL=wde,Sq=1.09929682680944,Ade=.018053968510807,N5=e=>{let r=Math.abs(e);return r>Ade?(Math.sign(e)||1)*(Sq*Math.pow(r,.45)-(Sq-1)):4.5*e},Tde=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:"rec2020",r:N5(e*1.7166511879712683-r*.3556707837763925-.2533662813736599*t),g:N5(e*-.6666843518324893+r*1.6164812366349395+.0157685458139111*t),b:N5(e*.0176398574453108-r*.0427706132578085+.9421031212354739*t)};return a!==void 0&&(n.alpha=a),n},i_=Tde,qq=1.09929682680944,Mde=.018053968510807,I5=(e=0)=>{let r=Math.abs(e);return r{let r=I5(e.r),t=I5(e.g),a=I5(e.b),n={mode:"xyz65",x:.6369580483012911*r+.1446169035862083*t+.1688809751641721*a,y:.262700212011267*r+.6779980715188708*t+.059301716469862*a,z:0*r+.0280726930490874*t+1.0609850577107909*a};return e.alpha!==void 0&&(n.alpha=e.alpha),n},o_=kde,Sde=Vt(At({},Nu),{mode:"rec2020",fromMode:{xyz65:i_,rgb:e=>i_(gs(e))},toMode:{xyz65:o_,rgb:e=>bs(o_(e))},parse:["rec2020"],serialize:"rec2020"}),FL=Sde,Fu=.0037930732552754493,zL=Math.cbrt(Fu),B5=e=>Math.cbrt(e)-zL,qde=e=>{let{r,g:t,b:a,alpha:n}=Iu(e),i=B5(.3*r+.622*t+.078*a+Fu),o=B5(.23*r+.692*t+.078*a+Fu),l=B5(.2434226892454782*r+.2047674442449682*t+.5518098665095535*a+Fu),s={mode:"xyb",x:(i-o)/2,y:(i+o)/2,b:l-(i+o)/2};return n!==void 0&&(s.alpha=n),s},NL=qde,O5=e=>Math.pow(e+zL,3),Lde=({x:e,y:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=O5(e+r)-Fu,i=O5(r-e)-Fu,o=O5(t+r)-Fu,l=Bu({r:11.031566904639861*n-9.866943908131562*i-.16462299650829934*o,g:-3.2541473810744237*n+4.418770377582723*i-.16462299650829934*o,b:-3.6588512867136815*n+2.7129230459360922*i+1.9459282407775895*o});return a!==void 0&&(l.alpha=a),l},IL=Lde,Cde={mode:"xyb",channels:["x","y","b","alpha"],parse:["--xyb"],serialize:"--xyb",toMode:{rgb:IL},fromMode:{rgb:NL},ranges:{x:[-.0154,.0281],y:[0,.8453],b:[-.2778,.388]},interpolate:{x:wr,y:wr,b:wr,alpha:{use:wr,fixup:Ba}}},BL=Cde,Dde={mode:"xyz50",parse:["xyz-d50"],serialize:"xyz-d50",toMode:{rgb:Dc,lab:hp},fromMode:{rgb:Ec,lab:vp},channels:["x","y","z","alpha"],ranges:{x:[0,.964],y:[0,.999],z:[0,.825]},interpolate:{x:wr,y:wr,z:wr,alpha:{use:wr,fixup:Ba}}},OL=Dde,Ede=e=>{let{x:r,y:t,z:a,alpha:n}=e;r===void 0&&(r=0),t===void 0&&(t=0),a===void 0&&(a=0);let i={mode:"xyz50",x:1.0479298208405488*r+.0229467933410191*t-.0501922295431356*a,y:.0296278156881593*r+.990434484573249*t-.0170738250293851*a,z:-.0092430581525912*r+.0150551448965779*t+.7518742899580008*a};return n!==void 0&&(i.alpha=n),i},HL=Ede,Pde=e=>{let{x:r,y:t,z:a,alpha:n}=e;r===void 0&&(r=0),t===void 0&&(t=0),a===void 0&&(a=0);let i={mode:"xyz65",x:.9554734527042182*r-.0230985368742614*t+.0632593086610217*a,y:-.0283697069632081*r+1.0099954580058226*t+.021041398966943*a,z:.0123140016883199*r-.0205076964334779*t+1.3303659366080753*a};return n!==void 0&&(i.alpha=n),i},UL=Pde,Rde={mode:"xyz65",toMode:{rgb:bs,xyz50:HL},fromMode:{rgb:gs,xyz50:UL},ranges:{x:[0,.95],y:[0,1],z:[0,1.088]},channels:["x","y","z","alpha"],parse:["xyz","xyz-d65"],serialize:"xyz-d65",interpolate:{x:wr,y:wr,z:wr,alpha:{use:wr,fixup:Ba}}},GL=Rde,Fde=({r:e,g:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:"yiq",y:.29889531*e+.58662247*r+.11448223*t,i:.59597799*e-.2741761*r-.32180189*t,q:.21147017*e-.52261711*r+.31114694*t};return a!==void 0&&(n.alpha=a),n},YL=Fde,zde=({y:e,i:r,q:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:"rgb",r:e+.95608445*r+.6208885*t,g:e-.27137664*r-.6486059*t,b:e-1.10561724*r+1.70250126*t};return a!==void 0&&(n.alpha=a),n},VL=zde,Nde={mode:"yiq",toMode:{rgb:VL},fromMode:{rgb:YL},channels:["y","i","q","alpha"],parse:["--yiq"],serialize:"--yiq",ranges:{i:[-.595,.595],q:[-.522,.522]},interpolate:{y:wr,i:wr,q:wr,alpha:{use:wr,fixup:Ba}}},jL=Nde,Ide=(e,r)=>Math.round(e*(r=Math.pow(10,r)))/r,Bde=(e=4)=>r=>typeof r=="number"?Ide(r,e):r,WL=Bde,lh=WL(2),uh=e=>Math.max(0,Math.min(1,e||0)),zu=e=>Math.round(uh(e)*255),C_=Bt("rgb"),Ode=Bt("hsl"),D_=e=>{if(e===void 0)return;let r=zu(e.r),t=zu(e.g),a=zu(e.b);return"#"+(1<<24|r<<16|t<<8|a).toString(16).slice(1)},XL=e=>{if(e===void 0)return;let r=zu(e.alpha!==void 0?e.alpha:1);return D_(e)+(256|r).toString(16).slice(1)},ZL=e=>{if(e===void 0)return;let r=zu(e.r),t=zu(e.g),a=zu(e.b);return e.alpha===void 0||e.alpha===1?`rgb(${r}, ${t}, ${a})`:`rgba(${r}, ${t}, ${a}, ${lh(uh(e.alpha))})`},$L=e=>{if(e===void 0)return;let r=lh(e.h||0),t=lh(uh(e.s)*100)+"%",a=lh(uh(e.l)*100)+"%";return e.alpha===void 0||e.alpha===1?`hsl(${r}, ${t}, ${a})`:`hsla(${r}, ${t}, ${a}, ${lh(uh(e.alpha))})`},Hde=e=>{let r=ko(e);if(!r)return;let t=Mn(r.mode);if(!t.serialize||typeof t.serialize=="string"){let a=`color(${t.serialize||`--${r.mode}`} `;return t.channels.forEach((n,i)=>{n!=="alpha"&&(a+=(i?" ":"")+(r[n]!==void 0?r[n]:"none"))}),r.alpha!==void 0&&r.alpha<1&&(a+=` / ${r.alpha}`),a+")"}if(typeof t.serialize=="function")return t.serialize(r)},Ude=e=>D_(C_(e)),Gde=e=>XL(C_(e)),Yde=e=>ZL(C_(e)),Vde=e=>$L(Ode(e)),jde={normal:(e,r)=>r,multiply:(e,r)=>e*r,screen:(e,r)=>e+r-e*r,"hard-light":(e,r)=>r<.5?e*2*r:2*r*(1-e)-1,overlay:(e,r)=>e<.5?r*2*e:2*e*(1-r)-1,darken:(e,r)=>Math.min(e,r),lighten:(e,r)=>Math.max(e,r),"color-dodge":(e,r)=>e===0?0:r===1?1:Math.min(1,e/(1-r)),"color-burn":(e,r)=>e===1?1:r===0?0:1-Math.min(1,(1-e)/r),"soft-light":(e,r)=>r<.5?e-(1-2*r)*e*(1-e):e+(2*r-1)*((e<.25?((16*e-12)*e+4)*e:Math.sqrt(e))-e),difference:(e,r)=>Math.abs(e-r),exclusion:(e,r)=>e+r-2*e*r},Wde=(e,r="normal",t="rgb")=>{let a=typeof r=="function"?r:jde[r],n=Bt(t),i=Mn(t).channels;return e.map(l=>{let s=n(l);return s.alpha===void 0&&(s.alpha=1),s}).reduce((l,s)=>{if(l===void 0)return s;let u=s.alpha+l.alpha*(1-s.alpha);return i.reduce((f,c)=>(c!=="alpha"&&(u===0?f[c]=0:(f[c]=s.alpha*(1-l.alpha)*s[c]+s.alpha*l.alpha*a(l[c],s[c])+(1-s.alpha)*l.alpha*l[c],f[c]=Math.max(0,Math.min(1,f[c]/u)))),f),{mode:t,alpha:u})})},Xde=Wde,Zde=([e,r])=>e+Math.random()*(r-e),$de=e=>Object.keys(e).reduce((r,t)=>{let a=e[t];return r[t]=Array.isArray(a)?a:[a,a],r},{}),Jde=(e="rgb",r={})=>{let t=Mn(e),a=$de(r);return t.channels.reduce((n,i)=>((a.alpha||i!=="alpha")&&(n[i]=Zde(a[i]||t.ranges[i])),n),{mode:e})},Kde=Jde,yh=(e,r="rgb",t=!1)=>{let a=r?Mn(r).channels:null,n=r?Bt(r):ko;return i=>{let o=n(i);if(!o)return;let l=(a||Mn(o.mode).channels).reduce((u,f)=>{let c=e(o[f],f,o,r);return c!==void 0&&!isNaN(c)&&(u[f]=c),u},{mode:o.mode});if(!t)return l;let s=ko(i);return s&&s.mode!==l.mode?Bt(s.mode)(l):l}},JL=(e,r,t)=>r!=="alpha"?(e||0)*(t.alpha!==void 0?t.alpha:1):e,KL=(e,r,t)=>r!=="alpha"&&t.alpha!==0?(e||0)/(t.alpha!==void 0?t.alpha:1):e,E_=(e=1,r=0)=>(t,a)=>a!=="alpha"?t*e+r:t,Qde=(e=1,r=1,t=0)=>(a,n)=>n!=="alpha"?e*Math.pow(a,r)+t:a,e2e=e=>{e[0]===void 0&&(e[0]=0),e[e.length-1]===void 0&&(e[e.length-1]=1);let r=1,t,a,n,i;for(;rr=>e<=0?1:e>=1?0:Math.pow(r,Math.log(.5)/Math.log(e)),QL=t2e,Z1=e=>typeof e=="function",Pu=e=>e&&typeof e=="object",Lq=e=>typeof e=="number",eC=(e,r="rgb",t,a)=>{let n=Mn(r),i=Bt(r),o=[],l=[],s={};e.forEach(v=>{Array.isArray(v)?(o.push(i(v[0])),l.push(v[1])):Lq(v)||Z1(v)?s[l.length]=v:(o.push(i(v)),l.push(void 0))}),r2e(l);let u=n.channels.reduce((v,d)=>{let p;return Pu(t)&&Pu(t[d])&&t[d].fixup?p=t[d].fixup:Pu(n.interpolate[d])&&n.interpolate[d].fixup?p=n.interpolate[d].fixup:p=y=>y,v[d]=p(o.map(y=>y[d])),v},{});if(a){let v=o.map((d,p)=>n.channels.reduce((y,m)=>(y[m]=u[m][p],y),{mode:r}));u=n.channels.reduce((d,p)=>(d[p]=v.map(y=>{let m=a(y[p],p,y,r);return isNaN(m)?void 0:m}),d),{})}let f=n.channels.reduce((v,d)=>{let p;return Z1(t)?p=t:Pu(t)&&Z1(t[d])?p=t[d]:Pu(t)&&Pu(t[d])&&t[d].use?p=t[d].use:Z1(n.interpolate[d])?p=n.interpolate[d]:Pu(n.interpolate[d])&&(p=n.interpolate[d].use),v[d]=p(u[d]),v},{}),c=o.length-1;return v=>{if(v=Math.min(Math.max(0,v),1),v<=l[0])return o[0];if(v>l[c])return o[c];let d=0;for(;l[d]{let _=f[x](A);return _!==void 0&&(w[x]=_),w},{mode:r})}},a2e=(e,r="rgb",t)=>eC(e,r,t),rC=(e,r)=>(t,a="rgb",n)=>{let i=r?yh(r,a):void 0,o=eC(t,a,n,e);return i?l=>i(o(l)):o},n2e=rC(JL,KL),$1=(e,r)=>(e+r)%r,tC=(e,r,t,a,n)=>{let i=n*n,o=i*n;return((1-3*n+3*i-o)*e+(4-6*i+3*o)*r+(1+3*n+3*i-3*o)*t+o*a)/6},aC=e=>r=>{let t=e.length-1,a=r>=1?t-1:Math.max(0,Math.floor(r*t));return tC(a>0?e[a-1]:2*e[a]-e[a+1],e[a],e[a+1],ar=>{let t=e.length-1,a=Math.floor(r*t);return tC(e[$1(a-1,e.length)],e[$1(a,e.length)],e[$1(a+1,e.length)],e[$1(a+2,e.length)],(r-a/t)*t)},iC=e=>{let r,t=e.length-1,a=new Array(t),n=new Array(t),i=new Array(t);for(a[1]=1/4,n[1]=(6*e[1]-e[0])/4,r=2;r0&&(i[t-1]=n[t-1]),r=t-2;r>0;--r)i[r]=n[r]-a[r]*i[r+1];return i},i2e=e=>aC(iC(e)),o2e=e=>nC(iC(e)),kc=Math.sign,l_=Math.min,vi=Math.abs,P_=e=>{let r=e.length-1,t=[],a=[],n=[];for(let i=0;i0?.5*(e[i+1]-e[i-1])*r:void 0),n.push(i>0?(kc(t[i-1])+kc(t[i]))*l_(vi(t[i-1]),vi(t[i]),.5*vi(a[i])):void 0);return[t,a,n]},R_=(e,r,t)=>{let a=e.length-1,n=a*a;return i=>{let o;i>=1?o=a-1:o=Math.max(0,Math.floor(i*a));let l=i-o/a,s=l*l,u=s*l;return(r[o]+r[o+1]-2*t[o])*n*u+(3*t[o]-2*r[o]-r[o+1])*a*s+r[o]*l+e[o]}},l2e=e=>{if(e.length<3)return wr(e);let r=e.length-1,[t,,a]=P_(e);return a[0]=t[0],a[r]=t[r-1],R_(e,a,t)},s2e=e=>{if(e.length<3)return wr(e);let r=e.length-1,[t,a,n]=P_(e);return a[0]=(e[1]*2-e[0]*1.5-e[2]*.5)*r,a[r]=(e[r]*1.5-e[r-1]*2+e[r-2]*.5)*r,n[0]=a[0]*t[0]<=0?0:vi(a[0])>2*vi(t[0])?2*t[0]:a[0],n[r]=a[r]*t[r-1]<=0?0:vi(a[r])>2*vi(t[r-1])?2*t[r-1]:a[r],R_(e,n,t)},u2e=e=>{let r=e.length-1,[t,a,n]=P_(e);a[0]=.5*(e[1]-e[r])*r,a[r]=.5*(e[0]-e[r-1])*r;let i=(e[0]-e[r])*r,o=i;return n[0]=(kc(i)+kc(t[0]))*l_(vi(i),vi(t[0]),.5*vi(a[0])),n[r]=(kc(t[r-1])+kc(o))*l_(vi(t[r-1]),vi(o),.5*vi(a[r])),R_(e,n,t)},f2e=(e=1)=>e===1?r=>r:r=>Math.pow(r,e),oC=f2e,c2e=(e=2,r=1)=>{let t=oC(r);if(e<2)return e<1?[]:[t(.5)];let a=[];for(let n=0;n{let r={mode:e.mode,r:Math.max(0,Math.min(e.r!==void 0?e.r:0,1)),g:Math.max(0,Math.min(e.g!==void 0?e.g:0,1)),b:Math.max(0,Math.min(e.b!==void 0?e.b:0,1))};return e.alpha!==void 0&&(r.alpha=e.alpha),r},uC=e=>sC(lC(e)),fC=e=>e!==void 0&&(e.r===void 0||e.r>=0&&e.r<=1)&&(e.g===void 0||e.g>=0&&e.g<=1)&&(e.b===void 0||e.b>=0&&e.b<=1);function F_(e){return fC(lC(e))}function mp(e="rgb"){let{gamut:r}=Mn(e);if(!r)return a=>!0;let t=Bt(typeof r=="string"?r:e);return a=>fC(t(a))}function h2e(e){return e=ko(e),e===void 0||F_(e)?e:Bt(e.mode)(uC(e))}function z_(e="rgb"){let{gamut:r}=Mn(e);if(!r)return i=>ko(i);let t=typeof r=="string"?r:e,a=Bt(t),n=mp(t);return i=>{let o=ko(i);if(!o)return;let l=a(o);if(n(l))return o;let s=sC(l);return o.mode===s.mode?s:Bt(o.mode)(s)}}function d2e(e,r="lch",t="rgb"){e=ko(e);let a=t==="rgb"?F_:mp(t),n=t==="rgb"?uC:z_(t);if(e===void 0||a(e))return e;let i=Bt(e.mode);e=Bt(r)(e);let o=Vt(At({},e),{c:0});if(!a(o))return i(n(o));let l=0,s=e.c!==void 0?e.c:0,u=Mn(r).ranges.c,f=(u[1]-u[0])/Math.pow(2,13),c=o.c;for(;s-l>f;)o.c=l+(s-l)*.5,a(o)?(c=o.c,l=o.c):s=o.c;return i(a(o)?o:Vt(At({},o),{c}))}function p2e(e="rgb",r="oklch",t=Cc("oklch"),a=.02){let n=Bt(e),i=Mn(e);if(!i.gamut)return f=>n(f);let o=mp(e),l=z_(e),s=Bt(r),{ranges:u}=Mn(r);if(!u.l||!u.c)throw new Error("LCH-like space expected");return f=>{if(f=ko(f),f===void 0)return;let c=At({},s(f));if(c.l===void 0&&(c.l=0),c.c===void 0&&(c.c=0),c.l>=u.l[1]){let m=Vt(At({},i.white),{mode:e});return f.alpha!==void 0&&(m.alpha=f.alpha),m}if(c.l<=u.l[0]){let m=Vt(At({},i.black),{mode:e});return f.alpha!==void 0&&(m.alpha=f.alpha),m}if(o(c))return n(c);let v=0,d=c.c,p=(u.c[1]-u.c[0])/4e3,y=l(c);for(;d-v>p;)c.c=(v+d)*.5,y=l(c),o(c)||t&&a>0&&t(c,y)<=a?v=c.c:d=c.c;return n(o(c)?c:y)}}var m2e=(e,r=Cc(),t=a=>a)=>{let a=e.map((n,i)=>({color:t(n),i}));return(n,i=1,o=1/0)=>(isFinite(i)&&(i=Math.max(1,Math.min(i,a.length-1))),a.forEach(l=>{l.d=r(n,l.color)}),a.sort((l,s)=>l.d-s.d).slice(0,i).filter(l=>l.de[l.i]))},y2e=m2e,N_=e=>Math.max(e,0),I_=e=>Math.max(Math.min(e,1),0),g2e=(e,r,t)=>e===void 0||r===void 0?void 0:e+t*(r-e),b2e=e=>{let r=1-I_(e);return[.393+.607*r,.769-.769*r,.189-.189*r,0,.349-.349*r,.686+.314*r,.168-.168*r,0,.272-.272*r,.534-.534*r,.131+.869*r,0,0,0,0,1]},x2e=e=>{let r=N_(e);return[.213+.787*r,.715-.715*r,.072-.072*r,0,.213-.213*r,.715+.285*r,.072-.072*r,0,.213-.213*r,.715-.715*r,.072+.928*r,0,0,0,0,1]},_2e=e=>{let r=1-I_(e);return[.2126+.7874*r,.7152-.7152*r,.0722-.0722*r,0,.2126-.2126*r,.7152+.2848*r,.0722-.0722*r,0,.2126-.2126*r,.7152-.7152*r,.0722+.9278*r,0,0,0,0,1]},w2e=e=>{let r=Math.PI*e/180,t=Math.cos(r),a=Math.sin(r);return[.213+t*.787-a*.213,.715-t*.715-a*.715,.072-t*.072+a*.928,0,.213-t*.213+a*.143,.715+t*.285+a*.14,.072-t*.072-a*.283,0,.213-t*.213-a*.787,.715-t*.715+a*.715,.072+t*.928+a*.072,0,0,0,0,1]},yp=(e,r,t=!1)=>{let a=Bt(r),n=Mn(r).channels;return i=>{let o=a(i);if(!o)return;let l={mode:r},s,u=n.length;for(let c=0;c{let t=N_(e);return yh(E_(t),r,!0)},T2e=(e=1,r="rgb")=>{let t=N_(e);return yh(E_(t,(1-t)/2),r,!0)},M2e=(e=1,r="rgb")=>yp(b2e(e),r,!0),k2e=(e=1,r="rgb")=>yp(x2e(e),r,!0),S2e=(e=1,r="rgb")=>yp(_2e(e),r,!0),q2e=(e=1,r="rgb")=>{let t=I_(e);return yh((a,n)=>n==="alpha"?a:g2e(t,1-t,a),r,!0)},L2e=(e=0,r="rgb")=>yp(w2e(e),r,!0),C2e=Bt("rgb"),D2e=[[1,0,-0,0,1,0,-0,-0,1],[.856167,.182038,-.038205,.029342,.955115,.015544,-.00288,-.001563,1.004443],[.734766,.334872,-.069637,.05184,.919198,.028963,-.004928,-.004209,1.009137],[.630323,.465641,-.095964,.069181,.890046,.040773,-.006308,-.007724,1.014032],[.539009,.579343,-.118352,.082546,.866121,.051332,-.007136,-.011959,1.019095],[.458064,.679578,-.137642,.092785,.846313,.060902,-.007494,-.016807,1.024301],[.38545,.769005,-.154455,.100526,.829802,.069673,-.007442,-.02219,1.029632],[.319627,.849633,-.169261,.106241,.815969,.07779,-.007025,-.028051,1.035076],[.259411,.923008,-.18242,.110296,.80434,.085364,-.006276,-.034346,1.040622],[.203876,.990338,-.194214,.112975,.794542,.092483,-.005222,-.041043,1.046265],[.152286,1.052583,-.204868,.114503,.786281,.099216,-.003882,-.048116,1.051998]],E2e=[[1,0,-0,0,1,0,-0,-0,1],[.866435,.177704,-.044139,.049567,.939063,.01137,-.003453,.007233,.99622],[.760729,.319078,-.079807,.090568,.889315,.020117,-.006027,.013325,.992702],[.675425,.43385,-.109275,.125303,.847755,.026942,-.00795,.018572,.989378],[.605511,.52856,-.134071,.155318,.812366,.032316,-.009376,.023176,.9862],[.547494,.607765,-.155259,.181692,.781742,.036566,-.01041,.027275,.983136],[.498864,.674741,-.173604,.205199,.754872,.039929,-.011131,.030969,.980162],[.457771,.731899,-.18967,.226409,.731012,.042579,-.011595,.034333,.977261],[.422823,.781057,-.203881,.245752,.709602,.044646,-.011843,.037423,.974421],[.392952,.82361,-.216562,.263559,.69021,.046232,-.01191,.040281,.97163],[.367322,.860646,-.227968,.280085,.672501,.047413,-.01182,.04294,.968881]],P2e=[[1,0,-0,0,1,0,-0,-0,1],[.92667,.092514,-.019184,.021191,.964503,.014306,.008437,.054813,.93675],[.89572,.13333,-.02905,.029997,.9454,.024603,.013027,.104707,.882266],[.905871,.127791,-.033662,.026856,.941251,.031893,.01341,.148296,.838294],[.948035,.08949,-.037526,.014364,.946792,.038844,.010853,.193991,.795156],[1.017277,.027029,-.044306,-.006113,.958479,.047634,.006379,.248708,.744913],[1.104996,-.046633,-.058363,-.032137,.971635,.060503,.001336,.317922,.680742],[1.193214,-.109812,-.083402,-.058496,.97941,.079086,-.002346,.403492,.598854],[1.257728,-.139648,-.118081,-.078003,.975409,.102594,-.003316,.501214,.502102],[1.278864,-.125333,-.153531,-.084748,.957674,.127074,-989e-6,.601151,.399838],[1.255528,-.076749,-.178779,-.078411,.930809,.147602,.004733,.691367,.3039]],B_=(e,r)=>{let t=Math.max(0,Math.min(1,r)),a=Math.round(t/.1),n=Math.round(t%.1),i=e[a];if(n>0&&aRu(i[s],o[s],n))}return o=>{let l=ko(o);if(l===void 0)return;let{r:s,g:u,b:f}=C2e(l),c={mode:"rgb",r:i[0]*s+i[1]*u+i[2]*f,g:i[3]*s+i[4]*u+i[5]*f,b:i[6]*s+i[7]*u+i[8]*f};return l.alpha!==void 0&&(c.alpha=l.alpha),Bt(l.mode)(c)}},R2e=(e=1)=>B_(D2e,e),F2e=(e=1)=>B_(E2e,e),z2e=(e=1)=>B_(P2e,e),N2e=e=>e*e*(3-2*e),I2e=e=>.5-Math.sin(Math.asin(1-2*e)/3),B2e=e=>e*e*e*(e*(e*6-15)+10),O2e=B2e,H2e=e=>(1-Math.cos(e*Math.PI))/2,U2e=H2e;function s_(e){let r=Bt("lrgb")(e);return .2126*r.r+.7152*r.g+.0722*r.b}function G2e(e,r){let t=s_(e),a=s_(r);return(Math.max(t,a)+.05)/(Math.min(t,a)+.05)}var Y2e=Lt(Gq),V2e=Lt(Xq),j2e=Lt(Qq),W2e=Lt(eL),X2e=Lt(aL),Z2e=Lt(d_),$2e=Lt(y_),J2e=Lt(cL),K2e=Lt(dL),Q2e=Lt(pL),e1e=Lt(mL),r1e=Lt(dp),t1e=Lt(gL),a1e=Lt(pp),n1e=Lt(xL),i1e=Lt(AL),o1e=Lt(TL),l1e=Lt(ML),s1e=Lt(SL),u1e=Lt(qL),f1e=Lt(CL),c1e=Lt(EL),v1e=Lt(PL),h1e=Lt(RL),d1e=Lt(FL),p1e=Lt(Nu),m1e=Lt(BL),y1e=Lt(OL),g1e=Lt(GL),b1e=Lt(jL)});var O_={};qt(O_,{default:()=>_1e});var x1e,_1e,H_=St(()=>{"use strict";x1e={format:{valType:"enumerated",values:["png","jpeg","webp","svg","full-json"],dflt:"png",description:"Sets the format of exported image."},width:{valType:"number",min:1,description:["Sets the exported image width.","Defaults to the value found in `layout.width`","If set to *null*, the exported image width will match the current graph width."].join(" ")},height:{valType:"number",min:1,description:["Sets the exported image height.","Defaults to the value found in `layout.height`","If set to *null*, the exported image height will match the current graph height."].join(" ")},scale:{valType:"number",min:0,dflt:1,description:["Sets a scaling for the generated image.","If set, all features of a graphs (e.g. text, line width)","are scaled, unlike simply setting","a bigger *width* and *height*."].join(" ")},setBackground:{valType:"any",dflt:!1,description:["Sets the image background mode.","By default, the image background is determined by `layout.paper_bgcolor`,","the *transparent* mode.","One might consider setting `setBackground` to *opaque*","when exporting a *jpeg* image as JPEGs do not support opacity."].join(" ")},imageDataOnly:{valType:"boolean",dflt:!1,description:["Determines whether or not the return value is prefixed by","the image format's corresponding 'data:image;' spec."].join(" ")}},_1e=x1e});var xs=z((Eje,yC)=>{"use strict";var{format:w1e,width:A1e,height:T1e,scale:M1e}=(H_(),ze(O_)).default,hC=M1e,{dflt:Dje}=hC,k1e=NS(hC,["dflt"]),dC={staticPlot:{valType:"boolean",dflt:!1},typesetMath:{valType:"boolean",dflt:!0},plotlyServerURL:{valType:"string",dflt:"https://cloud.plotly.com/newchart"},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},editSelection:{valType:"boolean",dflt:!0},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","map"],extras:[!0,!1],dflt:"gl3d+geo+map"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},doubleClickDelay:{valType:"number",dflt:500,min:0},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},displayNotifier:{valType:"boolean",dflt:!0},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!0},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{format:w1e,filename:{valType:"string"},width:A1e,height:T1e,scale:k1e},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/un/"},logging:{valType:"integer",min:0,max:2,dflt:1},notifyOnLogging:{valType:"integer",min:0,max:2,dflt:0},queueLength:{valType:"integer",min:0,dflt:0},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},pC={};function mC(e,r){for(let t in e){let a=e[t];typeof a!="object"||a===null||(a.valType?"dflt"in a&&(r[t]=a.dflt):(r[t]||(r[t]={}),mC(a,r[t])))}}mC(dC,pC);yC.exports={configAttributes:dC,dfltConfig:pC}});var G_=z((Rje,gC)=>{"use strict";var U_=Pr(),S1e=Br(),gh=[];gC.exports=function(e,r,t){var l;if(((l=t==null?void 0:t._context)==null?void 0:l.displayNotifier)===!1||gh.indexOf(e)!==-1)return;gh.push(e);var a=1e3;S1e(r)?a=r:r==="long"&&(a=3e3);var n=U_.select("body").selectAll(".plotly-notifier").data([0]);n.enter().append("div").classed("plotly-notifier",!0);var i=n.selectAll(".notifier-note").data(gh);function o(s){s.duration(700).style("opacity",0).each("end",function(u){var f=gh.indexOf(u);f!==-1&&gh.splice(f,1),U_.select(this).remove()})}i.enter().append("div").classed("notifier-note",!0).style("opacity",0).each(function(s){var u=U_.select(this);u.append("button").classed("notifier-close",!0).html("×").on("click",function(){u.transition().call(o)});for(var f=u.append("p"),c=s.split(//g),v=0;v{"use strict";var Rc=xs().dfltConfig,Y_=G_(),V_=bC.exports={};V_.log=function(){var e;if(Rc.logging>1){var r=["LOG:"];for(e=0;e1){var t=[];for(e=0;e"),"long")}};V_.warn=function(){var e;if(Rc.logging>0){var r=["WARN:"];for(e=0;e0){var t=[];for(e=0;e"),"stick")}};V_.error=function(){var e;if(Rc.logging>0){var r=["ERROR:"];for(e=0;e0){var t=[];for(e=0;e"),"stick")}}});var Ii=z(Ou=>{"use strict";Ou.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"];Ou.defaultLine="#444";Ou.lightLine="#eee";Ou.background="#fff";Ou.borderLine="#BEC8D9";Ou.lightFraction=1e3/11});var qr=z((Nje,qC)=>{"use strict";var{converter:xC,formatHex:q1e,formatRgb:L1e,wcagContrast:C1e,wcagLuminance:D1e}=vC(),{isArrayOrTypedArray:_C}=Zn(),{warn:E1e}=_s(),{background:xh,defaultLine:X_,defaults:P1e,lightLine:R1e}=Ii(),wC=xC("rgb"),F1e=xC("hsl"),AC=e=>{if(typeof e!="string")return;let r=e.trim().toLowerCase();if(!/^[0-9a-f]+$/.test(r))try{return wC(r)}catch(t){return}},kn=e=>e>0?e>1?1:e:0,z1e={mode:"rgb",r:0,g:0,b:0,alpha:1},j_=e=>Math.round(e*255e6)/255e6,TC=e=>Vt(At({},e),{r:j_(e.r),g:j_(e.g),b:j_(e.b)}),hi=e=>L1e(TC(e)),N1e=e=>q1e(TC(e)),I1e=e=>{var r,t,a,n;return typeof e=="string"?`"${e}"`:_C(e)?`${(t=(r=e.constructor)==null?void 0:r.name)!=null?t:"Array"}(${e.length})`:typeof e=="object"?(n=(a=e.constructor)==null?void 0:a.name)!=null?n:"Object":`${typeof e} ${e}`},Qt=(e,r)=>{var a;let t=AC(e);return t?((a=t.alpha)!=null||(t.alpha=1),t):(!r&&e!=null&&E1e(`Invalid color specifier: ${I1e(e)}. Defaulting to "#000"`),z1e)},bh=e=>hi(Vt(At({},Qt(e)),{alpha:1})),B1e=e=>e?Qt(e).alpha:0,MC=e=>_C(e)&&e.length>2&&Number.isFinite(e[0])&&Number.isFinite(e[1])&&Number.isFinite(e[2]),O1e=e=>{let[r,t,a,n]=e,i=Math.max(r,t,a)>1?1/255:1,o=n!=null?n:1;return{mode:"rgb",r:r*i,g:t*i,b:a*i,alpha:o>1?o/255:o}},H1e=(e,r)=>{let t=MC(e)?O1e(e):Qt(e,!0),a=[kn(t.r),kn(t.g),kn(t.b),kn(t.alpha)];return r==="uint8"||r==="uint8_clamped"?Uint8Array.from(a,n=>Math.round(n*255)):r==="float32"?Float32Array.from(a):r==="float64"?Float64Array.from(a):a},U1e=(e,r)=>hi(Vt(At({},Qt(e)),{alpha:kn(r)})),kC=(e,r)=>{let t=Qt(e),a=t.alpha;if(a===1)return hi(t);let n=Qt(r||xh),i=n.alpha,o=(l,s)=>(i===1?s:1-i+s*i)*(1-a)+l*a;return hi({mode:"rgb",r:o(t.r,n.r),g:o(t.g,n.g),b:o(t.b,n.b)})},G1e=(e,r,t)=>{let a=Qt(e),n=Qt(r),i=(o,l)=>t*o+(1-t)*l;return hi({mode:"rgb",r:i(a.r,n.r),g:i(a.g,n.g),b:i(a.b,n.b)})},W_=(e,r)=>{let t=Qt(e),a=F1e(t)||{mode:"hsl",h:0,s:0,l:0};return hi(wC(Vt(At({},a),{l:kn((a.l*100+r)/100),alpha:t.alpha})))},gp=(e,r)=>C1e(Qt(e),Qt(r)),SC=e=>gp(e,xh)>gp(e,X_),Y1e=hi(Qt(xh)),V1e=hi(Qt(X_)),j1e=(e,r,t)=>(Qt(e).alpha!==1&&(e=kC(e,xh)),SC(e)?r?W_(e,r):Y1e:t?W_(e,-t):V1e),W1e=(e,r)=>{e.style({stroke:bh(r),"stroke-opacity":Qt(r).alpha})},X1e=(e,r)=>{e.style({fill:bh(r),"fill-opacity":Qt(r).alpha})},Z1e=(e,r)=>!!(e&&r&&bh(e)===bh(r)),$1e=e=>AC(e)!==void 0,J1e=(e,r)=>{r=r===0?0:r||10;let t=Qt(e),a=r/100;return hi(Vt(At({},t),{r:kn(t.r+a),g:kn(t.g+a),b:kn(t.b+a)}))},K1e=(e,r,t)=>{let a=Qt(e),n=Qt(r),i=t/100,o=n.alpha-a.alpha,l=2*i-1,s=((l*o===-1?l:(l+o)/(1+l*o))+1)/2,u=1-s,f=(c,v)=>u*c+s*v;return hi({mode:"rgb",r:f(a.r,n.r),g:f(a.g,n.g),b:f(a.b,n.b),alpha:a.alpha*(1-i)+n.alpha*i})},Q1e=(e,r=["#000","#fff"])=>{let t,a=-1/0;for(let n of r){let i=gp(e,n);i>a&&(a=i,t=hi(Qt(n)))}return t},epe=e=>hi(Qt(e)),rpe=e=>N1e(Qt(e)).toUpperCase(),tpe=e=>{let r=Qt(e);return[kn(r.r)*255,kn(r.g)*255,kn(r.b)*255,kn(r.alpha)]},ape=([e,r,t,a])=>hi({mode:"rgb",r:e/255,g:r/255,b:t/255,alpha:a}),npe=e=>{let r=Qt(e);return D1e({mode:"rgb",r:kn(r.r),g:kn(r.g),b:kn(r.b)})};qC.exports={addOpacity:U1e,adjustLightness:W_,background:xh,brighten:J1e,combine:kC,contrast:j1e,defaultLine:X_,defaults:P1e,equals:Z1e,fill:X1e,hexString:rpe,interpolate:G1e,isChannelArray:MC,isDark:SC,isValid:$1e,lightLine:R1e,luminosity:npe,mix:K1e,mostReadable:Q1e,normalize:H1e,opacity:B1e,parse:Qt,rgb:bh,rgbaArray:tpe,rgbaArrayToString:ape,rgbaString:epe,stroke:W1e,wcagContrast:gp}});var Hu=z((Bje,DC)=>{"use strict";var ipe=qr(),bp={Greys:[[0,"rgb(0,0,0)"],[1,"rgb(255,255,255)"]],YlGnBu:[[0,"rgb(8,29,88)"],[.125,"rgb(37,52,148)"],[.25,"rgb(34,94,168)"],[.375,"rgb(29,145,192)"],[.5,"rgb(65,182,196)"],[.625,"rgb(127,205,187)"],[.75,"rgb(199,233,180)"],[.875,"rgb(237,248,217)"],[1,"rgb(255,255,217)"]],Greens:[[0,"rgb(0,68,27)"],[.125,"rgb(0,109,44)"],[.25,"rgb(35,139,69)"],[.375,"rgb(65,171,93)"],[.5,"rgb(116,196,118)"],[.625,"rgb(161,217,155)"],[.75,"rgb(199,233,192)"],[.875,"rgb(229,245,224)"],[1,"rgb(247,252,245)"]],YlOrRd:[[0,"rgb(128,0,38)"],[.125,"rgb(189,0,38)"],[.25,"rgb(227,26,28)"],[.375,"rgb(252,78,42)"],[.5,"rgb(253,141,60)"],[.625,"rgb(254,178,76)"],[.75,"rgb(254,217,118)"],[.875,"rgb(255,237,160)"],[1,"rgb(255,255,204)"]],Bluered:[[0,"rgb(0,0,255)"],[1,"rgb(255,0,0)"]],RdBu:[[0,"rgb(5,10,172)"],[.35,"rgb(106,137,247)"],[.5,"rgb(190,190,190)"],[.6,"rgb(220,170,132)"],[.7,"rgb(230,145,90)"],[1,"rgb(178,10,28)"]],Reds:[[0,"rgb(220,220,220)"],[.2,"rgb(245,195,157)"],[.4,"rgb(245,160,105)"],[1,"rgb(178,10,28)"]],Blues:[[0,"rgb(5,10,172)"],[.35,"rgb(40,60,190)"],[.5,"rgb(70,100,245)"],[.6,"rgb(90,120,245)"],[.7,"rgb(106,137,247)"],[1,"rgb(220,220,220)"]],Picnic:[[0,"rgb(0,0,255)"],[.1,"rgb(51,153,255)"],[.2,"rgb(102,204,255)"],[.3,"rgb(153,204,255)"],[.4,"rgb(204,204,255)"],[.5,"rgb(255,255,255)"],[.6,"rgb(255,204,255)"],[.7,"rgb(255,153,255)"],[.8,"rgb(255,102,204)"],[.9,"rgb(255,102,102)"],[1,"rgb(255,0,0)"]],Rainbow:[[0,"rgb(150,0,90)"],[.125,"rgb(0,0,200)"],[.25,"rgb(0,25,255)"],[.375,"rgb(0,152,255)"],[.5,"rgb(44,255,150)"],[.625,"rgb(151,255,0)"],[.75,"rgb(255,234,0)"],[.875,"rgb(255,111,0)"],[1,"rgb(255,0,0)"]],Portland:[[0,"rgb(12,51,131)"],[.25,"rgb(10,136,186)"],[.5,"rgb(242,211,56)"],[.75,"rgb(242,143,56)"],[1,"rgb(217,30,30)"]],Jet:[[0,"rgb(0,0,131)"],[.125,"rgb(0,60,170)"],[.375,"rgb(5,255,255)"],[.625,"rgb(255,255,0)"],[.875,"rgb(250,0,0)"],[1,"rgb(128,0,0)"]],Hot:[[0,"rgb(0,0,0)"],[.3,"rgb(230,0,0)"],[.6,"rgb(255,210,0)"],[1,"rgb(255,255,255)"]],Blackbody:[[0,"rgb(0,0,0)"],[.2,"rgb(230,0,0)"],[.4,"rgb(230,210,0)"],[.7,"rgb(255,255,255)"],[1,"rgb(160,200,255)"]],Earth:[[0,"rgb(0,0,130)"],[.1,"rgb(0,180,180)"],[.2,"rgb(40,210,40)"],[.4,"rgb(230,230,50)"],[.6,"rgb(120,70,20)"],[1,"rgb(255,255,255)"]],Electric:[[0,"rgb(0,0,0)"],[.15,"rgb(30,0,100)"],[.4,"rgb(120,0,100)"],[.6,"rgb(160,90,0)"],[.8,"rgb(230,200,0)"],[1,"rgb(255,250,220)"]],Viridis:[[0,"#440154"],[.06274509803921569,"#48186a"],[.12549019607843137,"#472d7b"],[.18823529411764706,"#424086"],[.25098039215686274,"#3b528b"],[.3137254901960784,"#33638d"],[.3764705882352941,"#2c728e"],[.4392156862745098,"#26828e"],[.5019607843137255,"#21918c"],[.5647058823529412,"#1fa088"],[.6274509803921569,"#28ae80"],[.6901960784313725,"#3fbc73"],[.7529411764705882,"#5ec962"],[.8156862745098039,"#84d44b"],[.8784313725490196,"#addc30"],[.9411764705882353,"#d8e219"],[1,"#fde725"]],Cividis:[[0,"rgb(0,32,76)"],[.058824,"rgb(0,42,102)"],[.117647,"rgb(0,52,110)"],[.176471,"rgb(39,63,108)"],[.235294,"rgb(60,74,107)"],[.294118,"rgb(76,85,107)"],[.352941,"rgb(91,95,109)"],[.411765,"rgb(104,106,112)"],[.470588,"rgb(117,117,117)"],[.529412,"rgb(131,129,120)"],[.588235,"rgb(146,140,120)"],[.647059,"rgb(161,152,118)"],[.705882,"rgb(176,165,114)"],[.764706,"rgb(192,177,109)"],[.823529,"rgb(209,191,102)"],[.882353,"rgb(225,204,92)"],[.941176,"rgb(243,219,79)"],[1,"rgb(255,233,69)"]]},LC=bp.RdBu;function ope(e,r){if(r||(r=LC),!e)return r;function t(){try{e=bp[e]||JSON.parse(e)}catch(a){e=r}}return typeof e=="string"&&(t(),typeof e=="string"&&t()),CC(e)?e:r}function CC(e){var r=0;if(!Array.isArray(e)||e.length<2||!e[0]||!e[e.length-1]||+e[0][0]!=0||+e[e.length-1][0]!=1)return!1;for(var t=0;tfpe,HIDE_PLACEHOLDER:()=>upe,SHOW_PLACEHOLDER:()=>spe});var spe,upe,fpe,_p=St(()=>{"use strict";spe=100,upe=1e3,fpe=.2});var _h={};qt(_h,{counter:()=>Uu});function Uu(e,r="",t,a){let n=r+(t?"":"$"),i=a===!1?"":"^";return e==="xy"?new RegExp(i+"x"+Z_+"y"+Z_+n):new RegExp(i+e+Z_+n)}var Z_,Fc=St(()=>{"use strict";Z_="([2-9]|[1-9][0-9]+)?"});var RC=z(Jn=>{"use strict";var $_=Br(),EC=Mt().extendFlat,cpe=On(),vpe=Hu(),J_=qr(),hpe=(_p(),ze(xp)).DESELECTDIM,zc=G1(),PC=(Fc(),ze(_h)).counter,dpe=(Tc(),ze(Ac)).modHalf,So=Zn().isArrayOrTypedArray,ws=Zn().isTypedArraySpec,As=Zn().decodeTypedArraySpec;Jn.valObjectMeta={data_array:{coerceFunction:function(e,r,t){r.set(So(e)?e:ws(e)?As(e):t)}},enumerated:{coerceFunction:function(e,r,t,a){a.coerceNumber&&(e=+e),a.values.indexOf(e)===-1?r.set(t):r.set(e)},validateFunction:function(e,r){r.coerceNumber&&(e=+e);for(var t=r.values,a=0;ai===!0||i===!1;n(e)||a.arrayOk&&Array.isArray(e)&&e.length>0&&e.every(n)?r.set(e):r.set(t)}},number:{coerceFunction:function(e,r,t,a){ws(e)&&(e=As(e)),!$_(e)||a.min!==void 0&&ea.max?r.set(t):r.set(+e)}},integer:{coerceFunction:function(e,r,t,a){if((a.extras||[]).indexOf(e)!==-1){r.set(e);return}ws(e)&&(e=As(e)),e%1||!$_(e)||a.min!==void 0&&ea.max?r.set(t):r.set(+e)}},string:{coerceFunction:function(e,r,t,a){if(typeof e!="string"){var n=typeof e=="number";a.strict===!0||!n?r.set(t):r.set(String(e))}else a.noBlank&&!e?r.set(t):r.set(e)}},color:{coerceFunction:function(e,r,t){ws(e)&&(e=As(e)),J_.isValid(e)?r.set(e):r.set(t)}},colorlist:{coerceFunction:function(e,r,t){!Array.isArray(e)||!e.length?r.set(t):e.every(a=>J_.isValid(a))?r.set(e):r.set(t)}},colorscale:{coerceFunction:function(e,r,t){r.set(vpe.get(e,t))}},angle:{coerceFunction:function(e,r,t){ws(e)&&(e=As(e)),e==="auto"?r.set("auto"):$_(e)?r.set(dpe(+e,360)):r.set(t)}},subplotid:{coerceFunction:function(e,r,t,a){var n=a.regex||PC(t);let i=o=>typeof o=="string"&&n.test(o);i(e)||a.arrayOk&&So(e)&&e.length>0&&e.every(i)?r.set(e):r.set(t)},validateFunction:function(e,r){var t=r.dflt;return e===t?!0:typeof e!="string"?!1:!!PC(t).test(e)}},flaglist:{coerceFunction:function(e,r,t,a){if((a.extras||[]).indexOf(e)!==-1){r.set(e);return}if(typeof e!="string"){r.set(t);return}for(var n=e.split("+"),i=0;i{"use strict";FC.exports=function(){}});var K_=z((Uje,zC)=>{"use strict";zC.exports=function(r,t){if(t instanceof RegExp){for(var a=t.toString(),n=0;n{NC.exports=ppe;function ppe(){var e=new Float32Array(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var OC=z((Yje,BC)=>{BC.exports=mpe;function mpe(e){var r=new Float32Array(16);return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r}});var UC=z((Vje,HC)=>{HC.exports=ype;function ype(e,r){return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}});var Q_=z((jje,GC)=>{GC.exports=gpe;function gpe(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var VC=z((Wje,YC)=>{YC.exports=bpe;function bpe(e,r){if(e===r){var t=r[1],a=r[2],n=r[3],i=r[6],o=r[7],l=r[11];e[1]=r[4],e[2]=r[8],e[3]=r[12],e[4]=t,e[6]=r[9],e[7]=r[13],e[8]=a,e[9]=i,e[11]=r[14],e[12]=n,e[13]=o,e[14]=l}else e[0]=r[0],e[1]=r[4],e[2]=r[8],e[3]=r[12],e[4]=r[1],e[5]=r[5],e[6]=r[9],e[7]=r[13],e[8]=r[2],e[9]=r[6],e[10]=r[10],e[11]=r[14],e[12]=r[3],e[13]=r[7],e[14]=r[11],e[15]=r[15];return e}});var WC=z((Xje,jC)=>{jC.exports=xpe;function xpe(e,r){var t=r[0],a=r[1],n=r[2],i=r[3],o=r[4],l=r[5],s=r[6],u=r[7],f=r[8],c=r[9],v=r[10],d=r[11],p=r[12],y=r[13],m=r[14],b=r[15],A=t*l-a*o,w=t*s-n*o,x=t*u-i*o,_=a*s-n*l,k=a*u-i*l,T=n*u-i*s,q=f*y-c*p,C=f*m-v*p,E=f*b-d*p,P=c*m-v*y,R=c*b-d*y,N=v*b-d*m,I=A*N-w*R+x*P+_*E-k*C+T*q;return I?(I=1/I,e[0]=(l*N-s*R+u*P)*I,e[1]=(n*R-a*N-i*P)*I,e[2]=(y*T-m*k+b*_)*I,e[3]=(v*k-c*T-d*_)*I,e[4]=(s*E-o*N-u*C)*I,e[5]=(t*N-n*E+i*C)*I,e[6]=(m*x-p*T-b*w)*I,e[7]=(f*T-v*x+d*w)*I,e[8]=(o*R-l*E+u*q)*I,e[9]=(a*E-t*R-i*q)*I,e[10]=(p*k-y*x+b*A)*I,e[11]=(c*x-f*k-d*A)*I,e[12]=(l*C-o*P-s*q)*I,e[13]=(t*P-a*C+n*q)*I,e[14]=(y*w-p*_-m*A)*I,e[15]=(f*_-c*w+v*A)*I,e):null}});var ZC=z((Zje,XC)=>{XC.exports=_pe;function _pe(e,r){var t=r[0],a=r[1],n=r[2],i=r[3],o=r[4],l=r[5],s=r[6],u=r[7],f=r[8],c=r[9],v=r[10],d=r[11],p=r[12],y=r[13],m=r[14],b=r[15];return e[0]=l*(v*b-d*m)-c*(s*b-u*m)+y*(s*d-u*v),e[1]=-(a*(v*b-d*m)-c*(n*b-i*m)+y*(n*d-i*v)),e[2]=a*(s*b-u*m)-l*(n*b-i*m)+y*(n*u-i*s),e[3]=-(a*(s*d-u*v)-l*(n*d-i*v)+c*(n*u-i*s)),e[4]=-(o*(v*b-d*m)-f*(s*b-u*m)+p*(s*d-u*v)),e[5]=t*(v*b-d*m)-f*(n*b-i*m)+p*(n*d-i*v),e[6]=-(t*(s*b-u*m)-o*(n*b-i*m)+p*(n*u-i*s)),e[7]=t*(s*d-u*v)-o*(n*d-i*v)+f*(n*u-i*s),e[8]=o*(c*b-d*y)-f*(l*b-u*y)+p*(l*d-u*c),e[9]=-(t*(c*b-d*y)-f*(a*b-i*y)+p*(a*d-i*c)),e[10]=t*(l*b-u*y)-o*(a*b-i*y)+p*(a*u-i*l),e[11]=-(t*(l*d-u*c)-o*(a*d-i*c)+f*(a*u-i*l)),e[12]=-(o*(c*m-v*y)-f*(l*m-s*y)+p*(l*v-s*c)),e[13]=t*(c*m-v*y)-f*(a*m-n*y)+p*(a*v-n*c),e[14]=-(t*(l*m-s*y)-o*(a*m-n*y)+p*(a*s-n*l)),e[15]=t*(l*v-s*c)-o*(a*v-n*c)+f*(a*s-n*l),e}});var JC=z(($je,$C)=>{$C.exports=wpe;function wpe(e){var r=e[0],t=e[1],a=e[2],n=e[3],i=e[4],o=e[5],l=e[6],s=e[7],u=e[8],f=e[9],c=e[10],v=e[11],d=e[12],p=e[13],y=e[14],m=e[15],b=r*o-t*i,A=r*l-a*i,w=r*s-n*i,x=t*l-a*o,_=t*s-n*o,k=a*s-n*l,T=u*p-f*d,q=u*y-c*d,C=u*m-v*d,E=f*y-c*p,P=f*m-v*p,R=c*m-v*y;return b*R-A*P+w*E+x*C-_*q+k*T}});var QC=z((Jje,KC)=>{KC.exports=Ape;function Ape(e,r,t){var a=r[0],n=r[1],i=r[2],o=r[3],l=r[4],s=r[5],u=r[6],f=r[7],c=r[8],v=r[9],d=r[10],p=r[11],y=r[12],m=r[13],b=r[14],A=r[15],w=t[0],x=t[1],_=t[2],k=t[3];return e[0]=w*a+x*l+_*c+k*y,e[1]=w*n+x*s+_*v+k*m,e[2]=w*i+x*u+_*d+k*b,e[3]=w*o+x*f+_*p+k*A,w=t[4],x=t[5],_=t[6],k=t[7],e[4]=w*a+x*l+_*c+k*y,e[5]=w*n+x*s+_*v+k*m,e[6]=w*i+x*u+_*d+k*b,e[7]=w*o+x*f+_*p+k*A,w=t[8],x=t[9],_=t[10],k=t[11],e[8]=w*a+x*l+_*c+k*y,e[9]=w*n+x*s+_*v+k*m,e[10]=w*i+x*u+_*d+k*b,e[11]=w*o+x*f+_*p+k*A,w=t[12],x=t[13],_=t[14],k=t[15],e[12]=w*a+x*l+_*c+k*y,e[13]=w*n+x*s+_*v+k*m,e[14]=w*i+x*u+_*d+k*b,e[15]=w*o+x*f+_*p+k*A,e}});var rD=z((Kje,eD)=>{eD.exports=Tpe;function Tpe(e,r,t){var a=t[0],n=t[1],i=t[2],o,l,s,u,f,c,v,d,p,y,m,b;return r===e?(e[12]=r[0]*a+r[4]*n+r[8]*i+r[12],e[13]=r[1]*a+r[5]*n+r[9]*i+r[13],e[14]=r[2]*a+r[6]*n+r[10]*i+r[14],e[15]=r[3]*a+r[7]*n+r[11]*i+r[15]):(o=r[0],l=r[1],s=r[2],u=r[3],f=r[4],c=r[5],v=r[6],d=r[7],p=r[8],y=r[9],m=r[10],b=r[11],e[0]=o,e[1]=l,e[2]=s,e[3]=u,e[4]=f,e[5]=c,e[6]=v,e[7]=d,e[8]=p,e[9]=y,e[10]=m,e[11]=b,e[12]=o*a+f*n+p*i+r[12],e[13]=l*a+c*n+y*i+r[13],e[14]=s*a+v*n+m*i+r[14],e[15]=u*a+d*n+b*i+r[15]),e}});var aD=z((Qje,tD)=>{tD.exports=Mpe;function Mpe(e,r,t){var a=t[0],n=t[1],i=t[2];return e[0]=r[0]*a,e[1]=r[1]*a,e[2]=r[2]*a,e[3]=r[3]*a,e[4]=r[4]*n,e[5]=r[5]*n,e[6]=r[6]*n,e[7]=r[7]*n,e[8]=r[8]*i,e[9]=r[9]*i,e[10]=r[10]*i,e[11]=r[11]*i,e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}});var iD=z((eWe,nD)=>{nD.exports=kpe;function kpe(e,r,t,a){var n=a[0],i=a[1],o=a[2],l=Math.sqrt(n*n+i*i+o*o),s,u,f,c,v,d,p,y,m,b,A,w,x,_,k,T,q,C,E,P,R,N,I,O;return Math.abs(l)<1e-6?null:(l=1/l,n*=l,i*=l,o*=l,s=Math.sin(t),u=Math.cos(t),f=1-u,c=r[0],v=r[1],d=r[2],p=r[3],y=r[4],m=r[5],b=r[6],A=r[7],w=r[8],x=r[9],_=r[10],k=r[11],T=n*n*f+u,q=i*n*f+o*s,C=o*n*f-i*s,E=n*i*f-o*s,P=i*i*f+u,R=o*i*f+n*s,N=n*o*f+i*s,I=i*o*f-n*s,O=o*o*f+u,e[0]=c*T+y*q+w*C,e[1]=v*T+m*q+x*C,e[2]=d*T+b*q+_*C,e[3]=p*T+A*q+k*C,e[4]=c*E+y*P+w*R,e[5]=v*E+m*P+x*R,e[6]=d*E+b*P+_*R,e[7]=p*E+A*P+k*R,e[8]=c*N+y*I+w*O,e[9]=v*N+m*I+x*O,e[10]=d*N+b*I+_*O,e[11]=p*N+A*I+k*O,r!==e&&(e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e)}});var lD=z((rWe,oD)=>{oD.exports=Spe;function Spe(e,r,t){var a=Math.sin(t),n=Math.cos(t),i=r[4],o=r[5],l=r[6],s=r[7],u=r[8],f=r[9],c=r[10],v=r[11];return r!==e&&(e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[4]=i*n+u*a,e[5]=o*n+f*a,e[6]=l*n+c*a,e[7]=s*n+v*a,e[8]=u*n-i*a,e[9]=f*n-o*a,e[10]=c*n-l*a,e[11]=v*n-s*a,e}});var uD=z((tWe,sD)=>{sD.exports=qpe;function qpe(e,r,t){var a=Math.sin(t),n=Math.cos(t),i=r[0],o=r[1],l=r[2],s=r[3],u=r[8],f=r[9],c=r[10],v=r[11];return r!==e&&(e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[0]=i*n-u*a,e[1]=o*n-f*a,e[2]=l*n-c*a,e[3]=s*n-v*a,e[8]=i*a+u*n,e[9]=o*a+f*n,e[10]=l*a+c*n,e[11]=s*a+v*n,e}});var cD=z((aWe,fD)=>{fD.exports=Lpe;function Lpe(e,r,t){var a=Math.sin(t),n=Math.cos(t),i=r[0],o=r[1],l=r[2],s=r[3],u=r[4],f=r[5],c=r[6],v=r[7];return r!==e&&(e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[0]=i*n+u*a,e[1]=o*n+f*a,e[2]=l*n+c*a,e[3]=s*n+v*a,e[4]=u*n-i*a,e[5]=f*n-o*a,e[6]=c*n-l*a,e[7]=v*n-s*a,e}});var hD=z((nWe,vD)=>{vD.exports=Cpe;function Cpe(e,r,t){var a,n,i,o=t[0],l=t[1],s=t[2],u=Math.sqrt(o*o+l*l+s*s);return Math.abs(u)<1e-6?null:(u=1/u,o*=u,l*=u,s*=u,a=Math.sin(r),n=Math.cos(r),i=1-n,e[0]=o*o*i+n,e[1]=l*o*i+s*a,e[2]=s*o*i-l*a,e[3]=0,e[4]=o*l*i-s*a,e[5]=l*l*i+n,e[6]=s*l*i+o*a,e[7]=0,e[8]=o*s*i+l*a,e[9]=l*s*i-o*a,e[10]=s*s*i+n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}});var pD=z((iWe,dD)=>{dD.exports=Dpe;function Dpe(e,r,t){var a=r[0],n=r[1],i=r[2],o=r[3],l=a+a,s=n+n,u=i+i,f=a*l,c=a*s,v=a*u,d=n*s,p=n*u,y=i*u,m=o*l,b=o*s,A=o*u;return e[0]=1-(d+y),e[1]=c+A,e[2]=v-b,e[3]=0,e[4]=c-A,e[5]=1-(f+y),e[6]=p+m,e[7]=0,e[8]=v+b,e[9]=p-m,e[10]=1-(f+d),e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}});var yD=z((oWe,mD)=>{mD.exports=Epe;function Epe(e,r){return e[0]=r[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=r[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var bD=z((lWe,gD)=>{gD.exports=Ppe;function Ppe(e,r){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}});var _D=z((sWe,xD)=>{xD.exports=Rpe;function Rpe(e,r){var t=Math.sin(r),a=Math.cos(r);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=t,e[7]=0,e[8]=0,e[9]=-t,e[10]=a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var AD=z((uWe,wD)=>{wD.exports=Fpe;function Fpe(e,r){var t=Math.sin(r),a=Math.cos(r);return e[0]=a,e[1]=0,e[2]=-t,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=t,e[9]=0,e[10]=a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var MD=z((fWe,TD)=>{TD.exports=zpe;function zpe(e,r){var t=Math.sin(r),a=Math.cos(r);return e[0]=a,e[1]=t,e[2]=0,e[3]=0,e[4]=-t,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var SD=z((cWe,kD)=>{kD.exports=Npe;function Npe(e,r){var t=r[0],a=r[1],n=r[2],i=r[3],o=t+t,l=a+a,s=n+n,u=t*o,f=a*o,c=a*l,v=n*o,d=n*l,p=n*s,y=i*o,m=i*l,b=i*s;return e[0]=1-c-p,e[1]=f+b,e[2]=v-m,e[3]=0,e[4]=f-b,e[5]=1-u-p,e[6]=d+y,e[7]=0,e[8]=v+m,e[9]=d-y,e[10]=1-u-c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var LD=z((vWe,qD)=>{qD.exports=Ipe;function Ipe(e,r,t,a,n,i,o){var l=1/(t-r),s=1/(n-a),u=1/(i-o);return e[0]=i*2*l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i*2*s,e[6]=0,e[7]=0,e[8]=(t+r)*l,e[9]=(n+a)*s,e[10]=(o+i)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*i*2*u,e[15]=0,e}});var DD=z((hWe,CD)=>{CD.exports=Bpe;function Bpe(e,r,t,a,n){var i=1/Math.tan(r/2),o=1/(a-n);return e[0]=i/t,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=(n+a)*o,e[11]=-1,e[12]=0,e[13]=0,e[14]=2*n*a*o,e[15]=0,e}});var PD=z((dWe,ED)=>{ED.exports=Ope;function Ope(e,r,t,a){var n=Math.tan(r.upDegrees*Math.PI/180),i=Math.tan(r.downDegrees*Math.PI/180),o=Math.tan(r.leftDegrees*Math.PI/180),l=Math.tan(r.rightDegrees*Math.PI/180),s=2/(o+l),u=2/(n+i);return e[0]=s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=u,e[6]=0,e[7]=0,e[8]=-((o-l)*s*.5),e[9]=(n-i)*u*.5,e[10]=a/(t-a),e[11]=-1,e[12]=0,e[13]=0,e[14]=a*t/(t-a),e[15]=0,e}});var FD=z((pWe,RD)=>{RD.exports=Hpe;function Hpe(e,r,t,a,n,i,o){var l=1/(r-t),s=1/(a-n),u=1/(i-o);return e[0]=-2*l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(r+t)*l,e[13]=(n+a)*s,e[14]=(o+i)*u,e[15]=1,e}});var ND=z((mWe,zD)=>{var Upe=Q_();zD.exports=Gpe;function Gpe(e,r,t,a){var n,i,o,l,s,u,f,c,v,d,p=r[0],y=r[1],m=r[2],b=a[0],A=a[1],w=a[2],x=t[0],_=t[1],k=t[2];return Math.abs(p-x)<1e-6&&Math.abs(y-_)<1e-6&&Math.abs(m-k)<1e-6?Upe(e):(f=p-x,c=y-_,v=m-k,d=1/Math.sqrt(f*f+c*c+v*v),f*=d,c*=d,v*=d,n=A*v-w*c,i=w*f-b*v,o=b*c-A*f,d=Math.sqrt(n*n+i*i+o*o),d?(d=1/d,n*=d,i*=d,o*=d):(n=0,i=0,o=0),l=c*o-v*i,s=v*n-f*o,u=f*i-c*n,d=Math.sqrt(l*l+s*s+u*u),d?(d=1/d,l*=d,s*=d,u*=d):(l=0,s=0,u=0),e[0]=n,e[1]=l,e[2]=f,e[3]=0,e[4]=i,e[5]=s,e[6]=c,e[7]=0,e[8]=o,e[9]=u,e[10]=v,e[11]=0,e[12]=-(n*p+i*y+o*m),e[13]=-(l*p+s*y+u*m),e[14]=-(f*p+c*y+v*m),e[15]=1,e)}});var BD=z((yWe,ID)=>{ID.exports=Ype;function Ype(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}});var e4=z((gWe,OD)=>{OD.exports={create:IC(),clone:OC(),copy:UC(),identity:Q_(),transpose:VC(),invert:WC(),adjoint:ZC(),determinant:JC(),multiply:QC(),translate:rD(),scale:aD(),rotate:iD(),rotateX:lD(),rotateY:uD(),rotateZ:cD(),fromRotation:hD(),fromRotationTranslation:pD(),fromScaling:yD(),fromTranslation:bD(),fromXRotation:_D(),fromYRotation:AD(),fromZRotation:MD(),fromQuat:SD(),frustum:LD(),perspective:DD(),perspectiveFromFieldOfView:PD(),ortho:FD(),lookAt:ND(),str:BD()}});var Tp=z(ha=>{"use strict";var Vpe=e4();ha.init2dArray=function(e,r){for(var t=new Array(e),a=0;a{"use strict";var jpe=Pr(),HD=_s(),Wpe=Tp(),Xpe=e4();function Zpe(e){var r;if(typeof e=="string"){if(r=document.getElementById(e),r===null)throw new Error("No DOM element with id '"+e+"' exists on the page.");return r}else if(e==null)throw new Error("DOM element provided is null or undefined");return e}function $pe(e){var r=jpe.select(e);return r.node()instanceof HTMLElement&&r.size()&&r.classed("js-plotly-plot")}function UD(e){var r=e&&e.parentNode;r&&r.removeChild(e)}function Jpe(e,r){GD("global",e,r)}function GD(e,r,t){var a="plotly.js-style-"+e,n=document.getElementById(a);if(!(n&&n.matches(".no-inline-styles"))){n||(n=document.createElement("style"),n.setAttribute("id",a),n.appendChild(document.createTextNode("")),document.head.appendChild(n));var i=n.sheet;i?i.insertRule?i.insertRule(r+"{"+t+"}",0):i.addRule?i.addRule(r,t,0):HD.warn("addStyleRule failed"):HD.warn("Cannot addRelatedStyleRule, probably due to strict CSP...")}}function Kpe(e){var r="plotly.js-style-"+e,t=document.getElementById(r);t&&UD(t)}function Qpe(e,r,t,a,n,i){var o=a.split(":"),l=n.split(":"),s="data-btn-style-event-added";i||(i=document),i.querySelectorAll(e).forEach(function(u){u._hoverStyle={activeStyleParts:o,inactiveStyleParts:l},u.getAttribute(s)||(u.addEventListener("mouseenter",function(){var f=this._hoverStyle,c=this.querySelector(t);c&&(c.style[f.activeStyleParts[0]]=f.activeStyleParts[1])}),u.addEventListener("mouseleave",function(){var f=this._hoverStyle,c=this.querySelector(t);c&&(r&&this.matches(r)?c.style[f.activeStyleParts[0]]=f.activeStyleParts[1]:c.style[f.inactiveStyleParts[0]]=f.inactiveStyleParts[1])}),u.setAttribute(s,!0))})}function eme(e){var r=VD(e),t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return r.forEach(function(a){var n=YD(a);if(n){var i=Wpe.convertCssMatrix(n);t=Xpe.multiply(t,t,i)}}),t}function YD(e){var r=window.getComputedStyle(e,null),t=r.getPropertyValue("-webkit-transform")||r.getPropertyValue("-moz-transform")||r.getPropertyValue("-ms-transform")||r.getPropertyValue("-o-transform")||r.getPropertyValue("transform");return t==="none"?null:t.replace("matrix","").replace("3d","").slice(1,-1).split(",").map(function(a){return+a})}function VD(e){for(var r=[];rme(e);)r.push(e),e=e.parentNode,typeof ShadowRoot=="function"&&e instanceof ShadowRoot&&(e=e.host);return r}function rme(e){return e&&(e instanceof Element||e instanceof HTMLElement)}function tme(e,r){return e&&r&&e.top===r.top&&e.left===r.left&&e.right===r.right&&e.bottom===r.bottom}jD.exports={getGraphDiv:Zpe,isPlotDiv:$pe,removeElement:UD,addStyleRule:Jpe,addRelatedStyleRule:GD,deleteRelatedStyleRule:Kpe,setStyleOnHover:Qpe,getFullTransformMatrix:eme,getElementTransformMatrix:YD,getElementAndAncestors:VD,equalDomRects:tme}});var Ah=z((_We,WD)=>{"use strict";WD.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500,editType:"none"},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"],editType:"none"},ordering:{valType:"enumerated",values:["layout first","traces first"],dflt:"layout first",editType:"none"}}}});var qo=z((wWe,eE)=>{"use strict";var ZD=Mt().extendFlat,ame=Du(),$D={valType:"flaglist",extras:["none"],flags:["calc","clearAxisTypes","plot","style","markerSize","colorbars"]},JD={valType:"flaglist",extras:["none"],flags:["calc","plot","legend","ticks","axrange","layoutstyle","modebar","camera","arraydraw","colorbars"]},nme=$D.flags.slice().concat(["fullReplot"]),ime=JD.flags.slice().concat("layoutReplot");eE.exports={traces:$D,layout:JD,traceFlags:function(){return XD(nme)},layoutFlags:function(){return XD(ime)},update:function(e,r){var t=r.editType;if(t&&t!=="none")for(var a=t.split("+"),n=0;n{"use strict";r4.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"};r4.pattern={shape:{valType:"enumerated",values:["","/","\\","x","-","|","+","."],dflt:"",arrayOk:!0,editType:"style"},path:{valType:"string",arrayOk:!0,editType:"style"},fillmode:{valType:"enumerated",values:["replace","overlay"],dflt:"replace",editType:"style"},bgcolor:{valType:"color",arrayOk:!0,editType:"style"},fgcolor:{valType:"color",arrayOk:!0,editType:"style"},fgopacity:{valType:"number",editType:"style",min:0,max:1},size:{valType:"number",min:0,dflt:8,arrayOk:!0,editType:"style"},solidity:{valType:"number",min:0,max:1,dflt:.3,arrayOk:!0,editType:"style"},editType:"style"}});var t4={};qt(t4,{DATE_FORMAT_LINK:()=>lme,FORMAT_LINK:()=>ome});var ome,lme,a4=St(()=>{"use strict";ome="https://github.com/d3/d3-format/tree/v1.4.5#d3-format",lme="https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format"});var di=z(Nc=>{"use strict";var{DATE_FORMAT_LINK:sme,FORMAT_LINK:ume}=(a4(),ze(t4)),fme=["Variables that can't be found will be replaced with the specifier.",'For example, a template of "data: %{x}, %{y}" will result in a value of "data: 1, %{y}" if x is 1 and y is missing.',"Variables with an undefined value will be replaced with the fallback value."].join(" ");function cme({supportOther:e}={}){return["Variables are inserted using %{variable},",'for example "y: %{y}"'+(e?" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown.":"."),`Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example "Price: %{y:$.2f}".`,ume,"for details on the formatting syntax.",`Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example "Day: %{2019-01-01|%A}".`,sme,"for details on the date formatting syntax.",fme].join(" ")}Nc.templateFormatStringDescription=cme;Nc.hovertemplateAttrs=({editType:e="none",arrayOk:r}={},t={})=>At({valType:"string",dflt:"",editType:e},r!==!1?{arrayOk:!0}:{});Nc.texttemplateAttrs=({editType:e="calc",arrayOk:r}={},t={})=>At({valType:"string",dflt:"",editType:e},r!==!1?{arrayOk:!0}:{});Nc.shapeTexttemplateAttrs=({editType:e="arraydraw",newshape:r}={},t={})=>({valType:"string",dflt:"",editType:e});Nc.templatefallbackAttrs=({editType:e="none"}={})=>({valType:"any",dflt:"-",editType:e})});var Sp=z((kWe,oE)=>{"use strict";function Ts(e,r){return r?r.d2l(e):e}function rE(e,r){return r?r.l2d(e):e}function vme(e){return e.x0}function hme(e){return e.x1}function dme(e){return e.y0}function pme(e){return e.y1}function tE(e){return e.x0shift||0}function aE(e){return e.x1shift||0}function nE(e){return e.y0shift||0}function iE(e){return e.y1shift||0}function Mp(e,r){return Ts(e.x1,r)+aE(e)-Ts(e.x0,r)-tE(e)}function kp(e,r,t){return Ts(e.y1,t)+iE(e)-Ts(e.y0,t)-nE(e)}function mme(e,r){return Math.abs(Mp(e,r))}function yme(e,r,t){return Math.abs(kp(e,r,t))}function gme(e,r,t){return e.type!=="line"?void 0:Math.sqrt(Math.pow(Mp(e,r),2)+Math.pow(kp(e,r,t),2))}function bme(e,r){return rE((Ts(e.x1,r)+aE(e)+Ts(e.x0,r)+tE(e))/2,r)}function xme(e,r,t){return rE((Ts(e.y1,t)+iE(e)+Ts(e.y0,t)+nE(e))/2,t)}function _me(e,r,t){return e.type!=="line"?void 0:kp(e,r,t)/Mp(e,r)}var wme=["x0","x1","y0","y1","dy","height","ycenter"],Ame=["x0","x1","y0","y1","dx","width","xcenter"];oE.exports={x0:vme,x1:hme,y0:dme,y1:pme,slope:_me,dx:Mp,dy:kp,width:mme,height:yme,length:gme,xcenter:bme,ycenter:xme,simpleXVariables:wme,simpleYVariables:Ame}});var uE=z((SWe,sE)=>{"use strict";var Tme=qo().overrideAll,Gu=On(),lE=Ca(),Mme=Bi().dash,Ms=Mt().extendFlat,{shapeTexttemplateAttrs:kme,templatefallbackAttrs:Sme}=di(),qme=Sp();sE.exports=Tme({newshape:{visible:Ms({},Gu.visible,{}),showlegend:{valType:"boolean",dflt:!1},legend:Ms({},Gu.legend,{}),legendgroup:Ms({},Gu.legendgroup,{}),legendgrouptitle:{text:Ms({},Gu.legendgrouptitle.text,{}),font:lE({})},legendrank:Ms({},Gu.legendrank,{}),legendwidth:Ms({},Gu.legendwidth,{}),line:{color:{valType:"color"},width:{valType:"number",min:0,dflt:4},dash:Ms({},Mme,{dflt:"solid"})},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd"},opacity:{valType:"number",min:0,max:1,dflt:1},layer:{valType:"enumerated",values:["below","above","between"],dflt:"above"},drawdirection:{valType:"enumerated",values:["ortho","horizontal","vertical","diagonal"],dflt:"diagonal"},name:Ms({},Gu.name,{}),label:{text:{valType:"string",dflt:""},texttemplate:kme({newshape:!0},{keys:Object.keys(qme)}),texttemplatefallback:Sme({editType:"arraydraw"}),font:lE({}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right","start","middle","end"]},textangle:{valType:"angle",dflt:"auto"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},padding:{valType:"number",dflt:3,min:0}}},activeshape:{fillcolor:{valType:"color",dflt:"rgb(255,0,255)",description:"Sets the color filling the active shape' interior."},opacity:{valType:"number",min:0,max:1,dflt:.5}}},"none","from-root")});var cE=z((qWe,fE)=>{"use strict";var Lme=Bi().dash,Cme=Mt().extendFlat;fE.exports={newselection:{mode:{valType:"enumerated",values:["immediate","gradual"],dflt:"immediate",editType:"none"},line:{color:{valType:"color",editType:"none"},width:{valType:"number",min:1,dflt:1,editType:"none"},dash:Cme({},Lme,{dflt:"dot",editType:"none"}),editType:"none"},editType:"none"},activeselection:{fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"none"},opacity:{valType:"number",min:0,max:1,dflt:.5,editType:"none"},editType:"none"}}});var qp=z((LWe,vE)=>{"use strict";vE.exports=function(e){var r=e.editType;return{t:{valType:"number",dflt:0,editType:r},r:{valType:"number",dflt:0,editType:r},b:{valType:"number",dflt:0,editType:r},l:{valType:"number",dflt:0,editType:r},editType:r}}});var Ic=z((CWe,mE)=>{"use strict";var n4=Ca(),Dme=Ah(),Lp=Ii(),hE=uE(),dE=cE(),Eme=qp(),pE=Mt().extendFlat,Cp=n4({editType:"calc"});Cp.family.dflt='"Open Sans", verdana, arial, sans-serif';Cp.size.dflt=12;Cp.color.dflt=Lp.defaultLine;mE.exports={font:Cp,title:{text:{valType:"string",editType:"layoutstyle"},font:n4({editType:"layoutstyle"}),subtitle:{text:{valType:"string",editType:"layoutstyle"},font:n4({editType:"layoutstyle"}),editType:"layoutstyle"},xref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},yref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},x:{valType:"number",min:0,max:1,dflt:.5,editType:"layoutstyle"},y:{valType:"number",min:0,max:1,dflt:"auto",editType:"layoutstyle"},xanchor:{valType:"enumerated",dflt:"auto",values:["auto","left","center","right"],editType:"layoutstyle"},yanchor:{valType:"enumerated",dflt:"auto",values:["auto","top","middle","bottom"],editType:"layoutstyle"},pad:pE(Eme({editType:"layoutstyle"}),{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},editType:"layoutstyle"},uniformtext:{mode:{valType:"enumerated",values:[!1,"hide","show"],dflt:!1,editType:"plot"},minsize:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"},autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"plot"},height:{valType:"number",min:10,dflt:450,editType:"plot"},minreducedwidth:{valType:"number",min:2,dflt:64,editType:"plot"},minreducedheight:{valType:"number",min:2,dflt:64,editType:"plot"},margin:{l:{valType:"number",min:0,dflt:80,editType:"plot"},r:{valType:"number",min:0,dflt:80,editType:"plot"},t:{valType:"number",min:0,dflt:100,editType:"plot"},b:{valType:"number",min:0,dflt:80,editType:"plot"},pad:{valType:"number",min:0,dflt:0,editType:"plot"},autoexpand:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},computed:{valType:"any",editType:"none"},paper_bgcolor:{valType:"color",dflt:Lp.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:Lp.background,editType:"layoutstyle"},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},separators:{valType:"string",editType:"plot"},showlegend:{valType:"boolean",editType:"legend"},colorway:{valType:"colorlist",dflt:Lp.defaults,editType:"calc"},datarevision:{valType:"any",editType:"calc"},uirevision:{valType:"any",editType:"none"},editrevision:{valType:"any",editType:"none"},selectionrevision:{valType:"any",editType:"none"},template:{valType:"any",editType:"calc"},newshape:hE.newshape,activeshape:hE.activeshape,newselection:dE.newselection,activeselection:dE.activeselection,meta:{valType:"any",arrayOk:!0,editType:"plot"},transition:pE({},Dme.transition,{editType:"none"})}});var yE=z(()=>{(function(){if(!document.getElementById("ce8d464691048653ffe3a57c6c18ab566e8366f186677868cf724621a857b4fe")){var e=document.createElement("style");e.id="ce8d464691048653ffe3a57c6c18ab566e8366f186677868cf724621a857b4fe",e.textContent='.maplibregl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0 0 0/0);-webkit-touch-callout:none}.maplibregl-canvas{position:absolute;left:0;top:0}.maplibregl-map:fullscreen{width:100%;height:100%}.maplibregl-ctrl-group button.maplibregl-ctrl-compass{touch-action:none}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures,.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.maplibregl-ctrl-top-left{top:0;left:0}.maplibregl-ctrl-top-right{top:0;right:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{right:0;bottom:0}.maplibregl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{margin:10px 0 0 10px;float:left}.maplibregl-ctrl-top-right .maplibregl-ctrl{margin:10px 10px 0 0;float:right}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{margin:0 0 10px 10px;float:left}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{margin:0 10px 10px 0;float:right}.maplibregl-ctrl-group{border-radius:4px;background:#fff}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (forced-colors:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{width:29px;height:29px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.maplibregl-ctrl button{-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (forced-colors:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}@media (hover:hover){.maplibregl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}}.maplibregl-ctrl button:not(:disabled):active{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-globe .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22none%22%20stroke%3D%22%23333%22%20viewBox%3D%220%200%2022%2022%22%3E%3Ccircle%20cx%3D%2211%22%20cy%3D%2211%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M17.5%2011c0%204.819-3.02%208.5-6.5%208.5S4.5%2015.819%204.5%2011%207.52%202.5%2011%202.5s6.5%203.681%206.5%208.5Z%22%2F%3E%3Cpath%20d%3D%22M13.5%2011c0%202.447-.331%204.64-.853%206.206-.262.785-.562%201.384-.872%201.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831%2015.64%208.5%2013.446%208.5%2011s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872%201.777.522%201.565.853%203.76.853%206.206Z%22%2F%3E%3Cpath%20d%3D%22M11%207.5c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138q.07-.058.224-.138c.299-.151.763-.302%201.379-.434C7.378%205.666%209.091%205.5%2011%205.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0%209c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138%201.3%201.3%200%200%201%20.224-.138c.299-.151.763-.302%201.379-.434C7.378%2014.666%209.091%2014.5%2011%2014.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138a1.3%201.3%200%200%201-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0-4c-2.46%200-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5%201.5%200%200%201-.39-.272.3.3%200%200%201-.047-.064.3.3%200%200%201%20.048-.064c.066-.073.189-.167.389-.272.399-.21%201.009-.413%201.805-.59C6.328%209.722%208.54%209.5%2011%209.5s4.672.222%206.256.574c.795.177%201.405.38%201.804.59.2.105.323.2.39.272a.3.3%200%200%201%20.047.064.3.3%200%200%201-.048.064%201.4%201.4%200%200%201-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0%20.018v.002zm17.002.002v-.002zm0-.018v-.002z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-globe-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22none%22%20stroke%3D%22%2333b5e5%22%20viewBox%3D%220%200%2022%2022%22%3E%3Ccircle%20cx%3D%2211%22%20cy%3D%2211%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M17.5%2011c0%204.819-3.02%208.5-6.5%208.5S4.5%2015.819%204.5%2011%207.52%202.5%2011%202.5s6.5%203.681%206.5%208.5Z%22%2F%3E%3Cpath%20d%3D%22M13.5%2011c0%202.447-.331%204.64-.853%206.206-.262.785-.562%201.384-.872%201.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831%2015.64%208.5%2013.446%208.5%2011s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872%201.777.522%201.565.853%203.76.853%206.206Z%22%2F%3E%3Cpath%20d%3D%22M11%207.5c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138q.07-.058.224-.138c.299-.151.763-.302%201.379-.434C7.378%205.666%209.091%205.5%2011%205.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0%209c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138%201.3%201.3%200%200%201%20.224-.138c.299-.151.763-.302%201.379-.434C7.378%2014.666%209.091%2014.5%2011%2014.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138a1.3%201.3%200%200%201-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0-4c-2.46%200-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5%201.5%200%200%201-.39-.272.3.3%200%200%201-.047-.064.3.3%200%200%201%20.048-.064c.066-.073.189-.167.389-.272.399-.21%201.009-.413%201.805-.59C6.328%209.722%208.54%209.5%2011%209.5s4.672.222%206.256.574c.795.177%201.405.38%201.804.59.2.105.323.2.39.272a.3.3%200%200%201%20.047.064.3.3%200%200%201-.048.064%201.4%201.4%200%200%201-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0%20.018v.002zm17.002.002v-.002zm0-.018v-.002z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2022%2022%22%3E%3Cpath%20d%3D%22m1.754%2013.406%204.453-4.851%203.09%203.09%203.281%203.277.969-.969-3.309-3.312%203.844-4.121%206.148%206.886h1.082v-.855l-7.207-8.07-4.84%205.187L6.169%206.57l-5.48%205.965v.871ZM.688%2016.844h20.625v1.375H.688Zm0%200%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2022%2022%22%3E%3Cpath%20d%3D%22m1.754%2013.406%204.453-4.851%203.09%203.09%203.281%203.277.969-.969-3.309-3.312%203.844-4.121%206.148%206.886h1.082v-.855l-7.207-8.07-4.84%205.187L6.169%206.57l-5.48%205.965v.871ZM.688%2016.844h20.625v1.375H.688Zm0%200%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23aaa%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e58978%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e54e33%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{animation:maplibregl-spin 2s linear infinite}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23999%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e58978%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e54e33%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23666%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E")}}@keyframes maplibregl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.maplibregl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (forced-colors:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{min-height:20px;padding:2px 24px 2px 0;margin:10px;position:relative;background-color:#fff;color:#000;border-radius:12px;box-sizing:content-box}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 8px 2px 28px;border-radius:12px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{display:none;cursor:pointer;position:absolute;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px;outline:none;top:0;right:0;border:0}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;list-style:none}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button::-webkit-details-marker{display:none}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{top:0;right:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{top:0;left:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (forced-colors:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23fff%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E")}}@media screen and (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;white-space:nowrap;border-color:#333;border-style:none solid solid;border-width:medium 2px 2px;padding:0 5px;color:#333;box-sizing:border-box}.maplibregl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}[dir=rtl] .maplibregl-popup-anchor-left{flex-direction:row-reverse}[dir=rtl] .maplibregl-popup-anchor-right{flex-direction:row}[dir=rtl] .maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-start}[dir=rtl] .maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-start}.maplibregl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.maplibregl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.maplibregl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:15px 10px;pointer-events:auto}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{position:absolute;top:0;left:0;will-change:transform;transition:opacity .2s}.maplibregl-marker-draggable{cursor:grab}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.maplibregl-user-location-dot:before{content:"";position:absolute;animation:maplibregl-user-location-dot-pulse 2s infinite}.maplibregl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px rgba(0,0,0,.35)}@media (prefers-reduced-motion:reduce){.maplibregl-user-location-dot:before{animation:none}}@keyframes maplibregl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:#1da1f233;width:1px;height:1px;border-radius:100%}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}.maplibregl-cooperative-gesture-screen{background:rgba(0,0,0,.4);position:absolute;inset:0;display:flex;justify-content:center;align-items:center;color:#fff;padding:1rem;font-size:1.4em;line-height:1.2;opacity:0;pointer-events:none;transition:opacity 1s ease 1s;z-index:99999}.maplibregl-cooperative-gesture-screen.maplibregl-show{opacity:1;transition:opacity .05s}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:none}@media (hover:none),(pointer:coarse){.maplibregl-cooperative-gesture-screen .maplibregl-desktop-message{display:none}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:block}}.maplibregl-pseudo-fullscreen{position:fixed!important;width:100%!important;height:100%!important;top:0!important;left:0!important;z-index:99999}',document.head.appendChild(e)}})()});var Tr=z(jr=>{"use strict";var i4=_s(),gE=Ap(),bE=K_(),PWe=wh().addStyleRule,xE=Mt(),Pme=On(),Rme=Ic(),Fme=xE.extendFlat,o4=xE.extendDeepAll;jr.modules={};jr.allCategories={};jr.allTypes=[];jr.subplotsRegistry={};jr.componentsRegistry={};jr.layoutArrayContainers=[];jr.layoutArrayRegexes=[];jr.traceLayoutAttributes={};jr.localeRegistry={};jr.apiMethodRegistry={};jr.collectableSubplotTypes=null;jr.register=function(r){if(jr.collectableSubplotTypes=null,r)r&&!Array.isArray(r)&&(r=[r]);else throw new Error("No argument passed to Plotly.register.");for(var t=0;t{"use strict";var Ome=_c().timeFormat,DE=Br(),l4=_s(),Ss=(Tc(),ze(Ac)).mod,Hc=(jt(),ze(Zt)),Oi=Hc.BADNUM,Kn=Hc.ONEDAY,Th=Hc.ONEHOUR,ks=Hc.ONEMIN,Oc=Hc.ONESEC,Mh=Hc.EPOCHJD,Il=Tr(),ME=_c().utcFormat,Hme=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,Ume=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,kE=new Date().getFullYear()-70;function Bl(e){return e&&Il.componentsRegistry.calendars&&typeof e=="string"&&e!=="gregorian"}da.dateTick0=function(e,r){var t=Gme(e,!!r);if(r<2)return t;var a=da.dateTime2ms(t,e);return a+=Kn*(r-1),da.ms2DateTime(a,0,e)};function Gme(e,r){return Bl(e)?r?Il.getComponentMethod("calendars","CANONICAL_SUNDAY")[e]:Il.getComponentMethod("calendars","CANONICAL_TICK")[e]:r?"2000-01-02":"2000-01-01"}da.dfltRange=function(e){return Bl(e)?Il.getComponentMethod("calendars","DFLTRANGE")[e]:["2000-01-01","2001-01-01"]};da.isJSDate=function(e){return typeof e=="object"&&e!==null&&typeof e.getTime=="function"};var Ep,Pp;da.dateTime2ms=function(e,r){if(da.isJSDate(e)){var t=e.getTimezoneOffset()*ks,a=(e.getUTCMinutes()-e.getMinutes())*ks+(e.getUTCSeconds()-e.getSeconds())*Oc+(e.getUTCMilliseconds()-e.getMilliseconds());if(a){var n=3*ks;t=t-n/2+Ss(a-t+n/2,n)}return e=Number(e)-t,e>=Ep&&e<=Pp?e:Oi}if(typeof e!="string"&&typeof e!="number")return Oi;e=String(e);var i=Bl(r),o=e.charAt(0);i&&(o==="G"||o==="g")&&(e=e.slice(1),r="");var l=i&&r.slice(0,7)==="chinese",s=e.match(l?Ume:Hme);if(!s)return Oi;var u=s[1],f=s[3]||"1",c=Number(s[5]||1),v=Number(s[7]||0),d=Number(s[9]||0),p=Number(s[11]||0);if(i){if(u.length===2)return Oi;u=Number(u);var y;try{var m=Il.getComponentMethod("calendars","getCal")(r);if(l){var b=f.charAt(f.length-1)==="i";f=parseInt(f,10),y=m.newDate(u,m.toMonthIndex(u,f,b),c)}else y=m.newDate(u,Number(f),c)}catch(w){return Oi}return y?(y.toJD()-Mh)*Kn+v*Th+d*ks+p*Oc:Oi}u.length===2?u=(Number(u)+2e3-kE)%100+kE:u=Number(u),f-=1;var A=new Date(Date.UTC(2e3,f,c,v,d));return A.setUTCFullYear(u),A.getUTCMonth()!==f||A.getUTCDate()!==c?Oi:A.getTime()+p*Oc};Ep=da.MIN_MS=da.dateTime2ms("-9999");Pp=da.MAX_MS=da.dateTime2ms("9999-12-31 23:59:59.9999");da.isDateTime=function(e,r){return da.dateTime2ms(e,r)!==Oi};function Bc(e,r){return String(e+Math.pow(10,r)).slice(1)}var Dp=90*Kn,SE=3*Th,qE=5*ks;da.ms2DateTime=function(e,r,t){if(typeof e!="number"||!(e>=Ep&&e<=Pp))return Oi;r||(r=0);var a=Math.floor(Ss(e+.05,1)*10),n=Math.round(e-a/10),i,o,l,s,u,f;if(Bl(t)){var c=Math.floor(n/Kn)+Mh,v=Math.floor(Ss(e,Kn));try{i=Il.getComponentMethod("calendars","getCal")(t).fromJD(c).formatDate("yyyy-mm-dd")}catch(d){i=ME("G%Y-%m-%d")(new Date(n))}if(i.charAt(0)==="-")for(;i.length<11;)i="-0"+i.slice(1);else for(;i.length<10;)i="0"+i;o=r=Ep+Kn&&e<=Pp-Kn))return Oi;var r=Math.floor(Ss(e+.05,1)*10),t=new Date(Math.round(e-r/10)),a=Ome("%Y-%m-%d")(t),n=t.getHours(),i=t.getMinutes(),o=t.getSeconds(),l=t.getUTCMilliseconds()*10+r;return EE(a,n,i,o,l)};function EE(e,r,t,a,n){if((r||t||a||n)&&(e+=" "+Bc(r,2)+":"+Bc(t,2),(a||n)&&(e+=":"+Bc(a,2),n))){for(var i=4;n%10===0;)i-=1,n/=10;e+="."+Bc(n,i)}return e}da.cleanDate=function(e,r,t){if(e===Oi)return r;if(da.isJSDate(e)||typeof e=="number"&&isFinite(e)){if(Bl(t))return l4.error("JS Dates and milliseconds are incompatible with world calendars",e),r;if(e=da.ms2DateTimeLocal(+e),!e&&r!==void 0)return r}else if(!da.isDateTime(e,t))return l4.error("unrecognized date",e),r;return e};var Yme=/%\d?f/g,Vme=/%h/g,jme={1:"1",2:"1",3:"2",4:"2"};function LE(e,r,t,a){e=e.replace(Yme,function(i){var o=Math.min(+i.charAt(1)||6,6),l=(r/1e3%1+2).toFixed(o).slice(2).replace(/0+$/,"")||"0";return l});var n=new Date(Math.floor(r+.05));if(e=e.replace(Vme,function(){return jme[t("%q")(n)]}),Bl(a))try{e=Il.getComponentMethod("calendars","worldCalFmt")(e,r,a)}catch(i){return"Invalid"}return t(e)(n)}var Wme=[59,59.9,59.99,59.999,59.9999];function Xme(e,r){var t=Ss(e+.05,Kn),a=Bc(Math.floor(t/Th),2)+":"+Bc(Ss(Math.floor(t/ks),60),2);if(r!=="M"){DE(r)||(r=0);var n=Math.min(Ss(e/Oc,60),Wme[r]),i=(100+n).toFixed(r).slice(1);r>0&&(i=i.replace(/0+$/,"").replace(/[\.]$/,"")),a+=":"+i}return a}da.formatDate=function(e,r,t,a,n,i){if(n=Bl(n)&&n,!r)if(t==="y")r=i.year;else if(t==="m")r=i.month;else if(t==="d")r=i.dayMonth+` +`+i.year;else return Xme(e,t)+` +`+LE(i.dayMonthYear,e,a,n);return LE(r,e,a,n)};var CE=3*Kn;da.incrementMonth=function(e,r,t){t=Bl(t)&&t;var a=Ss(e,Kn);if(e=Math.round(e-a),t)try{var n=Math.round(e/Kn)+Mh,i=Il.getComponentMethod("calendars","getCal")(t),o=i.fromJD(n);return r%12?i.add(o,r,"m"):i.add(o,r/12,"y"),(o.toJD()-Mh)*Kn+a}catch(s){l4.error("invalid ms "+e+" in calendar "+t)}var l=new Date(e+CE);return l.setUTCMonth(l.getUTCMonth()+r)+a-CE};da.findExactDates=function(e,r){for(var t=0,a=0,n=0,i=0,o,l,s=Bl(r)&&Il.getComponentMethod("calendars","getCal")(r),u=0;u{"use strict";RE.exports=function(r){return r}});var f4=z(Ol=>{"use strict";var Zme=Br(),$me=_s(),Jme=s4(),Kme=(jt(),ze(Zt)).BADNUM,u4=1e-9;Ol.findBin=function(e,r,t){if(Zme(r.start))return t?Math.ceil((e-r.start)/r.size-u4)-1:Math.floor((e-r.start)/r.size+u4);var a=0,n=r.length,i=0,o=n>1?(r[n-1]-r[0])/(n-1):1,l,s;for(o>=0?s=t?Qme:eye:s=t?tye:rye,e+=o*u4*(t?-1:1)*(o>=0?1:-1);a90&&$me.log("Long binary search..."),a-1};function Qme(e,r){return er}function tye(e,r){return e>=r}Ol.sorterAsc=function(e,r){return e-r};Ol.sorterDes=function(e,r){return r-e};Ol.distinctVals=function(e){var r=e.slice();r.sort(Ol.sorterAsc);var t;for(t=r.length-1;t>-1&&r[t]===Kme;t--);for(var a=r[t]-r[0]||1,n=a/(t||1)/1e4,i=[],o,l=0;l<=t;l++){var s=r[l],u=s-o;o===void 0?(i.push(s),o=s):u>n&&(a=Math.min(a,u),i.push(s),o=s)}return{vals:i,minDiff:a}};Ol.roundUp=function(e,r,t){for(var a=0,n=r.length-1,i,o=0,l=t?0:1,s=t?1:0,u=t?Math.ceil:Math.floor;a0&&(a=1),t&&a)return e.sort(r)}return a?e:e.reverse()};Ol.findIndexOfMin=function(e,r){r=r||Jme;for(var t=1/0,a,n=0;nnye});function aye(e){return Object.keys(e).sort()}var nye,v4=St(()=>{"use strict";nye=aye});var FE=z(pa=>{"use strict";var kh=Br(),iye=Zn().isArrayOrTypedArray;pa.aggNums=function(e,r,t,a){var n,i;if((!a||a>t.length)&&(a=t.length),kh(r)||(r=!1),iye(t[0])){for(i=new Array(a),n=0;ne.length-1)return e[e.length-1];var t=r%1;return t*e[Math.ceil(r)]+(1-t)*e[Math.floor(r)]}});var OE=z((BWe,BE)=>{"use strict";var zE=(Tc(),ze(Ac)),h4=zE.mod,oye=zE.modHalf,Sh=Math.PI,qs=2*Sh;function lye(e){return e/180*Sh}function sye(e){return e/Sh*180}function d4(e){return Math.abs(e[1]-e[0])>qs-1e-14}function NE(e,r){return oye(r-e,qs)}function uye(e,r){return Math.abs(NE(e,r))}function IE(e,r){if(d4(r))return!0;var t,a;r[0]a&&(a+=qs);var n=h4(e,qs),i=n+qs;return n>=t&&n<=a||i>=t&&i<=a}function fye(e,r,t,a){if(!IE(r,a))return!1;var n,i;return t[0]=n&&e<=i}function p4(e,r,t,a,n,i,o){n=n||0,i=i||0;var l=d4([t,a]),s,u,f,c,v;l?(s=0,u=Sh,f=qs):t{"use strict";Yu.isLeftAnchor=function(r){return r.xanchor==="left"||r.xanchor==="auto"&&r.x<=1/3};Yu.isCenterAnchor=function(r){return r.xanchor==="center"||r.xanchor==="auto"&&r.x>1/3&&r.x<2/3};Yu.isRightAnchor=function(r){return r.xanchor==="right"||r.xanchor==="auto"&&r.x>=2/3};Yu.isTopAnchor=function(r){return r.yanchor==="top"||r.yanchor==="auto"&&r.y>=2/3};Yu.isMiddleAnchor=function(r){return r.yanchor==="middle"||r.yanchor==="auto"&&r.y>1/3&&r.y<2/3};Yu.isBottomAnchor=function(r){return r.yanchor==="bottom"||r.yanchor==="auto"&&r.y<=1/3}});var YE=z(Vu=>{"use strict";var m4=(Tc(),ze(Ac)).mod;Vu.segmentsIntersect=GE;function GE(e,r,t,a,n,i,o,l){var s=t-e,u=n-e,f=o-n,c=a-r,v=i-r,d=l-i,p=s*d-f*c;if(p===0)return null;var y=(u*d-f*v)/p,m=(u*c-s*v)/p;return m<0||m>1||y<0||y>1?null:{x:e+s*y,y:r+c*y}}Vu.segmentDistance=function(r,t,a,n,i,o,l,s){if(GE(r,t,a,n,i,o,l,s))return 0;var u=a-r,f=n-t,c=l-i,v=s-o,d=u*u+f*f,p=c*c+v*v,y=Math.min(Rp(u,f,d,i-r,o-t),Rp(u,f,d,l-r,s-t),Rp(c,v,p,r-i,t-o),Rp(c,v,p,a-i,n-o));return Math.sqrt(y)};function Rp(e,r,t,a,n){var i=a*e+n*r;if(i<0)return a*a+n*n;if(i>t){var o=a-e,l=n-r;return o*o+l*l}else{var s=a*r-n*e;return s*s/t}}var Fp,y4,UE;Vu.getTextLocation=function(r,t,a,n){if((r!==y4||n!==UE)&&(Fp={},y4=r,UE=n),Fp[a])return Fp[a];var i=r.getPointAtLength(m4(a-n/2,t)),o=r.getPointAtLength(m4(a+n/2,t)),l=Math.atan((o.y-i.y)/(o.x-i.x)),s=r.getPointAtLength(m4(a,t)),u=(s.x*4+i.x+o.x)/6,f=(s.y*4+i.y+o.y)/6,c={x:u,y:f,theta:l};return Fp[a]=c,c};Vu.clearLocationCache=function(){y4=null};Vu.getVisibleSegment=function(r,t,a){var n=t.left,i=t.right,o=t.top,l=t.bottom,s=0,u=r.getTotalLength(),f=u,c,v;function d(y){var m=r.getPointAtLength(y);y===0?c=m:y===u&&(v=m);var b=m.xi?m.x-i:0,A=m.yl?m.y-l:0;return Math.sqrt(b*b+A*A)}for(var p=d(s);p;){if(s+=p+a,s>f)return;p=d(s)}for(p=d(f);p;){if(f-=p+a,s>f)return;p=d(f)}return{min:s,max:f,len:f-s,total:u,isClosed:s===0&&f===u&&Math.abs(c.x-v.x)<.1&&Math.abs(c.y-v.y)<.1}};Vu.findPointOnPath=function(r,t,a,n){n=n||{};for(var i=n.pathLength||r.getTotalLength(),o=n.tolerance||.001,l=n.iterationLimit||30,s=r.getPointAtLength(0)[a]>r.getPointAtLength(i)[a]?-1:1,u=0,f=0,c=i,v,d,p;u0?c=v:f=v,u++}return d}});var zp=z(qh=>{"use strict";var Hl={};qh.throttle=function(r,t,a){var n=Hl[r],i=Date.now();if(!n){for(var o in Hl)Hl[o].tsn.ts+t){l();return}n.timer=setTimeout(function(){l(),n.timer=null},t)};qh.done=function(e){var r=Hl[e];return!r||!r.timer?Promise.resolve():new Promise(function(t){var a=r.onDone;r.onDone=function(){a&&a(),t(),r.onDone=null}})};qh.clear=function(e){if(e)VE(Hl[e]),delete Hl[e];else for(var r in Hl)qh.clear(r)};function VE(e){e&&e.timer!==null&&(clearTimeout(e.timer),e.timer=null)}});var WE=z((GWe,jE)=>{"use strict";jE.exports=function(r){r._clearResponsive&&(r._clearResponsive(),delete r._clearResponsive)}});var XE=z((YWe,Np)=>{"use strict";Np.exports=g4;Np.exports.isMobile=g4;Np.exports.default=g4;var dye=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|redmi|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,pye=/CrOS/,mye=/android|ipad|playbook|silk/i;function g4(e){e||(e={});let r=e.ua;if(!r&&typeof navigator!="undefined"&&(r=navigator.userAgent),r&&r.headers&&typeof r.headers["user-agent"]=="string"&&(r=r.headers["user-agent"]),typeof r!="string")return!1;let t=dye.test(r)&&!pye.test(r)||!!e.tablet&&mye.test(r);return!t&&e.tablet&&e.featureDetect&&navigator&&navigator.maxTouchPoints>1&&r.indexOf("Macintosh")!==-1&&r.indexOf("Safari")!==-1&&(t=!0),t}});var $E=z((VWe,ZE)=>{"use strict";var yye=Br(),gye=XE();ZE.exports=function(r){var t;if(r&&r.hasOwnProperty("userAgent")?t=r.userAgent:t=bye(),typeof t!="string")return!0;var a=gye({ua:{headers:{"user-agent":t}},tablet:!0,featureDetect:!1});if(!a)for(var n=t.split(" "),i=1;i-1;l--){var s=n[l];if(s.slice(0,8)==="Version/"){var u=s.slice(8).split(".")[0];if(yye(u)&&(u=+u),u>=13)return!0}}}return a};function bye(){var e;return typeof navigator!="undefined"&&(e=navigator.userAgent),e&&e.headers&&typeof e.headers["user-agent"]=="string"&&(e=e.headers["user-agent"]),e}});var KE=z((jWe,JE)=>{"use strict";var xye=Pr();JE.exports=function(r,t,a){var n=r.selectAll("g."+a.replace(/\s/g,".")).data(t,function(o){return o[0].trace.uid});n.exit().remove(),n.enter().append("g").attr("class",a),n.order();var i=r.classed("rangeplot")?"nodeRangePlot3":"node3";return n.each(function(o){o[0][i]=xye.select(this)}),n}});var eP=z((WWe,QE)=>{"use strict";var _ye=Tr();QE.exports=function(r,t){for(var a=r._context.locale,n=0;n<2;n++){for(var i=r._context.locales,o=0;o<2;o++){var l=(i[a]||{}).dictionary;if(l){var s=l[t];if(s)return s}i=_ye.localeRegistry}var u=a.split("-")[0];if(u===a)break;a=u}return t}});var tP=z((XWe,rP)=>{"use strict";rP.exports=function(r){for(var t={},a=[],n=0,i=0;i{"use strict";aP.exports=function(r){for(var t=Tye(r)?Aye:wye,a=[],n=0;n{"use strict";iP.exports=function(r,t){if(!t)return r;var a=1/Math.abs(t),n=a>1?(a*r+a*t)/a:r+t,i=String(n).length;if(i>16){var o=String(t).length,l=String(r).length;if(i>=l+o){var s=parseFloat(n).toPrecision(12);s.indexOf("e+")===-1&&(n=+s)}}return n}});var sP={};qt(sP,{default:()=>Sye});function kye(e){return typeof e=="string"&&(e=e.replace(Mye,"")),(0,lP.default)(e)?Number(e):void 0}var lP,Mye,Sye,uP=St(()=>{"use strict";lP=xc(Br());jt();Mye=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g;Sye=kye});var vP=z((KWe,cP)=>{"use strict";var qye=/<[^>]*>/g,Lye=/[\p{S}\p{P}]/gu,Cye=/[\p{Cc}\p{Cf}\uFE00-\uFE0F\u20E3]/gu,Dye=/�/g,Eye=/\s+/g,Ip="-",fP=Ip.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Pye=new RegExp(fP+"{3,}","g"),Rye=new RegExp(fP+"$","g"),Fye=60;function zye(e){return typeof e.toWellFormed=="function"?e.toWellFormed():new TextDecoder().decode(new TextEncoder().encode(e))}cP.exports=function(r,t=Fye){var a=zye(r!=null?r:"").replace(Dye,"").replace(qye," ").replace(Lye,n=>n===Ip?n:"").toLowerCase().trim().replace(Eye,Ip).replace(Cye,"").replace(Pye,Ip);return a.length<=t?a:Array.from(a).slice(0,t).join("").replace(Rye,"")}});var ke=z((QWe,TP)=>{"use strict";var Lh=Pr(),Nye=_c().utcFormat,Iye=f5().format,gP=Br(),bP=(jt(),ze(Zt)),xP=bP.FP_SAFE,Bye=-xP,hP=bP.BADNUM,he={};TP.exports=he;he.adjustFormat=function(r){if(!r||/^\d[.]\df/.test(r)||/[.]\d%/.test(r))return r;if(r==="0.f")return"~f";if(/^\d%/.test(r))return"~%";if(/^\ds/.test(r))return"~s";var t=(r.match(/^[+\-( ]?/)||[""])[0],a=r.slice(t.length);return!/^[~,.0$#]/.test(a)&&/[&fps]/.test(a)?t+"~"+a:r};var dP={};he.warnBadFormat=function(e){var r=String(e);dP[r]||(dP[r]=1,he.warn('encountered bad format: "'+r+'"'))};he.noFormat=function(e){return String(e)};he.numberFormat=function(e){var r;try{r=Iye(he.adjustFormat(e))}catch(t){return he.warnBadFormat(e),he.noFormat}return r};he.nestedProperty=G1();he.keyedContainer=lq();he.relativeAttr=uq();he.isPlainObject=Du();he.toLogRange=V1();he.relinkPrivateKeys=hq();var Ls=Zn();he.isArrayBuffer=Ls.isArrayBuffer;he.isTypedArray=Ls.isTypedArray;he.isArrayOrTypedArray=Ls.isArrayOrTypedArray;he.isArray1D=Ls.isArray1D;he.ensureArray=Ls.ensureArray;he.concat=Ls.concat;he.maxRowLength=Ls.maxRowLength;he.minRowLength=Ls.minRowLength;var _P=(Tc(),ze(Ac));he.mod=_P.mod;he.modHalf=_P.modHalf;var Cs=RC();he.valObjectMeta=Cs.valObjectMeta;he.coerce=Cs.coerce;he.coerce2=Cs.coerce2;he.coerceFont=Cs.coerceFont;he.coercePattern=Cs.coercePattern;he.coerceHoverinfo=Cs.coerceHoverinfo;he.coerceSelectionMarkerOpacity=Cs.coerceSelectionMarkerOpacity;he.validate=Cs.validate;var pi=PE();he.dateTime2ms=pi.dateTime2ms;he.isDateTime=pi.isDateTime;he.ms2DateTime=pi.ms2DateTime;he.ms2DateTimeLocal=pi.ms2DateTimeLocal;he.cleanDate=pi.cleanDate;he.isJSDate=pi.isJSDate;he.formatDate=pi.formatDate;he.incrementMonth=pi.incrementMonth;he.dateTick0=pi.dateTick0;he.dfltRange=pi.dfltRange;he.findExactDates=pi.findExactDates;he.MIN_MS=pi.MIN_MS;he.MAX_MS=pi.MAX_MS;var ju=f4();he.findBin=ju.findBin;he.sorterAsc=ju.sorterAsc;he.sorterDes=ju.sorterDes;he.distinctVals=ju.distinctVals;he.roundUp=ju.roundUp;he.sort=ju.sort;he.findIndexOfMin=ju.findIndexOfMin;he.sortObjectKeys=(v4(),ze(c4)).default;var Ul=FE();he.aggNums=Ul.aggNums;he.len=Ul.len;he.mean=Ul.mean;he.geometricMean=Ul.geometricMean;he.median=Ul.median;he.midRange=Ul.midRange;he.variance=Ul.variance;he.stdev=Ul.stdev;he.interp=Ul.interp;var Lo=Tp();he.init2dArray=Lo.init2dArray;he.transposeRagged=Lo.transposeRagged;he.dot=Lo.dot;he.translationMatrix=Lo.translationMatrix;he.rotationMatrix=Lo.rotationMatrix;he.rotationXYMatrix=Lo.rotationXYMatrix;he.apply3DTransform=Lo.apply3DTransform;he.apply2DTransform=Lo.apply2DTransform;he.apply2DTransform2=Lo.apply2DTransform2;he.convertCssMatrix=Lo.convertCssMatrix;he.inverseTransformMatrix=Lo.inverseTransformMatrix;var nl=OE();he.deg2rad=nl.deg2rad;he.rad2deg=nl.rad2deg;he.angleDelta=nl.angleDelta;he.angleDist=nl.angleDist;he.isFullCircle=nl.isFullCircle;he.isAngleInsideSector=nl.isAngleInsideSector;he.isPtInsideSector=nl.isPtInsideSector;he.pathArc=nl.pathArc;he.pathSector=nl.pathSector;he.pathAnnulus=nl.pathAnnulus;var Gc=HE();he.isLeftAnchor=Gc.isLeftAnchor;he.isCenterAnchor=Gc.isCenterAnchor;he.isRightAnchor=Gc.isRightAnchor;he.isTopAnchor=Gc.isTopAnchor;he.isMiddleAnchor=Gc.isMiddleAnchor;he.isBottomAnchor=Gc.isBottomAnchor;var Yc=YE();he.segmentsIntersect=Yc.segmentsIntersect;he.segmentDistance=Yc.segmentDistance;he.getTextLocation=Yc.getTextLocation;he.clearLocationCache=Yc.clearLocationCache;he.getVisibleSegment=Yc.getVisibleSegment;he.findPointOnPath=Yc.findPointOnPath;var Hp=Mt();he.extendFlat=Hp.extendFlat;he.extendDeep=Hp.extendDeep;he.extendDeepAll=Hp.extendDeepAll;he.extendDeepNoArrays=Hp.extendDeepNoArrays;var b4=_s();he.log=b4.log;he.warn=b4.warn;he.error=b4.error;var Oye=(Fc(),ze(_h));he.counterRegex=Oye.counter;var x4=zp();he.throttle=x4.throttle;he.throttleDone=x4.done;he.clearThrottle=x4.clear;var Co=wh();he.getGraphDiv=Co.getGraphDiv;he.isPlotDiv=Co.isPlotDiv;he.removeElement=Co.removeElement;he.addStyleRule=Co.addStyleRule;he.addRelatedStyleRule=Co.addRelatedStyleRule;he.deleteRelatedStyleRule=Co.deleteRelatedStyleRule;he.setStyleOnHover=Co.setStyleOnHover;he.getFullTransformMatrix=Co.getFullTransformMatrix;he.getElementTransformMatrix=Co.getElementTransformMatrix;he.getElementAndAncestors=Co.getElementAndAncestors;he.equalDomRects=Co.equalDomRects;he.clearResponsive=WE();he.preserveDrawingBuffer=$E();he.makeTraceGroups=KE();he._=eP();he.notifier=G_();he.filterUnique=tP();he.filterVisible=nP();he.pushUnique=K_();he.increment=oP();he.cleanNumber=(uP(),ze(sP)).default;he.slugify=vP();he.ensureNumber=function(r){return gP(r)?(r=Number(r),r>xP||r=r?!1:gP(e)&&e>=0&&e%1===0};he.noop=Ap();he.identity=s4();he.repeat=function(e,r){for(var t=new Array(r),a=0;at?Math.max(t,Math.min(r,e)):Math.max(r,Math.min(t,e))};he.bBoxIntersect=function(e,r,t){return t=t||0,e.left<=r.right+t&&r.left<=e.right+t&&e.top<=r.bottom+t&&r.top<=e.bottom+t};he.simpleMap=function(e,r,t,a,n){for(var i=e.length,o=new Array(i),l=0;l=Math.pow(2,t)?n>10?(he.warn("randstr failed uniqueness"),o):e(r,t,a,(n||0)+1):o};he.OptionControl=function(e,r){e||(e={}),r||(r="opt");var t={};return t.optionList=[],t._newoption=function(a){a[r]=e,t[a.name]=a,t.optionList.push(a)},t["_"+r]=e,t};he.smooth=function(e,r){if(r=Math.round(r)||0,r<2)return e;var t=e.length,a=2*t,n=2*r-1,i=new Array(n),o=new Array(t),l,s,u,f;for(l=0;l=a&&(u-=a*Math.floor(u/a)),u<0?u=-1-u:u>=t&&(u=a-1-u),f+=e[u]*i[s];o[l]=f}return o};he.syncOrAsync=function(e,r,t){var a,n;function i(){return he.syncOrAsync(e,r,t)}for(;e.length;)if(n=e.splice(0,1)[0],a=n(r),a&&a.then)return a.then(i);return t&&t(r)};he.stripTrailingSlash=function(e){return e.slice(-1)==="/"?e.slice(0,-1):e};he.noneOrAll=function(e,r,t){if(e){var a=!1,n=!0,i,o;for(i=0;i0?n:0})};he.fillArray=function(e,r,t,a){if(a=a||he.identity,he.isArrayOrTypedArray(e))for(var n=0;nGye.test(window.navigator.userAgent);var Yye=/Firefox\/(\d+)\.\d+/;he.getFirefoxVersion=function(){var e=Yye.exec(window.navigator.userAgent);if(e&&e.length===2){var r=parseInt(e[1]);if(!isNaN(r))return r}return null};he.isD3Selection=function(e){return e instanceof Lh.selection};he.ensureSingle=function(e,r,t,a){var n=e.select(r+(t?"."+t:""));if(n.size())return n;var i=e.append(r);return t&&i.classed(t,!0),a&&i.call(a),i};he.ensureSingleById=function(e,r,t,a){var n=e.select(r+"#"+t);if(n.size())return n;var i=e.append(r).attr("id",t);return a&&i.call(a),i};he.objectFromPath=function(e,r){for(var t=e.split("."),a,n=a={},i=0;i1?n+o[1]:"";if(i&&(o.length>1||l.length>4||t))for(;a.test(l);)l=l.replace(a,"$1"+i+"$2");return l+s};he.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var AP=/^\w*$/;he.templateString=function(e,r){var t={};return e.replace(he.TEMPLATE_STRING_REGEX,function(a,n){var i;return AP.test(n)?i=r[n]:(t[n]=t[n]||he.nestedProperty(r,n).get,i=t[n](!0)),i!==void 0?i:""})};var Wye={max:10,count:0,name:"hovertemplate"};he.hovertemplateString=e=>_4(Vt(At({},e),{opts:Wye}));var Xye={max:10,count:0,name:"texttemplate"};he.texttemplateString=e=>_4(Vt(At({},e),{opts:Xye}));var Zye=/^(\S+)([\*\/])(-?\d+(\.\d+)?)$/;function $ye(e){var r=e.match(Zye);return r?{key:r[1],op:r[2],number:Number(r[3])}:{key:e,op:null,number:null}}var Jye={max:10,count:0,name:"texttemplate",parseMultDiv:!0};he.texttemplateStringForShapes=e=>_4(Vt(At({},e),{opts:Jye}));var pP=/^[:|\|]/;function _4({data:e=[],locale:r,fallback:t,labels:a={},opts:n,template:i}){return i.replace(he.TEMPLATE_STRING_REGEX,(o,l,s)=>{let u=["xother","yother"].includes(l),f=["_xother","_yother"].includes(l),c=["_xother_","_yother_"].includes(l),v=["xother_","yother_"].includes(l),d=u||f||v||c;(f||c)&&(l=l.substring(1)),(v||c)&&(l=l.substring(0,l.length-1));let p=null,y=null;if(n.parseMultDiv){var m=$ye(l);l=m.key,p=m.op,y=m.number}let b;if(d){if(a[l]===void 0)return"";b=a[l]}else for(let _ of e)if(_){if(_.hasOwnProperty(l)){b=_[l];break}if(AP.test(l)||(b=he.nestedProperty(_,l).get(!0)),b!==void 0)break}if(b===void 0){let{count:_,max:k,name:T}=n,q=t===!1?o:t;return _=Op&&o<=mP,u=l>=Op&&l<=mP;if(s&&(a=10*a+o-Op),u&&(n=10*n+l-Op),!s||!u){if(a!==n)return a-n;if(o!==l)return o-l}}return n-a};var Uc=2e9;he.seedPseudoRandom=function(){Uc=2e9};he.pseudoRandom=function(){var e=Uc;return Uc=(69069*Uc+1)%4294967296,Math.abs(Uc-e)<429496729?he.pseudoRandom():Uc/4294967296};he.fillText=function(e,r,t){var a=Array.isArray(t)?function(o){t.push(o)}:function(o){t.text=o},n=he.extractOption(e,r,"htx","hovertext");if(he.isValidTextValue(n))return a(n);var i=he.extractOption(e,r,"tx","text");if(he.isValidTextValue(i))return a(i)};he.isValidTextValue=function(e){return e||e===0};he.formatPercent=function(e,r){r=r||0;for(var t=(Math.round(100*e*Math.pow(10,r))*Math.pow(.1,r)).toFixed(r)+"%",a=0;a1&&(u=1):u=0,he.strTranslate(n-u*(t+o),i-u*(a+l))+he.strScale(u)+(s?"rotate("+s+(r?"":" "+t+" "+a)+")":"")};he.setTransormAndDisplay=function(e,r){e.attr("transform",he.getTextTransform(r)),e.style("display",r.scale?null:"none")};he.ensureUniformFontSize=function(e,r){var t=he.extendFlat({},r);return t.size=Math.max(r.size,e._fullLayout.uniformtext.minsize||0),t};he.join2=function(e,r,t){var a=e.length;return a>1?e.slice(0,-1).join(r)+t+e[a-1]:e.join(r)};he.bigFont=function(e){return Math.round(1.2*e)};var yP=he.getFirefoxVersion(),Kye=yP!==null&&yP<86;he.getPositionFromD3Event=function(){return Kye?[Lh.event.layerX,Lh.event.layerY]:[Lh.event.offsetX,Lh.event.offsetY]}});var SP=z(()=>{"use strict";var Qye=ke(),MP={"X,X div":'direction:ltr;font-family:"Open Sans",verdana,arial,sans-serif;margin:0;padding:0;border:0;',"X input,X button":'font-family:"Open Sans",verdana,arial,sans-serif;',"X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;","X .ease-bg":"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;","X .modebar--hover>:not(.watermark)":"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X:focus-within .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-group a":"display:grid;place-content:center;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;border:none;background:rgba(0,0,0,0);","X .modebar-btn svg":"position:relative;","X .modebar-btn:focus-visible":"outline:1px solid #000;outline-offset:1px;border-radius:3px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":'content:"";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',"X [data-title]:after":"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .vertical [data-title]:before,X .vertical [data-title]:after":"top:0%;right:200%;","X .vertical [data-title]:before":"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;","X .plotly-cloud-dialog":'font-family:"Open Sans",verdana,arial,sans-serif;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1001;display:flex;align-items:center;justify-content:center;background-color:rgba(0,0,0,.4);',"X .plotly-cloud-dialog .plotly-cloud-dialog-box":"box-sizing:border-box;min-width:300px;max-width:420px;padding:20px 24px;background-color:#fff;border:1px solid #e0e2e5;border-radius:4px;box-shadow:0 4px 16px rgba(0,0,0,.25);font-size:13px;color:#2a3f5f;","X .plotly-cloud-dialog .plotly-cloud-dialog-title":"font-size:16px;font-weight:bold;margin-bottom:12px;","X .plotly-cloud-dialog .plotly-cloud-dialog-message":"line-height:1.5;overflow-wrap:break-word;word-wrap:break-word;","X .plotly-cloud-dialog .plotly-cloud-dialog-message--hostname":"font-weight:bold;text-decoration:underline;","X .plotly-cloud-dialog .plotly-cloud-dialog-message--account":"margin-top:16px;padding:8px;border-radius:3px;font-size:.9em;background-color:#edf1f8;","X .plotly-cloud-dialog .plotly-cloud-dialog-buttons":"display:flex;justify-content:flex-end;margin-top:20px;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn":"font-family:inherit;font-size:13px;padding:7px 16px;margin-left:8px;border-radius:3px;border:1px solid rgba(0,0,0,0);cursor:pointer;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn:focus-visible":"outline:2px solid #447adb;outline-offset:1px;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel":"background-color:#f3f3f3;margin-left:auto;color:#777;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel:hover":"background-color:#e0e2e5;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm":"background-color:#447adb;color:#fff;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm:hover":"background-color:#1d3b84;",Y:'font-family:"Open Sans",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',"Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;","Y .notifier-close":"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(w4 in MP)kP=w4.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier"),Qye.addStyleRule(kP,MP[w4]);var kP,w4});var A4=z((aXe,qP)=>{qP.exports=!0});var M4=z((nXe,LP)=>{"use strict";var ege=A4(),T4;typeof window.matchMedia=="function"?T4=!window.matchMedia("(hover: none)").matches:T4=ege;LP.exports=T4});var Wu=z((iXe,k4)=>{"use strict";var Vc=typeof Reflect=="object"?Reflect:null,CP=Vc&&typeof Vc.apply=="function"?Vc.apply:function(r,t,a){return Function.prototype.apply.call(r,t,a)},Up;Vc&&typeof Vc.ownKeys=="function"?Up=Vc.ownKeys:Object.getOwnPropertySymbols?Up=function(r){return Object.getOwnPropertyNames(r).concat(Object.getOwnPropertySymbols(r))}:Up=function(r){return Object.getOwnPropertyNames(r)};function rge(e){console&&console.warn&&console.warn(e)}var EP=Number.isNaN||function(r){return r!==r};function Ot(){Ot.init.call(this)}k4.exports=Ot;k4.exports.once=ige;Ot.EventEmitter=Ot;Ot.prototype._events=void 0;Ot.prototype._eventsCount=0;Ot.prototype._maxListeners=void 0;var DP=10;function Gp(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(Ot,"defaultMaxListeners",{enumerable:!0,get:function(){return DP},set:function(e){if(typeof e!="number"||e<0||EP(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");DP=e}});Ot.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};Ot.prototype.setMaxListeners=function(r){if(typeof r!="number"||r<0||EP(r))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+r+".");return this._maxListeners=r,this};function PP(e){return e._maxListeners===void 0?Ot.defaultMaxListeners:e._maxListeners}Ot.prototype.getMaxListeners=function(){return PP(this)};Ot.prototype.emit=function(r){for(var t=[],a=1;a0&&(o=t[0]),o instanceof Error)throw o;var l=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw l.context=o,l}var s=i[r];if(s===void 0)return!1;if(typeof s=="function")CP(s,this,t);else for(var u=s.length,f=IP(s,u),a=0;a0&&o.length>n&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(r)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=r,l.count=o.length,rge(l)}return e}Ot.prototype.addListener=function(r,t){return RP(this,r,t,!1)};Ot.prototype.on=Ot.prototype.addListener;Ot.prototype.prependListener=function(r,t){return RP(this,r,t,!0)};function tge(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function FP(e,r,t){var a={fired:!1,wrapFn:void 0,target:e,type:r,listener:t},n=tge.bind(a);return n.listener=t,a.wrapFn=n,n}Ot.prototype.once=function(r,t){return Gp(t),this.on(r,FP(this,r,t)),this};Ot.prototype.prependOnceListener=function(r,t){return Gp(t),this.prependListener(r,FP(this,r,t)),this};Ot.prototype.removeListener=function(r,t){var a,n,i,o,l;if(Gp(t),n=this._events,n===void 0)return this;if(a=n[r],a===void 0)return this;if(a===t||a.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[r],n.removeListener&&this.emit("removeListener",r,a.listener||t));else if(typeof a!="function"){for(i=-1,o=a.length-1;o>=0;o--)if(a[o]===t||a[o].listener===t){l=a[o].listener,i=o;break}if(i<0)return this;i===0?a.shift():age(a,i),a.length===1&&(n[r]=a[0]),n.removeListener!==void 0&&this.emit("removeListener",r,l||t)}return this};Ot.prototype.off=Ot.prototype.removeListener;Ot.prototype.removeAllListeners=function(r){var t,a,n;if(a=this._events,a===void 0)return this;if(a.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):a[r]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete a[r]),this;if(arguments.length===0){var i=Object.keys(a),o;for(n=0;n=0;n--)this.removeListener(r,t[n]);return this};function zP(e,r,t){var a=e._events;if(a===void 0)return[];var n=a[r];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?nge(n):IP(n,n.length)}Ot.prototype.listeners=function(r){return zP(this,r,!0)};Ot.prototype.rawListeners=function(r){return zP(this,r,!1)};Ot.listenerCount=function(e,r){return typeof e.listenerCount=="function"?e.listenerCount(r):NP.call(e,r)};Ot.prototype.listenerCount=NP;function NP(e){var r=this._events;if(r!==void 0){var t=r[e];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}Ot.prototype.eventNames=function(){return this._eventsCount>0?Up(this._events):[]};function IP(e,r){for(var t=new Array(r),a=0;a{"use strict";var S4=Wu().EventEmitter,lge={init:function(e){if(e._ev instanceof S4)return e;var r=new S4,t=new S4;return e._ev=r,e._internalEv=t,e.on=r.on.bind(r),e.once=r.once.bind(r),e.removeListener=r.removeListener.bind(r),e.removeAllListeners=r.removeAllListeners.bind(r),e._internalOn=t.on.bind(t),e._internalOnce=t.once.bind(t),e._removeInternalListener=t.removeListener.bind(t),e._removeAllInternalListeners=t.removeAllListeners.bind(t),e.emit=function(a,n){r.emit(a,n),t.emit(a,n)},typeof e.addEventListener=="function"&&e.addEventListener("wheel",()=>{},{passive:!0}),e},triggerHandler:function(e,r,t){var a,n=e._ev;if(!n)return;var i=n._events[r];if(!i)return;function o(s){if(s.listener){if(n.removeListener(r,s.listener),!s.fired)return s.fired=!0,s.listener.apply(n,[t])}else return s.apply(n,[t])}i=Array.isArray(i)?i:[i];var l;for(l=0;l{"use strict";var HP=ke(),sge=xs().dfltConfig;function uge(e,r){for(var t=[],a,n=0;nsge.queueLength&&(e.undoQueue.queue.shift(),e.undoQueue.index--)};Gl.startSequence=function(e){e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},e.undoQueue.sequence=!0,e.undoQueue.beginSequence=!0};Gl.stopSequence=function(e){e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},e.undoQueue.sequence=!1,e.undoQueue.beginSequence=!1};Gl.undo=function(r){var t,a;if(!(r.undoQueue===void 0||isNaN(r.undoQueue.index)||r.undoQueue.index<=0)){for(r.undoQueue.index--,t=r.undoQueue.queue[r.undoQueue.index],r.undoQueue.inSequence=!0,a=0;a=r.undoQueue.queue.length)){for(t=r.undoQueue.queue[r.undoQueue.index],r.undoQueue.inSequence=!0,a=0;a{"use strict";YP.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}});var Xc=z(Da=>{"use strict";var Hi=Tr(),Dh=ke(),Vp=On(),L4=Ic(),fge=q4(),cge=Ah(),vge=xs().configAttributes,VP=qo(),Do=Dh.extendDeepAll,jc=Dh.isPlainObject,hge=Dh.isArrayOrTypedArray,jp=Dh.nestedProperty,dge=Dh.valObjectMeta,C4="_isSubplotObj",Wp="_isLinkedToArray",pge="_arrayAttrRegexps",WP="_deprecated",D4=[C4,Wp,pge,WP];Da.IS_SUBPLOT_OBJ=C4;Da.IS_LINKED_TO_ARRAY=Wp;Da.DEPRECATED=WP;Da.UNDERSCORE_ATTRS=D4;Da.get=function(){var e={};return Hi.allTypes.forEach(function(r){e[r]=yge(r)}),{defs:{valObjects:dge,metaKeys:D4.concat(["description","role","editType","impliedEdits"]),editType:{traces:VP.traces,layout:VP.layout},impliedEdits:{}},traces:e,layout:gge(),frames:bge(),animation:Wc(cge),config:Wc(vge)}};Da.crawl=function(e,r,t,a){var n=t||0;a=a||"",Object.keys(e).forEach(function(i){var o=e[i];if(D4.indexOf(i)===-1){var l=(a?a+".":"")+i;r(o,i,e,n,l),!Da.isValObject(o)&&jc(o)&&i!=="impliedEdits"&&Da.crawl(o,r,n+1,l)}})};Da.isValObject=function(e){return e&&e.valType!==void 0};Da.findArrayAttributes=function(e){var r=[],t=[],a=[],n,i;function o(s,u,f,c){t=t.slice(0,c).concat([u]),a=a.slice(0,c).concat([s&&s._isLinkedToArray]);var v=s&&(s.valType==="data_array"||s.arrayOk===!0)&&!(t[c-1]==="colorbar"&&(u==="ticktext"||u==="tickvals"));v&&l(n,0,"")}function l(s,u,f){var c=s[t[u]],v=f+t[u];if(u===t.length-1)hge(c)&&r.push(i+v);else if(a[u]){if(Array.isArray(c))for(var d=0;d=i.length)return!1;if(e.dimensions===2){if(t++,r.length===t)return e;var o=r[t];if(!Yp(o))return!1;e=i[n][o]}else e=i[n]}else e=i}}return e}function Yp(e){return e===Math.round(e)&&e>=0}function yge(e){var r,t;r=Hi.modules[e]._module,t=r.basePlotModule;var a={};a.type=null;var n=Do({},Vp),i=Do({},r.attributes);Da.crawl(i,function(s,u,f,c,v){jp(n,v).set(void 0),s===void 0&&jp(i,v).set(void 0)}),Do(a,n),Hi.traceIs(e,"noOpacity")&&delete a.opacity,Hi.traceIs(e,"showLegend")||(delete a.showlegend,delete a.legendgroup),Hi.traceIs(e,"noHover")&&(delete a.hoverinfo,delete a.hoverlabel),r.selectPoints||delete a.selectedpoints,Do(a,i),t.attributes&&Do(a,t.attributes),a.type=e;var o={meta:r.meta||{},categories:r.categories||{},animatable:!!r.animatable,type:e,attributes:Wc(a)};if(r.layoutAttributes){var l={};Do(l,r.layoutAttributes),o.layoutAttributes=Wc(l)}return r.animatable||Da.crawl(o,function(s){Da.isValObject(s)&&"anim"in s&&delete s.anim}),o}function gge(){var e={},r,t;Do(e,L4);for(r in Hi.subplotsRegistry)if(t=Hi.subplotsRegistry[r],!!t.layoutAttributes)if(Array.isArray(t.attr))for(var a=0;a{"use strict";var Zc=ke(),Tge=On(),Ds="templateitemname",E4={name:{valType:"string",editType:"none"}};E4[Ds]={valType:"string",editType:"calc"};Xu.templatedArray=function(e,r){return r._isLinkedToArray=e,r.name=E4.name,r[Ds]=E4[Ds],r};Xu.traceTemplater=function(e){var r={},t,a;for(t in e)a=e[t],Array.isArray(a)&&a.length&&(r[t]=0);function n(i){t=Zc.coerce(i,{},Tge,"type");var o={type:t,_template:null};if(t in r){a=e[t];var l=r[t]%a.length;r[t]++,o._template=a[l]}return o}return{newTrace:n}};Xu.newContainer=function(e,r,t){var a=e._template,n=a&&(a[r]||t&&a[t]);Zc.isPlainObject(n)||(n=null);var i=e[r]={_template:n};return i};Xu.arrayTemplater=function(e,r,t){var a=e._template,n=a&&a[$P(r)],i=a&&a[r];(!Array.isArray(i)||!i.length)&&(i=[]);var o={};function l(u){var f={name:u.name,_input:u},c=f[Ds]=u[Ds];if(!ZP(c))return f._template=n,f;for(var v=0;v=a&&(t._input||{})._templateitemname;i&&(n=a);var o=r+"["+n+"]",l;function s(){l={},i&&(l[o]={},l[o][Ds]=i)}s();function u(d,p){l[d]=p}function f(d,p){i?Zc.nestedProperty(l[o],d).set(p):l[o+"."+d]=p}function c(){var d=l;return s(),d}function v(d,p){d&&f(d,p);var y=c();for(var m in y)Zc.nestedProperty(e,m).set(y[m])}return{modifyBase:u,modifyItem:f,getUpdateObj:c,applyUpdate:v}}});var Ea={};qt(Ea,{AX_ID_PATTERN:()=>Lge,AX_NAME_PATTERN:()=>Cge,DFLTRANGEX:()=>Ige,DFLTRANGEY:()=>Bge,DRAGGERSIZE:()=>zge,HOUR_PATTERN:()=>Ege,MINDRAG:()=>Rge,MINZOOM:()=>Fge,REDRAWDELAY:()=>Nge,SUBPLOT_PATTERN:()=>Dge,WEEKDAY_PATTERN:()=>Pge,attrRegex:()=>kge,clipOnAxisFalseQuery:()=>Hge,idRegex:()=>Mge,layerValue2layerClass:()=>Uge,traceLayerClasses:()=>Oge,xAxisMatch:()=>Sge,yAxisMatch:()=>qge,zindexSeparator:()=>Gge});var Mge,kge,Sge,qge,Lge,Cge,Dge,Ege,Pge,Rge,Fge,zge,Nge,Ige,Bge,Oge,Hge,Uge,Gge,Pa=St(()=>{"use strict";Fc();Mge={x:Uu("x","( domain)?"),y:Uu("y","( domain)?")},kge=Uu("[xy]axis"),Sge=Uu("xaxis"),qge=Uu("yaxis"),Lge=/^[xyz][0-9]*( domain)?$/,Cge=/^[xyz]axis[0-9]*$/,Dge=/^x([0-9]*)y([0-9]*)$/,Ege="hour",Pge="day of week",Rge=8,Fge=20,zge=20,Nge=50,Ige=[-1,6],Bge=[-1,4],Oge=["imagelayer","heatmaplayer","contourcarpetlayer","contourlayer","funnellayer","waterfalllayer","barlayer","carpetlayer","violinlayer","boxlayer","ohlclayer","scattercarpetlayer","scatterlayer"],Hge=[".scatterlayer",".barlayer",".funnellayer",".waterfalllayer"],Uge={"above traces":"above","below traces":"below"},Gge="z"});var Aa=z(Qn=>{"use strict";var Yge=Tr(),P4=(Pa(),ze(Ea));Qn.id2name=function(r){if(!(typeof r!="string"||!r.match(P4.AX_ID_PATTERN))){var t=r.split(" ")[0].slice(1);return t==="1"&&(t=""),r.charAt(0)+"axis"+t}};Qn.name2id=function(r){if(r.match(P4.AX_NAME_PATTERN)){var t=r.slice(5);return t==="1"&&(t=""),r.charAt(0)+t}};Qn.cleanId=function(r,t,a){var n=/( domain)$/.test(r);if(!(typeof r!="string"||!r.match(P4.AX_ID_PATTERN))&&!(t&&r.charAt(0)!==t)&&!(n&&!a)){var i=r.split(" ")[0].slice(1).replace(/^0+/,"");return i==="1"&&(i=""),r.charAt(0)+i+(n&&a?" domain":"")}};Qn.list=function(e,r,t){var a=e._fullLayout;if(!a)return[];var n=Qn.listIds(e,r),i=new Array(n.length),o;for(o=0;oa?1:-1:+(e.slice(1)||1)-+(r.slice(1)||1)};Qn.ref2id=function(e){return/^[xyz]/.test(e)?e.split(" ")[0]:!1};function JP(e,r){if(r&&r.length){for(var t=0;t{"use strict";function Vge(e){var r=e._fullLayout._zoomlayer;r&&r.selectAll(".outline-controllers").remove()}function jge(e){var r=e._fullLayout._zoomlayer;r&&r.selectAll(".select-outline").remove(),e._fullLayout._outlining=!1}KP.exports={clearOutlineControllers:Vge,clearOutline:jge}});var Xp=z((dXe,QP)=>{"use strict";QP.exports={scattermode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},scattergap:{valType:"number",min:0,max:1,editType:"calc"}}});var Jp=z($p=>{"use strict";var Zp=Tr(),pXe=(Pa(),ze(Ea)).SUBPLOT_PATTERN;$p.getSubplotCalcData=function(e,r,t){var a=Zp.subplotsRegistry[r];if(!a)return[];for(var n=a.attr,i=[],o=0;o{"use strict";var Wge=Tr(),$c=ke();Zu.manageCommandObserver=function(e,r,t,a){var n={},i=!0;r&&r._commandObserver&&(n=r._commandObserver),n.cache||(n.cache={}),n.lookupTable={};var o=Zu.hasSimpleAPICommandBindings(e,t,n.lookupTable);if(r&&r._commandObserver){if(o)return n;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,n}if(o){eR(e,o,n.cache),n.check=function(){if(i){var f=eR(e,o,n.cache);return f.changed&&a&&n.lookupTable[f.value]!==void 0&&(n.disable(),Promise.resolve(a({value:f.value,type:o.type,prop:o.prop,traces:o.traces,index:n.lookupTable[f.value]})).then(n.enable,n.enable)),f.changed}};for(var l=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],s=0;s0?".":"")+n;$c.isPlainObject(i)?R4(i,r,o,a+1):r(o,n,i)}})}});var ma=z((bXe,hR)=>{"use strict";var gXe=Pr(),Zge=_c().timeFormatLocale,$ge=f5().formatLocale,Eh=Br(),Jge=v5(),Kge=Jv().version,et=Tr(),Qge=Xc(),e3e=Ct(),br=ke(),r3e=qr(),nR=(jt(),ze(Zt)).BADNUM,ei=Aa(),t3e=Es().clearOutline,a3e=Xp(),F4=Ah(),n3e=q4(),i3e=Jp().getModuleCalcData,iR=br.relinkPrivateKeys,$u=br._,tr=hR.exports={};br.extendFlat(tr,et);tr.attributes=On();tr.attributes.type.values=tr.allTypes;tr.fontAttrs=Ca();tr.layoutAttributes=Ic();var Qp=aR();tr.executeAPICommand=Qp.executeAPICommand;tr.computeAPICommandBindings=Qp.computeAPICommandBindings;tr.manageCommandObserver=Qp.manageCommandObserver;tr.hasSimpleAPICommandBindings=Qp.hasSimpleAPICommandBindings;tr.redrawText=function(e){return e=br.getGraphDiv(e),new Promise(function(r){setTimeout(function(){e._fullLayout&&(et.getComponentMethod("annotations","draw")(e),et.getComponentMethod("legend","draw")(e),et.getComponentMethod("colorbar","draw")(e),r(tr.previousPromises(e)))},300)})};tr.resize=function(e){e=br.getGraphDiv(e);var r,t=new Promise(function(a,n){(!e||br.isHidden(e))&&n(new Error("Resize must be passed a displayed plot div element.")),e._redrawTimer&&clearTimeout(e._redrawTimer),e._resolveResize&&(r=e._resolveResize),e._resolveResize=a,e._redrawTimer=setTimeout(function(){if(!e.layout||e.layout.width&&e.layout.height||br.isHidden(e)){a(e);return}delete e.layout.width,delete e.layout.height;var i=e.changed;e.autoplay=!0,et.call("relayout",e,{autosize:!0}).then(function(){e.changed=i,e._resolveResize===a&&(delete e._resolveResize,a(e))})},100)});return r&&r(t),t};tr.previousPromises=function(e){if((e._promises||[]).length)return Promise.all(e._promises).then(function(){e._promises=[]})};tr.sendDataToCloud=function(e,r){e.emit("plotly_beforeexport");let t=new URL(r).origin;var a=tr.graphJson(e,!1,"object");a.version=Kge;var n=new URL(r);n.searchParams.set("origin",window.location.origin);var i=window.open(n.href,"_blank");if(!i){console.error("Unable to open Plotly Cloud (the popup may have been blocked)"),e.emit("plotly_exportfail");return}var o=function(l){l.origin===t&&l.data&&l.data.type==="CHART_AUTH_SUCCESS"&&(i.postMessage({type:"chart",chart:a},t),window.removeEventListener("message",o),e.emit("plotly_afterexport"))};return window.addEventListener("message",o),!1};var o3e=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],l3e=["year","month","dayMonth","dayMonthYear"];tr.supplyDefaults=function(e,r){var t=r&&r.skipUpdateCalc,a=e._fullLayout||{};if(a._skipDefaults){delete a._skipDefaults;return}var n=e._fullLayout={},i=e.layout||{},o=e._fullData||[],l=e._fullData=[],s=e.data||[],u=e.calcdata||[],f=e._context||{},c;e._transitionData||tr.createTransitionData(e),n._dfltTitle={plot:$u(e,"Click to enter Plot title"),subtitle:$u(e,"Click to enter Plot subtitle"),x:$u(e,"Click to enter X axis title"),y:$u(e,"Click to enter Y axis title"),colorbar:$u(e,"Click to enter Colorscale title"),annotation:$u(e,"new text")},n._traceWord=$u(e,"trace");var v=oR(e,o3e);if(a._initialAutoSizeIsDone){var d=a.width,p=a.height;tr.supplyLayoutGlobalDefaults(i,n,v),i.width||(n.width=d),i.height||(n.height=p),tr.sanitizeMargins(n)}else{tr.supplyLayoutGlobalDefaults(i,n,v);var y=!i.width||!i.height,m=n.autosize,b=f.autosizable,A=y&&(m||b);A?tr.plotAutoSize(e,i,n):y&&tr.sanitizeMargins(n),!m&&y&&(i.width=n.width,i.height=n.height)}n._d3locale=f3e(v,n.separators),n._extraFormat=oR(e,l3e),n._initialAutoSizeIsDone=!0,n._dataLength=s.length,n._modules=[],n._visibleModules=[],n._basePlotModules=[];var w=n._subplots=u3e(),x=n._splomAxes={x:{},y:{}},_=n._splomSubplots={};n._splomGridDflt={},n._scatterStackOpts={},n._firstScatter={},n._alignmentOpts={},n._colorAxes={},n._requestRangeslider={},n._traceUids=s3e(o,s),tr.supplyDataDefaults(s,l,i,n);var k=Object.keys(x.x),T=Object.keys(x.y);if(k.length>1&&T.length>1){for(et.getComponentMethod("grid","sizeDefaults")(i,n),c=0;c15&&T.length>15&&n.shapes.length===0&&n.images.length===0,tr.linkSubplots(l,n,o,a),tr.cleanPlot(l,n,o,a);var R=!!(a._has&&a._has("cartesian")),N=!!(n._has&&n._has("cartesian")),I=R,O=N;I&&!O?a._bgLayer.remove():O&&!I&&(n._shouldCreateBgLayer=!0),a._zoomlayer&&!e._dragging&&t3e({_fullLayout:a}),c3e(l,n),iR(n,a),et.getComponentMethod("colorscale","crossTraceDefaults")(l,n),n._preGUI||(n._preGUI={}),n._tracePreGUI||(n._tracePreGUI={});var U=n._tracePreGUI,Y={},G;for(G in U)Y[G]="old";for(c=0;c0){var f=1-2*i;o=Math.round(f*o),l=Math.round(f*l)}}var c=tr.layoutAttributes.width.min,v=tr.layoutAttributes.height.min;o1,p=!t.height&&Math.abs(a.height-l)>1;(p||d)&&(d&&(a.width=o),p&&(a.height=l)),r._initialAutoSize||(r._initialAutoSize={width:o,height:l}),tr.sanitizeMargins(a)};tr.supplyLayoutModuleDefaults=function(e,r,t,a){var n=et.componentsRegistry,i=r._basePlotModules,o,l,s,u=et.subplotsRegistry.cartesian;for(o in n)s=n[o],s.includeBasePlot&&s.includeBasePlot(e,r);i.length||i.push(u),r._has("cartesian")&&(et.getComponentMethod("grid","contentDefaults")(e,r),u.finalizeSubplots(e,r));for(var f in r._subplots)r._subplots[f].sort(br.subplotSort);for(l=0;l1&&(t.l/=m,t.r/=m)}if(v){var b=(t.t+t.b)/v;b>1&&(t.t/=b,t.b/=b)}var A=t.xl!==void 0?t.xl:t.x,w=t.xr!==void 0?t.xr:t.x,x=t.yt!==void 0?t.yt:t.y,_=t.yb!==void 0?t.yb:t.y;d[r]={l:{val:A,size:t.l+y},r:{val:w,size:t.r+y},b:{val:_,size:t.b+y},t:{val:x,size:t.t+y}},p[r]=1}if(!a._replotting)return tr.doAutoMargin(e)}};function h3e(e){if("_redrawFromAutoMarginCount"in e._fullLayout)return!1;var r=ei.list(e,"",!0);for(var t in r)if(r[t].autoshift||r[t].shift)return!0;return!1}tr.doAutoMargin=function(e){var r=e._fullLayout,t=r.width,a=r.height;r._size||(r._size={}),uR(r);var n=r._size,i=r.margin,o={t:0,b:0,l:0,r:0},l=br.extendFlat({},n),s=i.l,u=i.r,f=i.t,c=i.b,v=r._pushmargin,d=r._pushmarginIds,p=r.minreducedwidth,y=r.minreducedheight;if(i.autoexpand!==!1){for(var m in v)d[m]||delete v[m];var b=e._fullLayout._reservedMargin;for(var A in b)for(var w in b[A]){var x=b[A][w];o[w]=Math.max(o[w],x)}v.base={l:{val:0,size:s},r:{val:1,size:u},t:{val:1,size:f},b:{val:0,size:c}};for(var _ in o){var k=0;for(var T in v)T!=="base"&&Eh(v[T][_].size)&&(k=v[T][_].size>k?v[T][_].size:k);var q=Math.max(0,i[_]-k);o[_]=Math.max(0,o[_]-q)}for(var C in v){var E=v[C].l||{},P=v[C].b||{},R=E.val,N=E.size,I=P.val,O=P.size,U=t-o.r-o.l,Y=a-o.t-o.b;for(var G in v){if(Eh(N)&&v[G].r){var V=v[G].r.val,W=v[G].r.size;if(V>R){var j=(N*V+(W-U)*R)/(V-R),J=(W*(1-R)+(N-U)*(1-V))/(V-R);j+J>s+u&&(s=j,u=J)}}if(Eh(O)&&v[G].t){var te=v[G].t.val,ae=v[G].t.size;if(te>I){var se=(O*te+(ae-Y)*I)/(te-I),$=(ae*(1-I)+(O-Y)*(1-te))/(te-I);se+$>c+f&&(c=se,f=$)}}}}}var fe=br.constrain(t-i.l-i.r,fR,p),ie=br.constrain(a-i.t-i.b,cR,y),ue=Math.max(0,t-fe),ce=Math.max(0,a-ie);if(ue){var oe=(s+u)/ue;oe>1&&(s/=oe,u/=oe)}if(ce){var be=(c+f)/ce;be>1&&(c/=be,f/=be)}if(n.l=Math.round(s)+o.l,n.r=Math.round(u)+o.r,n.t=Math.round(f)+o.t,n.b=Math.round(c)+o.b,n.p=Math.round(i.pad),n.w=Math.round(t)-n.l-n.r,n.h=Math.round(a)-n.t-n.b,!r._replotting&&(tr.didMarginChange(l,n)||h3e(e))){"_redrawFromAutoMarginCount"in r?r._redrawFromAutoMarginCount++:r._redrawFromAutoMarginCount=1;var Re=3*(1+Object.keys(d).length);if(r._redrawFromAutoMarginCount1)return!0}return!1};tr.graphJson=function(e,r=!1,t="json",a=!1,n=!1){(a&&r&&!e._fullData||a&&!r&&!e._fullLayout)&&tr.supplyDefaults(e);var i=a?e._fullData:e.data,o=a?e._fullLayout:e.layout,l=(e._transitionData||{})._frames;function s(c,v){if(typeof c=="function")return v?"_function_":null;if(br.isPlainObject(c)){var d={};return Object.keys(c).sort().forEach(function(b){if(["_","["].indexOf(b.charAt(0))===-1){if(typeof c[b]=="function"){v&&(d[b]="_function");return}d[b]=s(c[b],v)}}),d}var p=Array.isArray(c),y=br.isTypedArray(c);if((p||y)&&c.dtype&&c.shape){var m=c.bdata;return s({dtype:c.dtype,shape:c.shape,bdata:br.isArrayBuffer(m)?Jge.encode(m):m},v)}return p?c.map(function(b){return s(b,v)}):y?br.simpleMap(c,br.identity):br.isJSDate(c)?br.ms2DateTimeLocal(+c):c}var u={data:(i||[]).map(function(c){var v=s(c);return r&&delete v.fit,v})};if(!r&&(u.layout=s(o),a)){var f=o._size;u.layout.computed={margin:{b:f.b,l:f.l,r:f.r,t:f.t}}}return l&&(u.frames=s(l)),n&&(u.config=s(e._context,!0)),t==="object"?u:JSON.stringify(u)};tr.modifyFrames=function(e,r){var t,a,n,i=e._transitionData._frames,o=e._transitionData._frameHash;for(t=0;t0&&(e._transitioningWithDuration=!0),e._transitionData._interruptCallbacks.push(function(){a=!0}),t.redraw&&e._transitionData._interruptCallbacks.push(function(){return et.call("redraw",e)}),e._transitionData._interruptCallbacks.push(function(){e.emit("plotly_transitioninterrupted",[])});var v=0,d=0;function p(){return v++,function(){d++,!a&&d===v&&l(c)}}t.runFn(p),setTimeout(p())})}function l(c){if(e._transitionData)return i(e._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(t.redraw)return et.call("redraw",e)}).then(function(){e._transitioning=!1,e._transitioningWithDuration=!1,e.emit("plotly_transitioned",[])}).then(c)}function s(){if(e._transitionData)return e._transitioning=!1,n(e._transitionData._interruptCallbacks)}var u=[tr.previousPromises,s,t.prepareFn,tr.rehover,tr.reselect,o],f=br.syncOrAsync(u,e);return(!f||!f.then)&&(f=Promise.resolve()),f.then(function(){return e})}tr.doCalcdata=function(e,r){var t=ei.list(e),a=e._fullData,n=e._fullLayout,i,o,l,s=new Array(a.length),u=(e.calcdata||[]).slice();for(e.calcdata=s,n._numBoxes=0,n._numViolins=0,n._violinScaleGroupStats={},e._hmpixcount=0,e._hmlumcount=0,n._piecolormap={},n._sunburstcolormap={},n._treemapcolormap={},n._iciclecolormap={},n._funnelareacolormap={},l=0;ldR,svgAttrs:()=>b3e,xlink:()=>pR,xmlns:()=>g3e});var g3e,dR,pR,b3e,Vl=St(()=>{"use strict";g3e="http://www.w3.org/2000/xmlns/",dR="http://www.w3.org/2000/svg",pR="http://www.w3.org/1999/xlink",b3e={xmlns:dR,"xmlns:xlink":pR}});var nn={};qt(nn,{CAP_SHIFT:()=>T3e,FROM_BL:()=>x3e,FROM_BR:()=>w3e,FROM_TL:()=>_3e,LINE_SPACING:()=>A3e,MID_SHIFT:()=>M3e,OPPOSITE_SIDE:()=>k3e});var x3e,_3e,w3e,A3e,T3e,M3e,k3e,on=St(()=>{"use strict";x3e={left:0,center:.5,right:1,bottom:0,middle:.5,top:1},_3e={left:0,center:.5,right:1,bottom:1,middle:.5,top:0},w3e={left:1,center:.5,right:0,bottom:0,middle:.5,top:1},A3e=1.3,T3e=.7,M3e=.35,k3e={left:"right",right:"left",top:"bottom",bottom:"top"}});var Fa=z(mi=>{"use strict";var Ra=Pr(),Ui=ke(),S3e=Ui.strTranslate,z4=(Vl(),ze(Yl)),q3e=(on(),ze(nn)).LINE_SPACING,L3e=/([^$]*)([$]+[^$]*[$]+)([^$]*)/,_R=e=>e?e.match(L3e):null;mi.matchTex=_R;mi.convertToTspans=function(e,r,t){var a=e.text(),n=!e.attr("data-notex")&&r&&r._context.typesetMath&&_R(a);n&&!P3e()&&(n=null);var i=Ra.select(e.node().parentNode);if(i.empty())return;var o=e.attr("class")?e.attr("class").split(" ")[0]:"text";o+="-math",i.selectAll("svg."+o).remove(),i.selectAll("g."+o+"-group").remove(),e.style("display",null).attr({"data-unformatted":a,"data-math":"N"});function l(){i.empty()||(o=e.attr("class")+"-math",i.select("svg."+o).remove()),e.text("").style("white-space","pre");var s=G3e(e.node(),a);s&&e.style("pointer-events","all"),mi.positionText(e),t&&t.call(e)}return n?(r&&r._promises||[]).push(new Promise(function(s){e.style("display","none");var u=parseInt(e.node().style.fontSize,10),f={fontSize:u},c=e.attr("text-anchor");R3e(n[2],f,function(v,d,p){i.selectAll("svg."+o).remove(),i.selectAll("g."+o+"-group").remove();var y=v&&v.select("svg");if(!y||!y.node()){l(),s();return}e.style("display","none");var m=i.append("g").classed(o+"-group",!0).attr({"pointer-events":"none","data-unformatted":a,"data-math":"Y"});m.node().appendChild(y.node()),d&&d.node()&&y.node().insertBefore(d.node().cloneNode(!0),y.node().firstChild);var b=p.width,A=p.height;y.attr({class:o,height:A,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none","font-size":f.fontSize+"px"});var w=e.node().style.fill||"black",x=y.select("g");x.attr({fill:w,stroke:w});var _=x.node().getBoundingClientRect(),k=_.width,T=_.height;(k>b||T>A)&&(y.style("overflow","hidden"),_=y.node().getBoundingClientRect(),k=_.width,T=_.height);var q=+e.attr("x"),C=+e.attr("y"),E=u||e.node().getBoundingClientRect().height,P=-E/4;o[0]==="y"?m.attr({transform:"rotate("+[-90,q,C]+")"+S3e(-k/2,P-T/2)}):o[0]==="l"?C=P-T/2:o[0]==="a"&&o.indexOf("atitle")!==0?(q=0,C=P):(q=q-k*(c==="middle"?.5:c==="end"?1:0),C=C+P-T/2),y.attr({x:q,y:C}),t&&t.call(e,m),s(m)})})):l(),e};var C3e=/(<|<|<)/g,D3e=/(>|>|>)/g;function E3e(e){return e.replace(C3e,"\\lt ").replace(D3e,"\\gt ")}var N4=null,wR=()=>typeof MathJax!="undefined"&&MathJax.version?parseInt(MathJax.version.split(".")[0]):null,mR=!1,yR=!1;function P3e(){let e=wR();return e===3||e===4?!0:(e===null?mR||(mR=!0,Ui.warn("MathJax is not loaded. Math equations will not be rendered.")):yR||(yR=!0,Ui.warn("Unsupported MathJax version:",MathJax.version)),!1)}function R3e(e,r,t){let a=wR();var n;let i=function(){if(!N4){let u=MathJax._.output.svg_ts.SVG,f=Ui.extendFlat({},MathJax.config.svg,{fontCache:"local"});a===4&&(f.linebreaks=Ui.extendFlat({},f.linebreaks,{inline:!1})),N4=MathJax._.mathjax.mathjax.document(document,Ui.extendFlat({},MathJax.config.options,{InputJax:MathJax.startup.input,OutputJax:new u(f)}))}let l="math-output-"+Ui.randstr({},64);n=Ra.select("body").append("div").attr({id:l}).style({visibility:"hidden",position:"absolute","font-size":r.fontSize+"px"});let s=E3e(e).replace(/^\$+|\$+$/g,"");return MathJax._.mathjax.mathjax.handleRetriesFor(function(){return N4.convert(s,{display:!1})}).then(function(u){n.node().appendChild(u)})},o=function(){let l=n.select(".MathJax"),s=!l.empty()&&n.select("svg").node();if(!s)Ui.log("There was an error in the tex syntax.",e),t();else{let u=s.getBoundingClientRect(),f=l.select("defs");t(l,f,u)}n.remove()};Promise.resolve().then(i).then(o).catch(l=>{Ui.log("MathJax typesetting failed.",e,l),n&&n.remove(),t()})}var AR={sup:"font-size:70%",sub:"font-size:70%",s:"text-decoration:line-through",u:"text-decoration:underline",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},F3e={sub:"0.3em",sup:"-0.6em"},z3e={sub:"-0.21em",sup:"0.42em"},gR="\u200B",bR=["http:","https:","mailto:","",void 0,":"],TR=mi.NEWLINES=/(\r\n?|\n)/g,B4=/(<[^<>]*>)/,O4=/<(\/?)([^ >]*)(\s+(.*))?>/i,N3e=//i;mi.BR_TAG_ALL=//gi;var MR=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,kR=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,SR=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,I3e=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function Ju(e,r){if(!e)return null;var t=e.match(r),a=t&&(t[3]||t[4]);return a&&em(a)}var B3e=/(^|;)\s*color:/;mi.plainText=function(e,r){r=r||{};for(var t=r.len!==void 0&&r.len!==-1?r.len:1/0,a=r.allowedTags!==void 0?r.allowedTags:["br"],n="...",i=n.length,o=e.split(B4),l=[],s="",u=0,f=0;fi?l.push(c.slice(0,Math.max(0,y-i))+n):l.push(c.slice(0,y));break}s=""}}return l.join("")};var O3e={mu:"\u03BC",amp:"&",lt:"<",gt:">",nbsp:"\xA0",times:"\xD7",plusmn:"\xB1",deg:"\xB0"},H3e=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function em(e){return e.replace(H3e,function(r,t){var a;return t.charAt(0)==="#"?a=U3e(t.charAt(1)==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10)):a=O3e[t],a||r})}mi.convertEntities=em;function U3e(e){if(!(e>1114111)){var r=String.fromCodePoint;if(r)return r(e);var t=String.fromCharCode;return e<=65535?t(e):t((e>>10)+55232,e%1024+56320)}}function G3e(e,r){r=r.replace(TR," ");var t=!1,a=[],n,i=-1;function o(){i++;var k=document.createElementNS(z4.svg,"tspan");Ra.select(k).attr({class:"line",dy:i*q3e+"em"}),e.appendChild(k),n=k;var T=a;if(a=[{node:k}],T.length>1)for(var q=1;q.",r);return}var T=a.pop();k!==T.type&&Ui.log("Start tag <"+T.type+"> doesnt match end tag <"+k+">. Pretending it did match.",r),n=a[a.length-1].node}var f=N3e.test(r);f?o():(n=e,a=[{node:e}]);for(var c=r.split(B4),v=0;v{"use strict";var Y3e=Pr(),Rh=Br(),rm=ke(),Ku=qr(),V3e=Hu().isValid;function j3e(e,r,t){var a=r?rm.nestedProperty(e,r).get()||{}:e,n=a[t||"color"];n&&n._inputArray&&(n=n._inputArray);var i=!1;if(rm.isArrayOrTypedArray(n)){for(var o=0;o=0;a--,n++){var i=e[a];t[n]=[1-i[0],i[1]]}return t}function PR(e,r){r=r||{};for(var t=e.domain,a=e.range,n=a.length,i=new Array(n),o=0;o{"use strict";var FR=(a4(),ze(t4)),X3e=FR.FORMAT_LINK,Z3e=FR.DATE_FORMAT_LINK;function $3e(e,r){return{valType:"string",dflt:"",editType:"none",description:(r?H4:zR)("hover text",e)+["By default the values are formatted using "+(r?"generic number format":"`"+e+"axis.hoverformat`")+"."].join(" ")}}function H4(e,r){return["Sets the "+e+" formatting rule"+(r?" for `"+r+"`":""),"using d3 formatting mini-languages","which are very similar to those in Python. For numbers, see: "+X3e+"."].join(" ")}function zR(e,r){return H4(e,r)+[" And for dates see: "+Z3e+".","We add two items to d3's date formatter:","*%h* for half of the year as a decimal number as well as","*%{n}f* for fractional seconds","with n digits. For example, *2016-10-13 09:15:23.456* with tickformat","*%H~%M~%S.%2f* would display *09~15~23.46*"].join(" ")}NR.exports={axisHoverFormat:$3e,descriptionOnlyNumbers:H4,descriptionWithDates:zR}});var Gi=z((TXe,eF)=>{"use strict";var IR=Ca(),Jc=Ii(),QR=Bi().dash,G4=Mt().extendFlat,BR=Ct().templatedArray,AXe=di().templateFormatStringDescription,OR=Eo().descriptionWithDates,J3e=(jt(),ze(Zt)).ONEDAY,il=(Pa(),ze(Ea)),K3e=il.HOUR_PATTERN,Q3e=il.WEEKDAY_PATTERN,U4={valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},ebe=G4({},U4,{values:U4.values.slice().concat(["sync"])});function HR(e){return{valType:"integer",min:0,dflt:e?5:0,editType:"ticks"}}var UR={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},GR={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},YR={valType:"data_array",editType:"ticks"},VR={valType:"enumerated",values:["outside","inside",""],editType:"ticks"};function jR(e){var r={valType:"number",min:0,editType:"ticks"};return e||(r.dflt=5),r}function WR(e){var r={valType:"number",min:0,editType:"ticks"};return e||(r.dflt=1),r}var XR={valType:"color",dflt:Jc.defaultLine,editType:"ticks"},ZR={valType:"color",dflt:Jc.lightLine,editType:"ticks"};function $R(e){var r={valType:"number",min:0,editType:"ticks"};return e||(r.dflt=1),r}var JR=G4({},QR,{editType:"ticks"}),KR={valType:"boolean",editType:"ticks"};eF.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:Jc.defaultLine,editType:"ticks"},title:{text:{valType:"string",editType:"ticks"},font:IR({editType:"ticks",description:"Sets this axis' title font."}),standoff:{valType:"number",min:0,editType:"ticks"},editType:"ticks"},type:{valType:"enumerated",values:["-","linear","log","date","category","multicategory"],dflt:"-",editType:"calc",_noTemplating:!0},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed","min reversed","max reversed","min","max"],dflt:!0,editType:"axrange",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},autorangeoptions:{minallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmin:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmax:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},include:{valType:"any",arrayOk:!0,editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},editType:"plot"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"plot"},range:{valType:"info_array",items:[{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0},{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0}],editType:"axrange",impliedEdits:{autorange:!1},anim:!0},minallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},modebardisable:{valType:"flaglist",flags:["autoscale","zoominout"],extras:["none"],dflt:"none",editType:"modebar"},insiderange:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},scaleanchor:{valType:"enumerated",values:[il.idRegex.x.toString(),il.idRegex.y.toString(),!1],editType:"plot"},scaleratio:{valType:"number",min:0,dflt:1,editType:"plot"},constrain:{valType:"enumerated",values:["range","domain"],editType:"plot"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"plot"},matches:{valType:"enumerated",values:[il.idRegex.x.toString(),il.idRegex.y.toString()],editType:"calc"},rangebreaks:BR("rangebreak",{enabled:{valType:"boolean",dflt:!0,editType:"calc"},bounds:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},pattern:{valType:"enumerated",values:[Q3e,K3e,""],editType:"calc"},values:{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"any",editType:"calc"}},dvalue:{valType:"number",editType:"calc",min:0,dflt:J3e},editType:"calc"}),tickmode:ebe,nticks:HR(),tick0:UR,dtick:GR,ticklabelstep:{valType:"integer",min:1,dflt:1,editType:"ticks"},tickvals:YR,ticktext:{valType:"data_array",editType:"ticks"},ticks:VR,tickson:{valType:"enumerated",values:["labels","boundaries"],dflt:"labels",editType:"ticks"},ticklabelmode:{valType:"enumerated",values:["instant","period"],dflt:"instant",editType:"ticks"},ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside",editType:"calc"},ticklabeloverflow:{valType:"enumerated",values:["allow","hide past div","hide past domain"],editType:"calc"},ticklabelshift:{valType:"integer",dflt:0,editType:"ticks"},ticklabelstandoff:{valType:"integer",dflt:0,editType:"ticks"},ticklabelindex:{valType:"integer",arrayOk:!0,editType:"calc"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:jR(),tickwidth:WR(),tickcolor:XR,showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},labelalias:{valType:"any",dflt:!1,editType:"ticks"},automargin:{valType:"flaglist",flags:["height","width","left","right","top","bottom"],extras:[!0,!1],dflt:!1,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:G4({},QR,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},spikesnap:{valType:"enumerated",values:["data","cursor","hovered data"],dflt:"hovered data",editType:"none"},tickfont:IR({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},autotickangles:{valType:"info_array",freeLength:!0,items:{valType:"angle"},dflt:[0,30,90],editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B","SI extended"],dflt:"B",editType:"ticks"},minexponent:{valType:"number",dflt:3,min:0,editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks",description:OR("tick label")},tickformatstops:BR("tickformatstop",{enabled:{valType:"boolean",dflt:!0,editType:"ticks"},dtickrange:{valType:"info_array",items:[{valType:"any",editType:"ticks"},{valType:"any",editType:"ticks"}],editType:"ticks"},value:{valType:"string",dflt:"",editType:"ticks"},editType:"ticks"}),hoverformat:{valType:"string",dflt:"",editType:"none",description:OR("hover text")},unifiedhovertitle:{text:{valType:"string",dflt:"",editType:"none"},editType:"none"},showline:{valType:"boolean",dflt:!1,editType:"ticks+layoutstyle"},linecolor:{valType:"color",dflt:Jc.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:KR,gridcolor:ZR,gridwidth:$R(),griddash:JR,zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:Jc.defaultLine,editType:"ticks"},zerolinelayer:{valType:"enumerated",values:["above traces","below traces"],dflt:"below traces",editType:"plot"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},showdividers:{valType:"boolean",dflt:!0,editType:"ticks"},dividercolor:{valType:"color",dflt:Jc.defaultLine,editType:"ticks"},dividerwidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",il.idRegex.x.toString(),il.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",il.idRegex.x.toString(),il.idRegex.y.toString()],editType:"plot"},minor:{tickmode:U4,nticks:HR("minor"),tick0:UR,dtick:GR,tickvals:YR,ticks:VR,ticklen:jR("minor"),tickwidth:WR("minor"),tickcolor:XR,gridcolor:ZR,gridwidth:$R("minor"),griddash:JR,showgrid:KR,editType:"ticks"},minorloglabels:{valType:"enumerated",values:["small digits","complete","none"],dflt:"small digits",editType:"calc"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},autoshift:{valType:"boolean",dflt:!1,editType:"plot"},shift:{valType:"number",editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array","total ascending","total descending","min ascending","min descending","max ascending","max descending","sum ascending","sum descending","mean ascending","mean descending","geometric mean ascending","geometric mean descending","median ascending","median descending"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},uirevision:{valType:"any",editType:"none"},editType:"calc"}});var tm=z((MXe,tF)=>{"use strict";var Ht=Gi(),rF=Ca(),Y4=Mt().extendFlat,rbe=qo().overrideAll;tF.exports=rbe({orientation:{valType:"enumerated",values:["h","v"],dflt:"v"},thicknessmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels"},thickness:{valType:"number",min:0,dflt:30},lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number"},xref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},xanchor:{valType:"enumerated",values:["left","center","right"]},xpad:{valType:"number",min:0,dflt:10},y:{valType:"number"},yref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},ypad:{valType:"number",min:0,dflt:10},outlinecolor:Ht.linecolor,outlinewidth:Ht.linewidth,bordercolor:Ht.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:Ht.minor.tickmode,nticks:Ht.nticks,tick0:Ht.tick0,dtick:Y4({},Ht.dtick,{}),tickvals:Ht.tickvals,ticktext:Ht.ticktext,ticks:Y4({},Ht.ticks,{dflt:""}),ticklabeloverflow:Y4({},Ht.ticklabeloverflow,{}),ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside"},ticklen:Ht.ticklen,tickwidth:Ht.tickwidth,tickcolor:Ht.tickcolor,ticklabelstep:Ht.ticklabelstep,showticklabels:Ht.showticklabels,labelalias:Ht.labelalias,tickfont:rF({description:"Sets the color bar's tick label font"}),tickangle:Ht.tickangle,tickformat:Ht.tickformat,tickformatstops:Ht.tickformatstops,tickprefix:Ht.tickprefix,showtickprefix:Ht.showtickprefix,ticksuffix:Ht.ticksuffix,showticksuffix:Ht.showticksuffix,separatethousands:Ht.separatethousands,exponentformat:Ht.exponentformat,minexponent:Ht.minexponent,showexponent:Ht.showexponent,title:{text:{valType:"string"},font:rF({description:"Sets this color bar's title font."}),side:{valType:"enumerated",values:["right","top","bottom"]}}},"colorbars","from-root")});var ol=z((SXe,nF)=>{"use strict";var tbe=tm(),abe=(Fc(),ze(_h)).counter,nbe=(v4(),ze(c4)).default,aF=Hu().scales,kXe=nbe(aF);function am(e){return"`"+e+"`"}nF.exports=function(r,t){r=r||"",t=t||{};var a=t.cLetter||"c",n="onlyIfNumerical"in t?t.onlyIfNumerical:!!r,i="noScale"in t?t.noScale:r==="marker.line",o="showScaleDflt"in t?t.showScaleDflt:a==="z",l=typeof t.colorscaleDflt=="string"?aF[t.colorscaleDflt]:null,s=t.editTypeOverride||"",u=r?r+".":"",f,c;"colorAttr"in t?(f=t.colorAttr,c=t.colorAttr):(f={z:"z",c:"color"}[a],c="in "+am(u+f));var v=n?" Has an effect only if "+c+" is set to a numerical array.":"",d=a+"auto",p=a+"min",y=a+"max",m=a+"mid",b=am(u+d),A=am(u+p),w=am(u+y),x=A+" and "+w,_={};_[p]=_[y]=void 0;var k={};k[d]=!1;var T={};return f==="color"&&(T.color={valType:"color",arrayOk:!0,editType:s||"style"},t.anim&&(T.color.anim=!0)),T[d]={valType:"boolean",dflt:!0,editType:"calc",impliedEdits:_},T[p]={valType:"number",dflt:null,editType:s||"plot",impliedEdits:k},T[y]={valType:"number",dflt:null,editType:s||"plot",impliedEdits:k},T[m]={valType:"number",dflt:null,editType:"calc",impliedEdits:_},T.colorscale={valType:"colorscale",editType:"calc",dflt:l,impliedEdits:{autocolorscale:!1}},T.autocolorscale={valType:"boolean",dflt:t.autoColorDflt!==!1,editType:"calc",impliedEdits:{colorscale:void 0}},T.reversescale={valType:"boolean",dflt:!1,editType:"plot"},i||(T.showscale={valType:"boolean",dflt:o,editType:"calc"},T.colorbar=tbe),t.noColorAxis||(T.coloraxis={valType:"subplotid",regex:abe("coloraxis"),dflt:null,editType:"calc"}),T}});var j4=z((qXe,iF)=>{"use strict";var ibe=Mt().extendFlat,obe=ol(),V4=Hu().scales;iF.exports={editType:"calc",colorscale:{editType:"calc",sequential:{valType:"colorscale",dflt:V4.Reds,editType:"calc"},sequentialminus:{valType:"colorscale",dflt:V4.Blues,editType:"calc"},diverging:{valType:"colorscale",dflt:V4.RdBu,editType:"calc"}},coloraxis:ibe({_isSubplotObj:!0,editType:"calc"},obe("",{colorAttr:"corresponding trace color array(s)",noColorAxis:!0,showScaleDflt:!0}))}});var W4=z((LXe,oF)=>{"use strict";var lbe=ke();oF.exports=function(r){return lbe.isPlainObject(r.colorbar)}});var $4=z(Z4=>{"use strict";var X4=Br(),lF=ke(),sF=(jt(),ze(Zt)),sbe=sF.ONEDAY,ube=sF.ONEWEEK;Z4.dtick=function(e,r){var t=r==="log",a=r==="date",n=r==="category",i=a?sbe:1;if(!e)return i;if(X4(e))return e=Number(e),e<=0?i:n?Math.max(1,Math.round(e)):a?Math.max(.1,e):e;if(typeof e!="string"||!(a||t))return i;var o=e.charAt(0),l=e.slice(1);return l=X4(l)?Number(l):0,l<=0||!(a&&o==="M"&&l===Math.round(l)||t&&o==="L"||t&&o==="D"&&(l===1||l===2))?i:e};Z4.tick0=function(e,r,t,a){if(r==="date")return lF.cleanDate(e,lF.dateTick0(t,a%ube===0?1:0));if(!(a==="D1"||a==="D2"))return X4(e)?Number(e):0}});var nm=z((DXe,fF)=>{"use strict";var uF=$4(),fbe=ke().isArrayOrTypedArray,cbe=Zn().isTypedArraySpec,vbe=Zn().decodeTypedArraySpec;fF.exports=function(r,t,a,n,i={}){var o=i.isMinor,l=o?r.minor||{}:r,s=o?t.minor:t,u=o?"minor.":"";function f(x){var _=l[x];return cbe(_)&&(_=vbe(_)),_!==void 0?_:(s._template||{})[x]}var c=f("tick0"),v=f("dtick"),d=f("tickvals"),p=f("overlaying"),y=n==="category"||n==="multicategory",m;fbe(d)?m="array":v?m="linear":p&&!y?m="sync":m="auto";var b=a(u+"tickmode",m);if(b==="auto"||b==="sync")a(u+"nticks");else if(b==="linear"){var A=s.dtick=uF.dtick(v,n);s.tick0=uF.tick0(c,n,t.calendar,A)}else if(n!=="multicategory"){var w=a(u+"tickvals");w===void 0?s.tickmode="auto":o||a("ticktext")}}});var im=z((EXe,vF)=>{"use strict";var J4=ke(),cF=Gi();vF.exports=function(r,t,a,n){var i=n.isMinor,o=i?r.minor||{}:r,l=i?t.minor:t,s=i?cF.minor:cF,u=i?"minor.":"",f=J4.coerce2(o,l,s,"ticklen",i?(t.ticklen||5)*.6:void 0),c=J4.coerce2(o,l,s,"tickwidth",i?t.tickwidth||1:void 0),v=J4.coerce2(o,l,s,"tickcolor",(i?t.tickcolor:void 0)||l.color),d=a(u+"ticks",!i&&n.outerTicks||f||c||v?"outside":"");d||(delete l.ticklen,delete l.tickwidth,delete l.tickcolor)}});var K4=z((PXe,hF)=>{"use strict";hF.exports=function(r){var t=["showexponent","showtickprefix","showticksuffix"],a=t.filter(function(i){return r[i]!==void 0}),n=function(i){return r[i]===r[a[0]]};if(a.every(n)||a.length===1)return r[a[0]]}});var Po=z((RXe,dF)=>{"use strict";var om=ke(),hbe=Ct();dF.exports=function(r,t,a){var n=a.name,i=a.inclusionAttr||"visible",o=t[n],l=om.isArrayOrTypedArray(r[n])?r[n]:[],s=t[n]=[],u=hbe.arrayTemplater(t,n,i),f,c;for(f=0;f{"use strict";var Q4=ke(),dbe=qr().contrast,pF=Gi(),pbe=K4(),mbe=Po();mF.exports=function(r,t,a,n,i){i||(i={});var o=a("labelalias");Q4.isPlainObject(o)||delete t.labelalias;var l=pbe(r),s=a("showticklabels");if(s){i.noTicklabelshift||a("ticklabelshift"),i.noTicklabelstandoff||a("ticklabelstandoff");var u=i.font||{},f=t.color,c=t.ticklabelposition||"",v=c.indexOf("inside")!==-1?dbe(i.bgColor):f&&f!==pF.color.dflt?f:u.color;if(Q4.coerceFont(a,"tickfont",u,{overrideDflt:{color:v}}),!i.noTicklabelstep&&n!=="multicategory"&&n!=="log"&&a("ticklabelstep"),!i.noAng){var d=a("tickangle");!i.noAutotickangles&&d==="auto"&&a("autotickangles")}if(n!=="category"){var p=a("tickformat");mbe(r,t,{name:"tickformatstops",inclusionAttr:"enabled",handleItemDefaults:ybe}),t.tickformatstops.length||delete t.tickformatstops,!i.noExp&&!p&&n!=="date"&&(a("showexponent",l),a("exponentformat"),a("minexponent"),a("separatethousands"))}!i.noMinorloglabels&&n==="log"&&a("minorloglabels")}};function ybe(e,r){function t(n,i){return Q4.coerce(e,r,pF.tickformatstops,n,i)}var a=t("enabled");a&&(t("dtickrange"),t("value"))}});var sm=z((zXe,yF)=>{"use strict";var gbe=K4();yF.exports=function(r,t,a,n,i){i||(i={});var o=i.tickSuffixDflt,l=gbe(r),s=a("tickprefix");s&&a("showtickprefix",l);var u=a("ticksuffix",o);u&&a("showticksuffix",l)}});var e6=z((NXe,gF)=>{"use strict";var Ps=ke(),bbe=Ct(),xbe=nm(),_be=im(),wbe=lm(),Abe=sm(),Tbe=tm();gF.exports=function(r,t,a){var n=bbe.newContainer(t,"colorbar"),i=r.colorbar||{};function o(P,R){return Ps.coerce(i,n,Tbe,P,R)}var l=a.margin||{t:0,b:0,l:0,r:0},s=a.width-l.l-l.r,u=a.height-l.t-l.b,f=o("orientation"),c=f==="v",v=o("thicknessmode");o("thickness",v==="fraction"?30/(c?s:u):30);var d=o("lenmode");o("len",d==="fraction"?1:c?u:s);var p=o("yref"),y=o("xref"),m=p==="paper",b=y==="paper",A,w,x,_="left";c?(x="middle",_=b?"left":"right",A=b?1.02:1,w=.5):(x=m?"bottom":"top",_="center",A=.5,w=m?1.02:1),Ps.coerce(i,n,{x:{valType:"number",min:b?-2:0,max:b?3:1,dflt:A}},"x"),Ps.coerce(i,n,{y:{valType:"number",min:m?-2:0,max:m?3:1,dflt:w}},"y"),o("xanchor",_),o("xpad"),o("yanchor",x),o("ypad"),Ps.noneOrAll(i,n,["x","y"]),o("outlinecolor"),o("outlinewidth"),o("bordercolor"),o("borderwidth"),o("bgcolor");var k=Ps.coerce(i,n,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:c?["outside","inside","outside top","inside top","outside bottom","inside bottom"]:["outside","inside","outside left","inside left","outside right","inside right"]}},"ticklabelposition");o("ticklabeloverflow",k.indexOf("inside")!==-1?"hide past domain":"hide past div"),xbe(i,n,o,"linear");var T=a.font,q={noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,outerTicks:!1,font:T};k.indexOf("inside")!==-1&&(q.bgColor="black"),Abe(i,n,o,"linear",q),wbe(i,n,o,"linear",q),_be(i,n,o,"linear",q),o("title.text",a._dfltTitle.colorbar);var C=n.showticklabels?n.tickfont:T,E=Ps.extendFlat({},T,{family:C.family,size:Ps.bigFont(C.size)});Ps.coerceFont(o,"title.font",E),o("title.side",c?"top":"right")}});var jl=z((IXe,_F)=>{"use strict";var bF=Br(),t6=ke(),Mbe=W4(),kbe=e6(),xF=Hu().isValid,Sbe=Tr().traceIs;function r6(e,r){var t=r.slice(0,r.length-1);return r?t6.nestedProperty(e,t).get()||{}:e}_F.exports=function e(r,t,a,n,i){var o=i.prefix,l=i.cLetter,s="_module"in t,u=r6(r,o),f=r6(t,o),c=r6(t._template||{},o)||{},v=function(){return delete r.coloraxis,delete t.coloraxis,e(r,t,a,n,i)};if(s){var d=a._colorAxes||{},p=n(o+"coloraxis");if(p){var y=Sbe(t,"contour")&&t6.nestedProperty(t,"contours.coloring").get()||"heatmap",m=d[p];m?(m[2].push(v),m[0]!==y&&(m[0]=!1,t6.warn(["Ignoring coloraxis:",p,"setting","as it is linked to incompatible colorscales."].join(" ")))):d[p]=[y,t,[v]];return}}var b=u[l+"min"],A=u[l+"max"],w=bF(b)&&bF(A)&&b{"use strict";var wF=ke(),qbe=Ct(),AF=j4(),Lbe=jl();TF.exports=function(r,t){function a(c,v){return wF.coerce(r,t,AF,c,v)}a("colorscale.sequential"),a("colorscale.sequentialminus"),a("colorscale.diverging");var n=t._colorAxes,i,o;function l(c,v){return wF.coerce(i,o,AF.coloraxis,c,v)}for(var s in n){var u=n[s];if(u[0])i=r[s]||{},o=qbe.newContainer(t,s,"coloraxis"),o._name=s,Lbe(i,o,t,l,{prefix:"",cLetter:"c"});else{for(var f=0;f{"use strict";var Cbe=ke(),Dbe=yi().hasColorscale,Ebe=yi().extractOpts;kF.exports=function(r,t){function a(f,c){var v=f["_"+c];v!==void 0&&(f[c]=v)}function n(f,c){var v=c.container?Cbe.nestedProperty(f,c.container).get():f;if(v)if(v.coloraxis)v._colorAx=t[v.coloraxis];else{var d=Ebe(v),p=d.auto;(p||d.min===void 0)&&a(v,c.min),(p||d.max===void 0)&&a(v,c.max),d.autocolorscale&&a(v,"colorscale")}}for(var i=0;i{"use strict";var qF=Br(),a6=ke(),Pbe=yi().extractOpts;LF.exports=function(r,t,a){var n=r._fullLayout,i=a.vals,o=a.containerStr,l=o?a6.nestedProperty(t,o).get():t,s=Pbe(l),u=s.auto!==!1,f=s.min,c=s.max,v=s.mid,d=function(){return a6.aggNums(Math.min,null,i)},p=function(){return a6.aggNums(Math.max,null,i)};if(f===void 0?f=d():u&&(l._colorAx&&qF(f)?f=Math.min(f,d()):f=d()),c===void 0?c=p():u&&(l._colorAx&&qF(c)?c=Math.max(c,p()):c=p()),u&&v!==void 0&&(c-v>v-f?f=v-(c-v):c-v=0?y=n.colorscale.sequential:y=n.colorscale.sequentialminus,s._sync("colorscale",y)}}});var ll=z((UXe,CF)=>{"use strict";var um=Hu(),Qc=yi();CF.exports={moduleType:"component",name:"colorscale",attributes:ol(),layoutAttributes:j4(),supplyLayoutDefaults:MF(),handleDefaults:jl(),crossTraceDefaults:SF(),calc:Kc(),scales:um.scales,defaultScale:um.defaultScale,getScale:um.get,isValidScale:um.isValid,hasColorscale:Qc.hasColorscale,extractOpts:Qc.extractOpts,extractScale:Qc.extractScale,flipScale:Qc.flipScale,makeColorScaleFunc:Qc.makeColorScaleFunc,makeColorScaleFuncFromTrace:Qc.makeColorScaleFuncFromTrace}});var ri=z((GXe,EF)=>{"use strict";var DF=ke(),Rbe=Zn().isTypedArraySpec;EF.exports={hasLines:function(e){return e.visible&&e.mode&&e.mode.indexOf("lines")!==-1},hasMarkers:function(e){return e.visible&&(e.mode&&e.mode.indexOf("markers")!==-1||e.type==="splom")},hasText:function(e){return e.visible&&e.mode&&e.mode.indexOf("text")!==-1},isBubble:function(e){var r=e.marker;return DF.isPlainObject(r)&&(DF.isArrayOrTypedArray(r.size)||Rbe(r.size))}}});var RF=z((YXe,PF)=>{"use strict";var Fbe=Br();PF.exports=function(r,t){t||(t=2);var a=r.marker,n=a.sizeref||1,i=a.sizemin||0,o=a.sizemode==="area"?function(l){return Math.sqrt(l/n)}:function(l){return l/n};return function(l){var s=o(l/t);return Fbe(s)&&s>0?Math.max(s,i):0}}});var Ro=z(ln=>{"use strict";var Fh=ke();ln.getSubplot=function(e){return e.subplot||e.xaxis+e.yaxis||e.geo};ln.isTraceInSubplots=function(e,r){if(e.type==="splom"){for(var t=e.xaxes||[],a=e.yaxes||[],n=0;n=0&&t.index{var n6={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},Bbe=/([astvzqmhlc])([^astvzqmhlc]*)/gi,Obe=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;function Hbe(e){let r=[];return e.replace(Bbe,(t,a,n)=>{let i=a.toLowerCase(),o=a,l=Ube(n);for(i==="m"&&l.length>2&&(r.push([o,...l.splice(0,2)]),i="l",o=o==="m"?"l":"L");;){if(l.length===n6[i])return r.push([o,...l]),"";if(l.length{"use strict";var Gbe=i6(),Qe=function(e,r){return r?Math.round(e*(r=Math.pow(10,r)))/r:Math.round(e)},Rr="M0,0Z",IF=Math.sqrt(2),Rs=Math.sqrt(3),o6=Math.PI,l6=Math.cos,s6=Math.sin;GF.exports={circle:{n:0,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n="M"+a+",0A"+a+","+a+" 0 1,1 0,-"+a+"A"+a+","+a+" 0 0,1 "+a+",0Z";return t?zr(r,t,n):n}},square:{n:1,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+","+a+"H-"+a+"V-"+a+"H"+a+"Z")}},diamond:{n:2,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.3,2);return zr(r,t,"M"+a+",0L0,"+a+"L-"+a+",0L0,-"+a+"Z")}},cross:{n:3,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.4,2),n=Qe(e*1.2,2);return zr(r,t,"M"+n+","+a+"H"+a+"V"+n+"H-"+a+"V"+a+"H-"+n+"V-"+a+"H-"+a+"V-"+n+"H"+a+"V-"+a+"H"+n+"Z")}},x:{n:4,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.8/IF,2),n="l"+a+","+a,i="l"+a+",-"+a,o="l-"+a+",-"+a,l="l-"+a+","+a;return zr(r,t,"M0,"+a+n+i+o+i+o+l+o+l+n+l+n+"Z")}},"triangle-up":{n:5,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2/Rs,2),n=Qe(e/2,2),i=Qe(e,2);return zr(r,t,"M-"+a+","+n+"H"+a+"L0,-"+i+"Z")}},"triangle-down":{n:6,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2/Rs,2),n=Qe(e/2,2),i=Qe(e,2);return zr(r,t,"M-"+a+",-"+n+"H"+a+"L0,"+i+"Z")}},"triangle-left":{n:7,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2/Rs,2),n=Qe(e/2,2),i=Qe(e,2);return zr(r,t,"M"+n+",-"+a+"V"+a+"L-"+i+",0Z")}},"triangle-right":{n:8,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2/Rs,2),n=Qe(e/2,2),i=Qe(e,2);return zr(r,t,"M-"+n+",-"+a+"V"+a+"L"+i+",0Z")}},"triangle-ne":{n:9,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.6,2),n=Qe(e*1.2,2);return zr(r,t,"M-"+n+",-"+a+"H"+a+"V"+n+"Z")}},"triangle-se":{n:10,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.6,2),n=Qe(e*1.2,2);return zr(r,t,"M"+a+",-"+n+"V"+a+"H-"+n+"Z")}},"triangle-sw":{n:11,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.6,2),n=Qe(e*1.2,2);return zr(r,t,"M"+n+","+a+"H-"+a+"V-"+n+"Z")}},"triangle-nw":{n:12,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.6,2),n=Qe(e*1.2,2);return zr(r,t,"M-"+a+","+n+"V-"+a+"H"+n+"Z")}},pentagon:{n:13,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.951,2),n=Qe(e*.588,2),i=Qe(-e,2),o=Qe(e*-.309,2),l=Qe(e*.809,2);return zr(r,t,"M"+a+","+o+"L"+n+","+l+"H-"+n+"L-"+a+","+o+"L0,"+i+"Z")}},hexagon:{n:14,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e/2,2),i=Qe(e*Rs/2,2);return zr(r,t,"M"+i+",-"+n+"V"+n+"L0,"+a+"L-"+i+","+n+"V-"+n+"L0,-"+a+"Z")}},hexagon2:{n:15,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e/2,2),i=Qe(e*Rs/2,2);return zr(r,t,"M-"+n+","+i+"H"+n+"L"+a+",0L"+n+",-"+i+"H-"+n+"L-"+a+",0Z")}},octagon:{n:16,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.924,2),n=Qe(e*.383,2);return zr(r,t,"M-"+n+",-"+a+"H"+n+"L"+a+",-"+n+"V"+n+"L"+n+","+a+"H-"+n+"L-"+a+","+n+"V-"+n+"Z")}},star:{n:17,f:function(e,r,t){if(Fr(r))return Rr;var a=e*1.4,n=Qe(a*.225,2),i=Qe(a*.951,2),o=Qe(a*.363,2),l=Qe(a*.588,2),s=Qe(-a,2),u=Qe(a*-.309,2),f=Qe(a*.118,2),c=Qe(a*.809,2),v=Qe(a*.382,2);return zr(r,t,"M"+n+","+u+"H"+i+"L"+o+","+f+"L"+l+","+c+"L0,"+v+"L-"+l+","+c+"L-"+o+","+f+"L-"+i+","+u+"H-"+n+"L0,"+s+"Z")}},hexagram:{n:18,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.66,2),n=Qe(e*.38,2),i=Qe(e*.76,2);return zr(r,t,"M-"+i+",0l-"+n+",-"+a+"h"+i+"l"+n+",-"+a+"l"+n+","+a+"h"+i+"l-"+n+","+a+"l"+n+","+a+"h-"+i+"l-"+n+","+a+"l-"+n+",-"+a+"h-"+i+"Z")}},"star-triangle-up":{n:19,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*Rs*.8,2),n=Qe(e*.8,2),i=Qe(e*1.6,2),o=Qe(e*4,2),l="A "+o+","+o+" 0 0 1 ";return zr(r,t,"M-"+a+","+n+l+a+","+n+l+"0,-"+i+l+"-"+a+","+n+"Z")}},"star-triangle-down":{n:20,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*Rs*.8,2),n=Qe(e*.8,2),i=Qe(e*1.6,2),o=Qe(e*4,2),l="A "+o+","+o+" 0 0 1 ";return zr(r,t,"M"+a+",-"+n+l+"-"+a+",-"+n+l+"0,"+i+l+a+",-"+n+"Z")}},"star-square":{n:21,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.1,2),n=Qe(e*2,2),i="A "+n+","+n+" 0 0 1 ";return zr(r,t,"M-"+a+",-"+a+i+"-"+a+","+a+i+a+","+a+i+a+",-"+a+i+"-"+a+",-"+a+"Z")}},"star-diamond":{n:22,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.4,2),n=Qe(e*1.9,2),i="A "+n+","+n+" 0 0 1 ";return zr(r,t,"M-"+a+",0"+i+"0,"+a+i+a+",0"+i+"0,-"+a+i+"-"+a+",0Z")}},"diamond-tall":{n:23,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*.7,2),n=Qe(e*1.4,2);return zr(r,t,"M0,"+n+"L"+a+",0L0,-"+n+"L-"+a+",0Z")}},"diamond-wide":{n:24,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.4,2),n=Qe(e*.7,2);return zr(r,t,"M0,"+n+"L"+a+",0L0,-"+n+"L-"+a+",0Z")}},hourglass:{n:25,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+","+a+"H-"+a+"L"+a+",-"+a+"H-"+a+"Z")},noDot:!0},bowtie:{n:26,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+","+a+"V-"+a+"L-"+a+","+a+"V-"+a+"Z")},noDot:!0},"circle-cross":{n:27,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M0,"+a+"V-"+a+"M"+a+",0H-"+a+"M"+a+",0A"+a+","+a+" 0 1,1 0,-"+a+"A"+a+","+a+" 0 0,1 "+a+",0Z")},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e/IF,2);return zr(r,t,"M"+n+","+n+"L-"+n+",-"+n+"M"+n+",-"+n+"L-"+n+","+n+"M"+a+",0A"+a+","+a+" 0 1,1 0,-"+a+"A"+a+","+a+" 0 0,1 "+a+",0Z")},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M0,"+a+"V-"+a+"M"+a+",0H-"+a+"M"+a+","+a+"H-"+a+"V-"+a+"H"+a+"Z")},needLine:!0,noDot:!0},"square-x":{n:30,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+","+a+"L-"+a+",-"+a+"M"+a+",-"+a+"L-"+a+","+a+"M"+a+","+a+"H-"+a+"V-"+a+"H"+a+"Z")},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.3,2);return zr(r,t,"M"+a+",0L0,"+a+"L-"+a+",0L0,-"+a+"ZM0,-"+a+"V"+a+"M-"+a+",0H"+a)},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.3,2),n=Qe(e*.65,2);return zr(r,t,"M"+a+",0L0,"+a+"L-"+a+",0L0,-"+a+"ZM-"+n+",-"+n+"L"+n+","+n+"M-"+n+","+n+"L"+n+",-"+n)},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.4,2);return zr(r,t,"M0,"+a+"V-"+a+"M"+a+",0H-"+a)},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+","+a+"L-"+a+",-"+a+"M"+a+",-"+a+"L-"+a+","+a)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.2,2),n=Qe(e*.85,2);return zr(r,t,"M0,"+a+"V-"+a+"M"+a+",0H-"+a+"M"+n+","+n+"L-"+n+",-"+n+"M"+n+",-"+n+"L-"+n+","+n)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e/2,2),n=Qe(e,2);return zr(r,t,"M"+a+","+n+"V-"+n+"M"+(a-n)+",-"+n+"V"+n+"M"+n+","+a+"H-"+n+"M-"+n+","+(a-n)+"H"+n)},needLine:!0,noFill:!0},"y-up":{n:37,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.2,2),n=Qe(e*1.6,2),i=Qe(e*.8,2);return zr(r,t,"M-"+a+","+i+"L0,0M"+a+","+i+"L0,0M0,-"+n+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.2,2),n=Qe(e*1.6,2),i=Qe(e*.8,2);return zr(r,t,"M-"+a+",-"+i+"L0,0M"+a+",-"+i+"L0,0M0,"+n+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.2,2),n=Qe(e*1.6,2),i=Qe(e*.8,2);return zr(r,t,"M"+i+","+a+"L0,0M"+i+",-"+a+"L0,0M-"+n+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.2,2),n=Qe(e*1.6,2),i=Qe(e*.8,2);return zr(r,t,"M-"+i+","+a+"L0,0M-"+i+",-"+a+"L0,0M"+n+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.4,2);return zr(r,t,"M"+a+",0H-"+a)},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*1.4,2);return zr(r,t,"M0,"+a+"V-"+a)},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+",-"+a+"L-"+a+","+a)},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2);return zr(r,t,"M"+a+","+a+"L-"+a+",-"+a)},needLine:!0,noDot:!0,noFill:!0},"arrow-up":{n:45,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e*2,2);return zr(r,t,"M0,0L-"+a+","+n+"H"+a+"Z")},backoff:1,noDot:!0},"arrow-down":{n:46,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e*2,2);return zr(r,t,"M0,0L-"+a+",-"+n+"H"+a+"Z")},noDot:!0},"arrow-left":{n:47,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2,2),n=Qe(e,2);return zr(r,t,"M0,0L"+a+",-"+n+"V"+n+"Z")},noDot:!0},"arrow-right":{n:48,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2,2),n=Qe(e,2);return zr(r,t,"M0,0L-"+a+",-"+n+"V"+n+"Z")},noDot:!0},"arrow-bar-up":{n:49,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e*2,2);return zr(r,t,"M-"+a+",0H"+a+"M0,0L-"+a+","+n+"H"+a+"Z")},backoff:1,needLine:!0,noDot:!0},"arrow-bar-down":{n:50,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e,2),n=Qe(e*2,2);return zr(r,t,"M-"+a+",0H"+a+"M0,0L-"+a+",-"+n+"H"+a+"Z")},needLine:!0,noDot:!0},"arrow-bar-left":{n:51,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2,2),n=Qe(e,2);return zr(r,t,"M0,-"+n+"V"+n+"M0,0L"+a+",-"+n+"V"+n+"Z")},needLine:!0,noDot:!0},"arrow-bar-right":{n:52,f:function(e,r,t){if(Fr(r))return Rr;var a=Qe(e*2,2),n=Qe(e,2);return zr(r,t,"M0,-"+n+"V"+n+"M0,0L-"+a+",-"+n+"V"+n+"Z")},needLine:!0,noDot:!0},arrow:{n:53,f:function(e,r,t){if(Fr(r))return Rr;var a=o6/2.5,n=2*e*l6(a),i=2*e*s6(a);return zr(r,t,"M0,0L"+-n+","+i+"L"+n+","+i+"Z")},backoff:.9,noDot:!0},"arrow-wide":{n:54,f:function(e,r,t){if(Fr(r))return Rr;var a=o6/4,n=2*e*l6(a),i=2*e*s6(a);return zr(r,t,"M0,0L"+-n+","+i+"A "+2*e+","+2*e+" 0 0 1 "+n+","+i+"Z")},backoff:.4,noDot:!0}};function Fr(e){return e===null}var BF,OF,HF,UF;function zr(e,r,t){if((!e||e%360===0)&&!r)return t;if(HF===e&&UF===r&&BF===t)return OF;HF=e,UF=r,BF=t;function a(m,b){var A=l6(m),w=s6(m),x=b[0],_=b[1]+(r||0);return[x*A-_*w,x*w+_*A]}for(var n=e/180*o6,i=0,o=0,l=Gbe(t),s="",u=0;u{"use strict";var Oa=Pr(),xt=ke(),Ybe=xt.numberFormat,Fs=Br(),cm=Tr(),za=qr(),Vbe=ll(),Nh=xt.strTranslate,vm=Fa(),jbe=(Vl(),ze(Yl)),Wbe=(on(),ze(nn)),Xbe=Wbe.LINE_SPACING,ez=(_p(),ze(xp)).DESELECTDIM,Zbe=ri(),$be=RF(),Jbe=Ro().appendArrayPointValue,rr={};fz.exports=rr;rr.font=function(e,r){var t=r.variant,a=r.style,n=r.weight,i=r.color,o=r.size,l=r.family,s=r.shadow,u=r.lineposition,f=r.textcase;l&&e.style("font-family",l),o+1&&e.style("font-size",o+"px"),i&&e.call(za.fill,i),n&&e.style("font-weight",n),a&&e.style("font-style",a),t&&e.style("font-variant",t),f&&e.style("text-transform",u6(Qbe(f))),s&&e.style("text-shadow",s==="auto"?vm.makeTextShadow(za.contrast(i)):u6(s)),u&&e.style("text-decoration-line",u6(exe(u)))};function u6(e){return e==="none"?void 0:e}var Kbe={normal:"none",lower:"lowercase",upper:"uppercase","word caps":"capitalize"};function Qbe(e){return Kbe[e]}function exe(e){return e.replace("under","underline").replace("over","overline").replace("through","line-through").split("+").join(" ")}rr.setPosition=function(e,r,t){e.attr("x",r).attr("y",t)};rr.setSize=function(e,r,t){e.attr("width",r).attr("height",t)};rr.setRect=function(e,r,t,a,n){e.call(rr.setPosition,r,t).call(rr.setSize,a,n)};rr.translatePoint=function(e,r,t,a){var n=t.c2p(e.x),i=a.c2p(e.y);if(Fs(n)&&Fs(i)&&r.node())r.node().nodeName==="text"?r.attr("x",n).attr("y",i):r.attr("transform",Nh(n,i));else return!1;return!0};rr.translatePoints=function(e,r,t){e.each(function(a){var n=Oa.select(this);rr.translatePoint(a,n,r,t)})};rr.hideOutsideRangePoint=function(e,r,t,a,n,i){r.attr("display",t.isPtWithinRange(e,n)&&a.isPtWithinRange(e,i)?null:"none")};rr.hideOutsideRangePoints=function(e,r){if(r._hasClipOnAxisFalse){var t=r.xaxis,a=r.yaxis;e.each(function(n){var i=n[0].trace,o=i.xcalendar,l=i.ycalendar,s=cm.traceIs(i,"bar-like")?".bartext":".point,.textpoint";e.selectAll(s).each(function(u){rr.hideOutsideRangePoint(u,Oa.select(this),t,a,o,l)})})}};rr.crispRound=function(e,r,t){return!r||!Fs(r)?t||0:e._context.staticPlot?r:r<1?1:Math.round(r)};rr.singleLineStyle=function(e,r,t,a,n){r.style("fill","none");var i=(((e||[])[0]||{}).trace||{}).line||{},o=t||i.width||0,l=n||i.dash||"";za.stroke(r,a||i.color),rr.dashLine(r,l,o)};rr.lineGroupStyle=function(e,r,t,a){e.style("fill","none").each(function(n){var i=(((n||[])[0]||{}).trace||{}).line||{},o=r||i.width||0,l=a||i.dash||"";Oa.select(this).call(za.stroke,t||i.color).call(rr.dashLine,l,o)})};rr.dashLine=function(e,r,t){t=+t||0,r=rr.dashStyle(r,t),e.style({"stroke-dasharray":r,"stroke-width":t+"px"})};rr.dashStyle=function(e,r){r=+r||1;var t=Math.max(r,3);return e==="solid"?e="":e==="dot"?e=t+"px,"+t+"px":e==="dash"?e=3*t+"px,"+3*t+"px":e==="longdash"?e=5*t+"px,"+5*t+"px":e==="dashdot"?e=3*t+"px,"+t+"px,"+t+"px,"+t+"px":e==="longdashdot"&&(e=5*t+"px,"+2*t+"px,"+t+"px,"+2*t+"px"),e};function rz(e,r,t,a){var n=r.fillpattern,i=r.fillgradient,o=rr.getPatternAttr,l=n&&(o(n.shape,0,"")||o(n.path,0,""));if(l){var s=o(n.bgcolor,0,null),u=o(n.fgcolor,0,null),f=n.fgopacity,c=o(n.size,0,8),v=o(n.solidity,0,.3),d=r.uid;rr.pattern(e,"point",t,d,l,c,v,void 0,n.fillmode,s,u,f)}else if(i&&i.type!=="none"){var p=i.type,y="scatterfill-"+r.uid;if(a&&(y="legendfill-"+r.uid),!a&&(i.start!==void 0||i.stop!==void 0)){var m,b;p==="horizontal"?(m={x:i.start,y:0},b={x:i.stop,y:0}):p==="vertical"&&(m={x:0,y:i.start},b={x:0,y:i.stop}),m.x=r._xA.c2p(m.x===void 0?r._extremes.x.min[0].val:m.x,!0),m.y=r._yA.c2p(m.y===void 0?r._extremes.y.min[0].val:m.y,!0),b.x=r._xA.c2p(b.x===void 0?r._extremes.x.max[0].val:b.x,!0),b.y=r._yA.c2p(b.y===void 0?r._extremes.y.max[0].val:b.y,!0),e.call(nz,t,y,"linear",i.colorscale,"fill",m,b,!0,!1)}else p==="horizontal"&&(p=p+"reversed"),e.call(rr.gradient,t,y,p,i.colorscale,"fill")}else r.fillcolor&&e.call(za.fill,r.fillcolor)}rr.singleFillStyle=function(e,r){var t=Oa.select(e.node()),a=t.data(),n=((a[0]||[])[0]||{}).trace||{};rz(e,n,r,!1)};rr.fillGroupStyle=function(e,r,t){e.style("stroke-width",0).each(function(a){var n=Oa.select(this);a[0].trace&&rz(n,a[0].trace,r,t)})};var VF=YF();rr.symbolNames=[];rr.symbolFuncs=[];rr.symbolBackOffs=[];rr.symbolNeedLines={};rr.symbolNoDot={};rr.symbolNoFill={};rr.symbolList=[];Object.keys(VF).forEach(function(e){var r=VF[e],t=r.n;rr.symbolList.push(t,String(t),e,t+100,String(t+100),e+"-open"),rr.symbolNames[t]=e,rr.symbolFuncs[t]=r.f,rr.symbolBackOffs[t]=r.backoff||0,r.needLine&&(rr.symbolNeedLines[t]=!0),r.noDot?rr.symbolNoDot[t]=!0:rr.symbolList.push(t+200,String(t+200),e+"-dot",t+300,String(t+300),e+"-open-dot"),r.noFill&&(rr.symbolNoFill[t]=!0)});var rxe=rr.symbolNames.length,txe="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";rr.symbolNumber=function(e){if(Fs(e))e=+e;else if(typeof e=="string"){var r=0;e.indexOf("-open")>0&&(r=100,e=e.replace("-open","")),e.indexOf("-dot")>0&&(r+=200,e=e.replace("-dot","")),e=rr.symbolNames.indexOf(e),e>=0&&(e+=r)}return e%100>=rxe||e>=400?0:Math.floor(Math.max(e,0))};function tz(e,r,t,a){var n=e%100;return rr.symbolFuncs[n](r,t,a)+(e>=200?txe:"")}var jF=Ybe("~f"),az={radial:{type:"radial"},radialreversed:{type:"radial",reversed:!0},horizontal:{type:"linear",start:{x:1,y:0},stop:{x:0,y:0}},horizontalreversed:{type:"linear",start:{x:1,y:0},stop:{x:0,y:0},reversed:!0},vertical:{type:"linear",start:{x:0,y:1},stop:{x:0,y:0}},verticalreversed:{type:"linear",start:{x:0,y:1},stop:{x:0,y:0},reversed:!0}};rr.gradient=function(e,r,t,a,n,i){var o=az[a];return nz(e,r,t,o.type,n,i,o.start,o.stop,!1,o.reversed)};function nz(e,r,t,a,n,i,o,l,s,u){var f=n.length,c;a==="linear"?c={node:"linearGradient",attrs:{x1:o.x,y1:o.y,x2:l.x,y2:l.y,gradientUnits:s?"userSpaceOnUse":"objectBoundingBox"},reversed:u}:a==="radial"&&(c={node:"radialGradient",reversed:u});for(var v=new Array(f),d=0;d=0&&e.i===void 0&&(e.i=i.i),r.style("opacity",a.selectedOpacityFn?a.selectedOpacityFn(e):e.mo===void 0?o.opacity:e.mo),a.ms2mrc){var s;e.ms==="various"||o.size==="various"?s=3:s=a.ms2mrc(e.ms),e.mrc=s,a.selectedSizeFn&&(s=e.mrc=a.selectedSizeFn(e));var u=rr.symbolNumber(e.mx||o.symbol)||0;e.om=u%200>=100;var f=m6(e,t),c=p6(e,t);r.attr("d",tz(u,s,f,c))}var v=!1,d,p,y;if(e.so)y=l.outlierwidth,p=l.outliercolor,d=o.outliercolor;else{var m=(l||{}).width;y=(e.mlw+1||m+1||(e.trace?(e.trace.marker.line||{}).width:0)+1)-1||0,"mlc"in e?p=e.mlcc=a.lineScale(e.mlc):xt.isArrayOrTypedArray(l.color)?p=za.defaultLine:p=l.color,xt.isArrayOrTypedArray(o.color)&&(d=za.defaultLine,v=!0),"mc"in e?d=e.mcc=a.markerScale(e.mc):d=o.color||o.colors||"rgba(0,0,0,0)",a.selectedColorFn&&(d=a.selectedColorFn(e))}let b=e.mld||(l||{}).dash;if(b&&rr.dashLine(r,b,y),e.om)r.call(za.stroke,d).style({"stroke-width":(y||1)+"px",fill:"none"});else{r.style("stroke-width",(e.isBlank?0:y)+"px");var A=o.gradient,w=e.mgt;w?v=!0:w=A&&A.type,xt.isArrayOrTypedArray(w)&&(w=w[0],az[w]||(w=0));var x=o.pattern,_=rr.getPatternAttr,k=x&&(_(x.shape,e.i,"")||_(x.path,e.i,""));if(w&&w!=="none"){var T=e.mgc;T?v=!0:T=A.color;var q=t.uid;v&&(q+="-"+e.i),rr.gradient(r,n,q,w,[[0,T],[1,d]],"fill")}else if(k){var C=!1,E=x.fgcolor;!E&&i&&i.color&&(E=i.color,C=!0);var P=_(E,e.i,i&&i.color||null),R=_(x.bgcolor,e.i,null),N=x.fgopacity,I=_(x.size,e.i,8),O=_(x.solidity,e.i,.3);C=C||e.mcc||xt.isArrayOrTypedArray(x.shape)||xt.isArrayOrTypedArray(x.path)||xt.isArrayOrTypedArray(x.bgcolor)||xt.isArrayOrTypedArray(x.fgcolor)||xt.isArrayOrTypedArray(x.size)||xt.isArrayOrTypedArray(x.solidity);var U=t.uid;C&&(U+="-"+e.i),rr.pattern(r,"point",n,U,k,I,O,e.mcc,x.fillmode,R,P,N)}else xt.isArrayOrTypedArray(d)?za.fill(r,d[e.i]):za.fill(r,d);y&&za.stroke(r,p)}};rr.makePointStyleFns=function(e){var r={},t=e.marker;return r.markerScale=rr.tryColorscale(t,""),r.lineScale=rr.tryColorscale(t,"line"),cm.traceIs(e,"symbols")&&(r.ms2mrc=Zbe.isBubble(e)?$be(e):function(){return(t.size||6)/2}),e.selectedpoints&&xt.extendFlat(r,rr.makeSelectedPointStyleFns(e)),r};rr.makeSelectedPointStyleFns=function(e){var r={},t=e.selected||{},a=e.unselected||{},n=e.marker||{},i=t.marker||{},o=a.marker||{},l=n.opacity,s=i.opacity,u=o.opacity,f=s!==void 0,c=u!==void 0;(xt.isArrayOrTypedArray(l)||f||c)&&(r.selectedOpacityFn=function(x){var _=x.mo===void 0?n.opacity:x.mo;return x.selected?f?s:_:c?u:ez*_});var v=n.color,d=i.color,p=o.color;(d||p)&&(r.selectedColorFn=function(x){var _=x.mcc||v;return x.selected?d||_:p||_});var y=n.size,m=i.size,b=o.size,A=m!==void 0,w=b!==void 0;return cm.traceIs(e,"symbols")&&(A||w)&&(r.selectedSizeFn=function(x){var _=x.mrc||y/2;return x.selected?A?m/2:_:w?b/2:_}),r};rr.makeSelectedTextStyleFns=function(e){var r={},t=e.selected||{},a=e.unselected||{},n=e.textfont||{},i=t.textfont||{},o=a.textfont||{},l=n.color,s=i.color,u=o.color;return r.selectedTextColorFn=function(f){var c=f.tc||l;return f.selected?s||c:u||(s?c:za.addOpacity(c,ez))},r};rr.selectedPointStyle=function(e,r){if(!(!e.size()||!r.selectedpoints)){var t=rr.makeSelectedPointStyleFns(r),a=r.marker||{},n=[];t.selectedOpacityFn&&n.push(function(i,o){i.style("opacity",t.selectedOpacityFn(o))}),t.selectedColorFn&&n.push(function(i,o){za.fill(i,t.selectedColorFn(o))}),t.selectedSizeFn&&n.push(function(i,o){var l=o.mx||a.symbol||0,s=t.selectedSizeFn(o);i.attr("d",tz(rr.symbolNumber(l),s,m6(o,r),p6(o,r))),o.mrc2=s}),n.length&&e.each(function(i){for(var o=Oa.select(this),l=0;l0?t:0}rr.textPointStyle=function(e,r,t){if(e.size()){var a;if(r.selectedpoints){var n=rr.makeSelectedTextStyleFns(r);a=n.selectedTextColorFn}var i=r.texttemplate,o=t._fullLayout;e.each(function(l){var s=Oa.select(this),u=i?xt.extractOption(l,r,"txt","texttemplate"):xt.extractOption(l,r,"tx","text");if(!u&&u!==0){s.remove();return}if(i){var f=r._module.formatLabels,c=f?f(l,r,o):{},v={};Jbe(v,r,l.i),u=xt.texttemplateString({data:[v,l,r._meta],fallback:r.texttemplatefallback,labels:c,locale:o._d3locale,template:u})}var d=l.tp||r.textposition,p=oz(l,r),y=a?a(l):l.tc||r.textfont.color;s.call(rr.font,{family:l.tf||r.textfont.family,weight:l.tw||r.textfont.weight,style:l.ty||r.textfont.style,variant:l.tv||r.textfont.variant,textcase:l.tC||r.textfont.textcase,lineposition:l.tE||r.textfont.lineposition,shadow:l.tS||r.textfont.shadow,size:p,color:y}).text(u).call(vm.convertToTspans,t).call(iz,d,p,l.mrc)})}};rr.selectedTextStyle=function(e,r){if(!(!e.size()||!r.selectedpoints)){var t=rr.makeSelectedTextStyleFns(r);e.each(function(a){var n=Oa.select(this),i=t.selectedTextColorFn(a),o=a.tp||r.textposition,l=oz(a,r);za.fill(n,i);var s=cm.traceIs(r,"bar-like");iz(n,o,l,a.mrc2||a.mrc,s)})}};var WF=.5;rr.smoothopen=function(e,r){if(e.length<3)return"M"+e.join("L");var t="M"+e[0],a=[],n;for(n=1;n=s||x>=f&&x<=s)&&(_<=c&&_>=u||_>=c&&_<=u)&&(e=[x,_])}return e}rr.applyBackoff=uz;rr.makeTester=function(){var e=xt.ensureSingleById(Oa.select("body"),"svg","js-plotly-tester",function(t){t.attr(jbe.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"})}),r=xt.ensureSingle(e,"path","js-reference-point",function(t){t.attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"})});rr.tester=e,rr.testref=r};rr.savedBBoxes={};var c6=0,ixe=1e4;rr.bBox=function(e,r,t){t||(t=XF(e));var a;if(t){if(a=rr.savedBBoxes[t],a)return xt.extendFlat({},a)}else if(e.childNodes.length===1){var n=e.childNodes[0];if(t=XF(n),t){var i=+n.getAttribute("x")||0,o=+n.getAttribute("y")||0,l=n.getAttribute("transform");if(!l){var s=rr.bBox(n,!1,t);return i&&(s.left+=i,s.right+=i),o&&(s.top+=o,s.bottom+=o),s}if(t+="~"+i+"~"+o+"~"+l,a=rr.savedBBoxes[t],a)return xt.extendFlat({},a)}}var u,f;r?u=e:(f=rr.tester.node(),u=e.cloneNode(!0),f.appendChild(u)),Oa.select(u).attr("transform",null).call(vm.positionText,0,0);var c=u.getBoundingClientRect(),v=rr.testref.node().getBoundingClientRect();r||f.removeChild(u);var d={height:c.height,width:c.width,left:c.left-v.left,top:c.top-v.top,right:c.right-v.left,bottom:c.bottom-v.top};return c6>=ixe&&(rr.savedBBoxes={},c6=0),t&&(rr.savedBBoxes[t]=d),c6++,xt.extendFlat({},d)};function XF(e){var r=e.getAttribute("data-unformatted");if(r!==null)return r+e.getAttribute("data-math")+e.getAttribute("text-anchor")+e.getAttribute("style")}rr.setClipUrl=function(e,r,t){e.attr("clip-path",d6(r,t))};function d6(e,r){if(!e)return null;var t=r._context,a=t._exportedPlot?"":t._baseUrl||"";return a?"url('"+a+"#"+e+"')":"url(#"+e+")"}rr.getTranslate=function(e){var r=/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,t=e.attr?"attr":"getAttribute",a=e[t]("transform")||"",n=a.replace(r,function(i,o,l){return[o,l].join(" ")}).split(" ");return{x:+n[0]||0,y:+n[1]||0}};rr.setTranslate=function(e,r,t){var a=/(\btranslate\(.*?\);?)/,n=e.attr?"attr":"getAttribute",i=e.attr?"attr":"setAttribute",o=e[n]("transform")||"";return r=r||0,t=t||0,o=o.replace(a,"").trim(),o+=Nh(r,t),o=o.trim(),e[i]("transform",o),o};rr.getScale=function(e){var r=/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,t=e.attr?"attr":"getAttribute",a=e[t]("transform")||"",n=a.replace(r,function(i,o,l){return[o,l].join(" ")}).split(" ");return{x:+n[0]||1,y:+n[1]||1}};rr.setScale=function(e,r,t){var a=/(\bscale\(.*?\);?)/,n=e.attr?"attr":"getAttribute",i=e.attr?"attr":"setAttribute",o=e[n]("transform")||"";return r=r||1,t=t||1,o=o.replace(a,"").trim(),o+="scale("+r+","+t+")",o=o.trim(),e[i]("transform",o),o};var oxe=/\s*sc.*/;rr.setPointGroupScale=function(e,r,t){if(r=r||1,t=t||1,!!e){var a=r===1&&t===1?"":"scale("+r+","+t+")";e.each(function(){var n=(this.getAttribute("transform")||"").replace(oxe,"");n+=a,n=n.trim(),this.setAttribute("transform",n)})}};var lxe=/translate\([^)]*\)\s*$/;rr.setTextPointsScale=function(e,r,t){e&&e.each(function(){var a,n=Oa.select(this),i=n.select("text");if(i.node()){var o=parseFloat(i.attr("x")||0),l=parseFloat(i.attr("y")||0),s=(n.attr("transform")||"").match(lxe);r===1&&t===1?a=[]:a=[Nh(o,l),"scale("+r+","+t+")",Nh(-o,-l)],s&&a.push(s),n.attr("transform",a.join(""))}})};function p6(e,r){var t;return e&&(t=e.mf),t===void 0&&(t=r.marker&&r.marker.standoff||0),!r._geo&&!r._xA?-t:t}rr.getMarkerStandoff=p6;var zh=Math.atan2,Qu=Math.cos,r0=Math.sin;function ZF(e,r){var t=r[0],a=r[1];return[t*Qu(e)-a*r0(e),t*r0(e)+a*Qu(e)]}var $F,JF,KF,QF,v6,h6;function m6(e,r){var t=e.ma;t===void 0&&(t=r.marker.angle,(!Fs(t)||xt.isArrayOrTypedArray(t))&&(t=0));var a,n,i=r.marker.angleref;if(i==="previous"||i==="north"){if(r._geo){var o=r._geo.project(e.lonlat);a=o[0],n=o[1]}else{var l=r._xA,s=r._yA;if(l&&s)a=l.c2p(e.x),n=s.c2p(e.y);else return 90}if(r._geo){var u=e.lonlat[0],f=e.lonlat[1],c=r._geo.project([u,f+1e-5]),v=r._geo.project([u+1e-5,f]),d=zh(v[1]-n,v[0]-a),p=zh(c[1]-n,c[0]-a),y;if(i==="north")y=t/180*Math.PI;else if(i==="previous"){var m=u/180*Math.PI,b=f/180*Math.PI,A=$F/180*Math.PI,w=JF/180*Math.PI,x=A-m,_=Qu(w)*r0(x),k=r0(w)*Qu(b)-Qu(w)*r0(b)*Qu(x);y=-zh(_,k)-Math.PI,$F=u,JF=f}var T=ZF(d,[Qu(y),0]),q=ZF(p,[r0(y),0]);t=zh(T[1]+q[1],T[0]+q[0])/Math.PI*180,i==="previous"&&!(h6===r.uid&&e.i===v6+1)&&(t=null)}if(i==="previous"&&!r._geo)if(h6===r.uid&&e.i===v6+1&&Fs(a)&&Fs(n)){var C=a-KF,E=n-QF,P=r.line&&r.line.shape||"",R=P.slice(P.length-1);R==="h"&&(E=0),R==="v"&&(C=0),t+=zh(E,C)/Math.PI*180+90}else t=null}return KF=a,QF=n,v6=e.i,h6=r.uid,t}rr.getMarkerAngle=m6});var n0=z((ZXe,dz)=>{"use strict";var t0=Pr(),sxe=Br(),uxe=ma(),y6=Tr(),tf=ke(),cz=tf.strTranslate,hm=Jr(),dm=qr(),a0=Fa(),vz=(_p(),ze(xp)),fxe=(on(),ze(nn)).OPPOSITE_SIDE,hz=/ [XY][0-9]* /,g6=1.6,b6=1.6;function cxe(e,r,t){var a=e._fullLayout,n=t.propContainer,i=t.propName,o=t.placeholder,l=t.traceIndex,s=t.avoid||{},u=t.attributes,f=t.transform,c=t.containerGroup,v=1,d=n.title,p=(d&&d.text?d.text:"").trim(),y=!1,m=d&&d.font?d.font:{},b=m.family,A=m.size,w=m.color,x=m.weight,_=m.style,k=m.variant,T=m.textcase,q=m.lineposition,C=m.shadow,E=t.subtitlePropName,P=!!E,R=t.subtitlePlaceholder,N=(n.title||{}).subtitle||{text:"",font:{}},I=(N.text||"").trim(),O=!1,U=1,Y=N.font,G=Y.family,V=Y.size,W=Y.color,j=Y.weight,J=Y.style,te=Y.variant,ae=Y.textcase,se=Y.lineposition,$=Y.shadow,fe;i==="title.text"?fe="titleText":i.indexOf("axis")!==-1?fe="axisTitleText":i.indexOf("colorbar")!==-1&&(fe="colorbarTitleText");var ie=e._context.edits[fe];function ue(Je,Xe){return Je===void 0||Xe===void 0?!1:Je.replace(hz," % ")===Xe.replace(hz," % ")}p===""?v=0:ue(p,o)&&(ie||(p=""),v=.2,y=!0),P&&(I===""?U=0:ue(I,R)&&(ie||(I=""),U=.2,O=!0)),t._meta?p=tf.templateString(p,t._meta):a._meta&&(p=tf.templateString(p,a._meta));var ce=p||I||ie,oe;c||(c=tf.ensureSingle(a._infolayer,"g","g-"+r),oe=a._hColorbarMoveTitle);var be=c.selectAll("text."+r).data(ce?[0]:[]);be.enter().append("text"),be.text(p).attr("class",r),be.exit().remove();var Re=null,ye=r+"-subtitle",Ce=I||ie;if(P&&(Re=c.selectAll("text."+ye).data(Ce?[0]:[]),Re.enter().append("text"),Re.text(I).attr("class",ye),Re.exit().remove()),!ce)return c;function Me(Je,Xe){tf.syncOrAsync([Le,De],{title:Je,subtitle:Xe})}function Le(Je){var Xe=Je.title,Se=Je.subtitle,Fe;!f&&oe&&(f={}),f?(Fe="",f.rotate&&(Fe+="rotate("+[f.rotate,u.x,u.y]+")"),(f.offset||oe)&&(Fe+=cz(0,(f.offset||0)-(oe||0)))):Fe=null,Xe.attr("transform",Fe);function er(me){if(me){var Te=t0.select(me.node().parentNode).select("."+ye);if(!Te.empty()){var Ue=me.node().getBBox();if(Ue.height){var $e=Ue.y+Ue.height+g6*V;Te.attr("y",$e)}}}}if(Xe.style("opacity",v*dm.opacity(w)).call(hm.font,{color:dm.rgb(w),size:t0.round(A,2),family:b,weight:x,style:_,variant:k,textcase:T,shadow:C,lineposition:q}).attr(u).call(a0.convertToTspans,e,er),Se&&!Se.empty()){var re=c.select("."+r+"-math-group"),xe=Xe.node().getBBox(),Ye=re.node()?re.node().getBBox():void 0,vr=Ye?Ye.y+Ye.height+g6*V:xe.y+xe.height+b6*V,Pe=tf.extendFlat({},u,{y:vr});Se.attr("transform",Fe),Se.style("opacity",U*dm.opacity(W)).call(hm.font,{color:dm.rgb(W),size:t0.round(V,2),family:G,weight:j,style:J,variant:te,textcase:ae,shadow:$,lineposition:se}).attr(Pe).call(a0.convertToTspans,e)}return uxe.previousPromises(e)}function De(Je){var Xe=Je.title,Se=t0.select(Xe.node().parentNode);if(s&&s.selection&&s.side&&p){Se.attr("transform",null);var Fe=fxe[s.side],er=s.side==="left"||s.side==="top"?-1:1,re=sxe(s.pad)?s.pad:2,xe=hm.bBox(Se.node()),Ye={t:0,b:0,l:0,r:0},vr=e._fullLayout._reservedMargin;for(var Pe in vr)for(var me in vr[Pe]){var Te=vr[Pe][me];Ye[me]=Math.max(Ye[me],Te)}var Ue={left:Ye.l,top:Ye.t,right:a.width-Ye.r,bottom:a.height-Ye.b},$e=s.maxShift||er*(Ue[s.side]-xe[s.side]),Oe=0;if($e<0)Oe=$e;else{var We=s.offsetLeft||0,ar=s.offsetTop||0;xe.left-=We,xe.right-=We,xe.top-=ar,xe.bottom-=ar,s.selection.each(function(){var sr=hm.bBox(this);tf.bBoxIntersect(xe,sr,re)&&(Oe=Math.max(Oe,er*(sr[s.side]-xe[Fe])+re))}),Oe=Math.min($e,Oe),n._titleScoot=Math.abs(Oe)}if(Oe>0||$e<0){var or={left:[-Oe,0],right:[Oe,0],top:[0,-Oe],bottom:[0,Oe]}[s.side];Se.attr("transform",cz(or[0],or[1]))}}}be.call(Me,Re);function Ie(Je,Xe){Je.text(Xe).on("mouseover.opacity",function(){t0.select(this).transition().duration(vz.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){t0.select(this).transition().duration(vz.HIDE_PLACEHOLDER).style("opacity",0)})}if(ie&&(p?be.on(".opacity",null):(Ie(be,o),y=!0),be.call(a0.makeEditable,{gd:e}).on("edit",function(Je){l!==void 0?y6.call("_guiRestyle",e,i,Je,l):y6.call("_guiRelayout",e,i,Je)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(Me)}).on("input",function(Je){this.text(Je||" ").call(a0.positionText,u.x,u.y)}),P)){if(P&&!p){var qe=be.node().getBBox(),Ze=qe.y+qe.height+b6*V;Re.attr("y",Ze)}I?Re.on(".opacity",null):(Ie(Re,R),O=!0),Re.call(a0.makeEditable,{gd:e}).on("edit",function(Je){y6.call("_guiRelayout",e,"title.subtitle.text",Je)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(Me)}).on("input",function(Je){this.text(Je||" ").call(a0.positionText,Re.attr("x"),Re.attr("y"))})}return be.classed("js-placeholder",y),Re&&!Re.empty()&&Re.classed("js-placeholder",O),c}dz.exports={draw:cxe,SUBTITLE_PADDING_EM:b6,SUBTITLE_PADDING_MATHJAX_EM:g6}});var i0=z(($Xe,bz)=>{"use strict";var vxe=Pr(),hxe=_c().utcFormat,Dt=ke(),dxe=Dt.numberFormat,sl=Br(),zs=Dt.cleanNumber,pxe=Dt.ms2DateTime,pz=Dt.dateTime2ms,ul=Dt.ensureNumber,mz=Dt.isArrayOrTypedArray,Ns=(jt(),ze(Zt)),pm=Ns.FP_SAFE,Fo=Ns.BADNUM,mxe=Ns.LOG_CLIP,yxe=Ns.ONEWEEK,mm=Ns.ONEDAY,ym=Ns.ONEHOUR,yz=Ns.ONEMIN,gz=Ns.ONESEC,gm=Aa(),_m=(Pa(),ze(Ea)),bm=_m.HOUR_PATTERN,xm=_m.WEEKDAY_PATTERN;function Ih(e){return Math.pow(10,e)}function x6(e){return e!=null}bz.exports=function(r,t){t=t||{};var a=r._id||"x",n=a.charAt(0);function i(x,_){if(x>0)return Math.log(x)/Math.LN10;if(x<=0&&_&&r.range&&r.range.length===2){var k=r.range[0],T=r.range[1];return .5*(k+T-2*mxe*Math.abs(k-T))}else return Fo}function o(x,_,k,T){if((T||{}).msUTC&&sl(x))return+x;var q=pz(x,k||r.calendar);if(q===Fo)if(sl(x)){x=+x;var C=Math.floor(Dt.mod(x+.05,1)*10),E=Math.round(x-C/10);q=pz(new Date(E))+C/10}else return Fo;return q}function l(x,_,k){return pxe(x,_,k||r.calendar)}function s(x){return r._categories[Math.round(x)]}function u(x){if(x6(x)){if(r._categoriesMap===void 0&&(r._categoriesMap={}),r._categoriesMap[x]!==void 0)return r._categoriesMap[x];r._categories.push(typeof x=="number"?String(x):x);var _=r._categories.length-1;return r._categoriesMap[x]=_,_}return Fo}function f(x,_){for(var k=new Array(_),T=0;T<_;T++){var q=(x[0]||[])[T],C=(x[1]||[])[T];k[T]=c([q,C])}return k}function c(x){if(r._categoriesMap)return r._categoriesMap[x]}function v(x){var _=c(x);if(_!==void 0)return _;if(sl(x))return+x}function d(x){return sl(x)?+x:c(x)}function p(x,_,k){return vxe.round(k+_*x,2)}function y(x,_,k){return(x-k)/_}var m=function(_){return sl(_)?p(_,r._m,r._b):Fo},b=function(x){return y(x,r._m,r._b)};if(r.rangebreaks){var A=n==="y";m=function(x){if(!sl(x))return Fo;var _=r._rangebreaks.length;if(!_)return p(x,r._m,r._b);var k=A;r.range[0]>r.range[1]&&(k=!k);for(var T=k?-1:1,q=T*x,C=0,E=0;E<_;E++){var P=T*r._rangebreaks[E].min,R=T*r._rangebreaks[E].max;if(qR)C=E+1;else{C=q<(P+R)/2?E:E+1;break}}var N=r._B[C]||0;return isFinite(N)?p(x,r._m2,N):0},b=function(x){var _=r._rangebreaks.length;if(!_)return y(x,r._m,r._b);for(var k=0,T=0;T<_&&!(xr._rangebreaks[T].pmax&&(k=T+1);return y(x,r._m2,r._B[k])}}r.c2l=r.type==="log"?i:ul,r.l2c=r.type==="log"?Ih:ul,r.l2p=m,r.p2l=b,r.c2p=r.type==="log"?function(x,_){return m(i(x,_))}:m,r.p2c=r.type==="log"?function(x){return Ih(b(x))}:b,["linear","-"].indexOf(r.type)!==-1?(r.d2r=r.r2d=r.d2c=r.r2c=r.d2l=r.r2l=zs,r.c2d=r.c2r=r.l2d=r.l2r=ul,r.d2p=r.r2p=function(x){return r.l2p(zs(x))},r.p2d=r.p2r=b,r.cleanPos=ul):r.type==="log"?(r.d2r=r.d2l=function(x,_){return i(zs(x),_)},r.r2d=r.r2c=function(x){return Ih(zs(x))},r.d2c=r.r2l=zs,r.c2d=r.l2r=ul,r.c2r=i,r.l2d=Ih,r.d2p=function(x,_){return r.l2p(r.d2r(x,_))},r.p2d=function(x){return Ih(b(x))},r.r2p=function(x){return r.l2p(zs(x))},r.p2r=b,r.cleanPos=ul):r.type==="date"?(r.d2r=r.r2d=Dt.identity,r.d2c=r.r2c=r.d2l=r.r2l=o,r.c2d=r.c2r=r.l2d=r.l2r=l,r.d2p=r.r2p=function(x,_,k){return r.l2p(o(x,0,k))},r.p2d=r.p2r=function(x,_,k){return l(b(x),_,k)},r.cleanPos=function(x){return Dt.cleanDate(x,Fo,r.calendar)}):r.type==="category"?(r.d2c=r.d2l=u,r.r2d=r.c2d=r.l2d=s,r.d2r=r.d2l_noadd=v,r.r2c=function(x){var _=d(x);return _!==void 0?_:r.fraction2r(.5)},r.l2r=r.c2r=ul,r.r2l=d,r.d2p=function(x){return r.l2p(r.r2c(x))},r.p2d=function(x){return s(b(x))},r.r2p=r.d2p,r.p2r=b,r.cleanPos=function(x){return typeof x=="string"&&x!==""?x:ul(x)}):r.type==="multicategory"&&(r.r2d=r.c2d=r.l2d=s,r.d2r=r.d2l_noadd=v,r.r2c=function(x){var _=v(x);return _!==void 0?_:r.fraction2r(.5)},r.r2c_just_indices=c,r.l2r=r.c2r=ul,r.r2l=v,r.d2p=function(x){return r.l2p(r.r2c(x))},r.p2d=function(x){return s(b(x))},r.r2p=r.d2p,r.p2r=b,r.cleanPos=function(x){return Array.isArray(x)||typeof x=="string"&&x!==""?x:ul(x)},r.setupMultiCategory=function(x){var _=r._traceIndices,k,T,q=r._matchGroup;if(q&&r._categories.length===0){for(var C in q)if(C!==a){var E=t[gm.id2name(C)];_=_.concat(E._traceIndices)}}var P=[[0,{}],[0,{}]],R=[];for(k=0;k<_.length;k++){var N=x[_[k]];if(n in N){var I=N[n],O=N._length||Dt.minRowLength(I);if(mz(I[0])&&mz(I[1]))for(T=0;TE[1]&&(T[C?0:1]=k,q[1]=E[1]),q[0]>=q[1])if(_!==void 0){var P=E[0]+1;k!==void 0&&(P=Math.min(P,E[1])),T[C?0:1]=r.l2r(P)}else k!==void 0&&(T[C?1:0]=r.l2r(E[1]-1))}},r.cleanRange=function(x,_){r._cleanRange(x,_),r.limitRange(x)},r._cleanRange=function(x,_){_||(_={}),x||(x="range");var k=Dt.nestedProperty(r,x).get(),T,q;if(r.type==="date"?q=Dt.dfltRange(r.calendar):n==="y"?q=_m.DFLTRANGEY:r._name==="realaxis"?q=[0,1]:q=_.dfltRange||_m.DFLTRANGEX,q=q.slice(),(r.rangemode==="tozero"||r.rangemode==="nonnegative")&&(q[0]=0),!k||k.length!==2){Dt.nestedProperty(r,x).set(q);return}var C=k[0]===null,E=k[1]===null;for(r.type==="date"&&!r.autorange&&(k[0]=Dt.cleanDate(k[0],Fo,r.calendar),k[1]=Dt.cleanDate(k[1],Fo,r.calendar)),T=0;T<2;T++)if(r.type==="date"){if(!Dt.isDateTime(k[T],r.calendar)){r[x]=q;break}if(r.r2l(k[0])===r.r2l(k[1])){var P=Dt.constrain(r.r2l(k[0]),Dt.MIN_MS+1e3,Dt.MAX_MS-1e3);k[0]=r.l2r(P-1e3),k[1]=r.l2r(P+1e3);break}}else{if(!sl(k[T]))if(!(C||E)&&sl(k[1-T]))k[T]=k[1-T]*(T?10:.1);else{r[x]=q;break}if(k[T]<-pm?k[T]=-pm:k[T]>pm&&(k[T]=pm),k[0]===k[1]){var R=Math.max(1,Math.abs(k[0]*1e-6));k[0]-=R,k[1]+=R}}},r.setScale=function(x){var _=t._size;if(r.overlaying){var k=gm.getFromId({_fullLayout:t},r.overlaying);r.domain=k.domain}var T=x&&r._r?"_r":"range",q=r.calendar;r.cleanRange(T);var C=r.r2l(r[T][0],q),E=r.r2l(r[T][1],q),P=n==="y";if(P?(r._offset=_.t+(1-r.domain[1])*_.h,r._length=_.h*(r.domain[1]-r.domain[0]),r._m=r._length/(C-E),r._b=-r._m*E):(r._offset=_.l+r.domain[0]*_.w,r._length=_.w*(r.domain[1]-r.domain[0]),r._m=r._length/(E-C),r._b=-r._m*C),r._rangebreaks=[],r._lBreaks=0,r._m2=0,r._B=[],r.rangebreaks){var R,N;if(r._rangebreaks=r.locateBreaks(Math.min(C,E),Math.max(C,E)),r._rangebreaks.length){for(R=0;RE&&(I=!I),I&&r._rangebreaks.reverse();var O=I?-1:1;for(r._m2=O*r._length/(Math.abs(E-C)-r._lBreaks),r._B.push(-r._m2*(P?E:C)),R=0;Rq&&(q+=7,Cq&&(q+=24,C=T&&C=T&&x=$.min&&(J<$.min&&($.min=J),te>$.max&&($.max=te),ae=!1)}ae&&E.push({min:J,max:te})}};for(k=0;k{"use strict";var xz=Br(),_6=ke(),gxe=(jt(),ze(Zt)).BADNUM,wm=_6.isArrayOrTypedArray,bxe=_6.isDateTime,xxe=_6.cleanNumber,_z=Math.round;Az.exports=function(r,t,a){var n=r,i=a.noMultiCategory;if(wm(n)&&!n.length)return"-";if(!i&&Mxe(n))return"multicategory";if(i&&Array.isArray(n[0])){for(var o=[],l=0;li*2}function wz(e){return Math.max(1,(e-1)/1e3)}function Txe(e,r){for(var t=e.length,a=wz(t),n=0,i=0,o={},l=0;ln*2}function Mxe(e){return wm(e[0])&&wm(e[1])}});var Bh=z((KXe,Dz)=>{"use strict";var kxe=Pr(),Sz=Br(),Is=ke(),Tm=(jt(),ze(Zt)).FP_SAFE,Sxe=Tr(),qxe=Jr(),qz=Aa(),Lxe=qz.getFromId,Cxe=qz.isLinked;Dz.exports={applyAutorangeOptions:Cz,getAutoRange:w6,makePadFn:A6,doAutoRange:Exe,findExtremes:Pxe,concatExtremes:k6};function w6(e,r){var t,a,n=[],i=e._fullLayout,o=A6(i,r,0),l=A6(i,r,1),s=k6(e,r),u=s.min,f=s.max;if(u.length===0||f.length===0)return Is.simpleMap(r.range,r.r2l);var c=u[0].val,v=f[0].val;for(t=1;t0&&(E=w-o(k)-l(T),E>x?P/E>_&&(q=k,C=T,_=P/E):P/w>_&&(q={val:k.val,nopad:1},C={val:T.val,nopad:1},_=P/w));function R(Y,G){return Math.max(Y,l(G))}if(c===v){var N=c-1,I=c+1;if(b)if(c===0)n=[0,1];else{var O=(c>0?f:u).reduce(R,0),U=c/(1-Math.min(.5,O/w));n=c>0?[0,U]:[U,0]}else A?n=[Math.max(0,N),Math.max(1,I)]:n=[N,I]}else b?(q.val>=0&&(q={val:0,nopad:1}),C.val<=0&&(C={val:0,nopad:1})):A&&(q.val-_*o(q)<0&&(q={val:0,nopad:1}),C.val<=0&&(C={val:1,nopad:1})),_=(C.val-q.val-Tz(r,k.val,T.val))/(w-o(q)-l(C)),n=[q.val-_*o(q),C.val+_*l(C)];return n=Cz(n,r),r.limitRange&&r.limitRange(),p&&n.reverse(),Is.simpleMap(n,r.l2r||Number)}function Tz(e,r,t){var a=0;if(e.rangebreaks)for(var n=e.locateBreaks(r,t),i=0;i0?t.ppadplus:t.ppadminus)||t.ppad||0),k=x((e._m>0?t.ppadminus:t.ppadplus)||t.ppad||0),T=x(t.vpadplus||t.vpad),q=x(t.vpadminus||t.vpad);if(!u){if(A=1/0,w=-1/0,s)for(c=0;c0&&(A=v),v>w&&v-Tm&&(A=v),v>w&&v=P;c--)E(c);return{min:a,max:n,opts:t}}function T6(e,r,t,a){Lz(e,r,t,a,Rxe)}function M6(e,r,t,a){Lz(e,r,t,a,Fxe)}function Lz(e,r,t,a,n){for(var i=a.tozero,o=a.extrapad,l=!0,s=0;s=t&&(u.extrapad||!o)){l=!1;break}else n(r,u.val)&&u.pad<=t&&(o||!u.extrapad)&&(e.splice(s,1),s--)}if(l){var f=i&&r===0;e.push({val:r,pad:f?0:t,extrapad:f?!1:o})}}function kz(e){return Sz(e)&&Math.abs(e)=r}function zxe(e,r){var t=r.autorangeoptions;return t&&t.minallowed!==void 0&&Mm(r,t.minallowed,t.maxallowed)?t.minallowed:t&&t.clipmin!==void 0&&Mm(r,t.clipmin,t.clipmax)?Math.max(e,r.d2l(t.clipmin)):e}function Nxe(e,r){var t=r.autorangeoptions;return t&&t.maxallowed!==void 0&&Mm(r,t.minallowed,t.maxallowed)?t.maxallowed:t&&t.clipmax!==void 0&&Mm(r,t.clipmin,t.clipmax)?Math.min(e,r.d2l(t.clipmax)):e}function Mm(e,r,t){return r!==void 0&&t!==void 0?(r=e.d2l(r),t=e.d2l(t),r=s&&(i=s,t=s),o<=s&&(o=s,a=s)}}return t=zxe(t,r),a=Nxe(a,r),[t,a]}});var Yr=z((eZe,eN)=>{"use strict";var Yi=Pr(),ya=Br(),o0=ma(),Hh=Tr(),Sr=ke(),l0=Sr.strTranslate,af=Fa(),Ixe=n0(),Uh=qr(),gi=Jr(),Bxe=Gi(),Ez=$4(),QXe=(Pa(),ze(Ea)),sn=(jt(),ze(Zt)),Oxe=sn.ONEMAXYEAR,qm=sn.ONEAVGYEAR,Lm=sn.ONEMINYEAR,Hxe=sn.ONEMAXQUARTER,C6=sn.ONEAVGQUARTER,Cm=sn.ONEMINQUARTER,Uxe=sn.ONEMAXMONTH,s0=sn.ONEAVGMONTH,Dm=sn.ONEMINMONTH,bi=sn.ONEWEEK,Sn=sn.ONEDAY,Bs=Sn/2,cl=sn.ONEHOUR,Gh=sn.ONEMIN,Em=sn.ONESEC,Gxe=sn.ONEMILLI,Yxe=sn.ONEMICROSEC,nf=sn.MINUS_SIGN,Rm=sn.BADNUM,D6={K:"zeroline"},E6={K:"gridline",L:"path"},P6={K:"minor-gridline",L:"path"},Gz={K:"tick",L:"path"},Pz={K:"tick",L:"text"},Rz={width:["x","r","l","xl","xr"],height:["y","t","b","yt","yb"],right:["r","xr"],left:["l","xl"],top:["t","yt"],bottom:["b","yb"]},Fm=(on(),ze(nn)),Oh=Fm.MID_SHIFT,of=Fm.CAP_SHIFT,Yh=Fm.LINE_SPACING,Vxe=Fm.OPPOSITE_SIDE,Pm=3,Ge=eN.exports={};Ge.setConvert=i0();var jxe=Am(),vl=Aa(),Wxe=vl.idSort,Xxe=vl.isLinked;Ge.id2name=vl.id2name;Ge.name2id=vl.name2id;Ge.cleanId=vl.cleanId;Ge.list=vl.list;Ge.listIds=vl.listIds;Ge.getFromId=vl.getFromId;Ge.getFromTrace=vl.getFromTrace;var Yz=Bh();Ge.getAutoRange=Yz.getAutoRange;Ge.findExtremes=Yz.findExtremes;var Zxe=1e-4;function N6(e){var r=(e[1]-e[0])*Zxe;return[e[0]-r,e[1]+r]}function $xe(e,r,t){if(![t,e,r].every(ya)||t===0)return e;let a=Math.round((e-r)/t),n=r+a*t;return e!==n&&Math.abs(e-n)v+" domain")),s=s.concat(i||[]),f.length>o?(Sr.warn("Array attribute "+u+" has more entries than expected, truncating to "+o),f=f.slice(0,o)):f.length2e-6||((t-e._forceTick0)/e._minDtick%1+1.000001)%1>2e-6)&&(e._minDtick=0))};Ge.saveRangeInitial=function(e,r){for(var t=Ge.list(e,"",!0),a=!1,n=0;nc*.3||u(a)||u(n))){var v=t.dtick/2;e+=e+vo){var l=Number(t.slice(1));i.exactYears>o&&l%12===0?e=Ge.tickIncrement(e,"M6","reverse")+Sn*1.5:i.exactMonths>o?e=Ge.tickIncrement(e,"M1","reverse")+Sn*15.5:e-=Bs;var s=Ge.tickIncrement(e,t);if(s<=a)return s}return e}Ge.prepMinorTicks=function(e,r,t){var c,v;if(!((c=r.minor)!=null&&c.dtick)){delete e.dtick;var a=r.dtick&&ya(r._tmin),n;if(a){var i=Ge.tickIncrement(r._tmin,r.dtick,!0);n=[r._tmin,i*.99+r._tmin*.01]}else{var o=Sr.simpleMap(r.range,r.r2l);n=[o[0],.8*o[0]+.2*o[1]]}if(e.range=Sr.simpleMap(n,r.l2r),e._isMinor=!0,Ge.prepTicks(e,t),a){var l=ya(r.dtick),s=ya(e.dtick),u=l?r.dtick:+r.dtick.substring(1),f=s?e.dtick:+e.dtick.substring(1);l&&s?S6(u,f)?u===2*bi&&f===2*Sn&&(e.dtick=bi):u===2*bi&&f===3*Sn?e.dtick=bi:u===bi&&!(r._input.minor||{}).nticks?e.dtick=Sn:Nz(u/f,2.5)?e.dtick=u/2:e.dtick=u:String(r.dtick).charAt(0)==="M"?s?e.dtick="M1":S6(u,f)?u>=12&&f===2&&(e.dtick="M3"):e.dtick=r.dtick:String(e.dtick).charAt(0)==="L"?String(r.dtick).charAt(0)==="L"?S6(u,f)||(e.dtick=Nz(u/f,2.5)?r.dtick/2:r.dtick):e.dtick="D1":e.dtick==="D2"&&+r.dtick>1&&(e.dtick=1)}e.range=r.range}((v=r.minor)==null?void 0:v._tick0Init)===void 0&&(e.tick0=r.tick0)};function S6(e,r){return Math.abs((e/r+.5)%1-.5)<.001}function Nz(e,r){return Math.abs(e/r-1)<.001}Ge.prepTicks=function(e,r){var t=Sr.simpleMap(e.range,e.r2l,void 0,void 0,r);if(e.tickmode==="auto"||!e.dtick){var a=e.nticks,n;a||(e.type==="category"||e.type==="multicategory"?(n=e.tickfont?Sr.bigFont(e.tickfont.size||12):15,a=e._length/n):(n=e._id.charAt(0)==="y"?40:80,a=Sr.constrain(e._length/n,4,9)+1),e._name==="radialaxis"&&(a*=2)),e.minor&&e.minor.tickmode!=="array"||e.tickmode==="array"&&(a*=100),e._roughDTick=Math.abs(t[1]-t[0])/a,Ge.autoTicks(e,e._roughDTick),e._minDtick>0&&e.dtick0?(i=a-1,o=a):(i=a,o=a);var l=e[i].value,s=e[o].value,u=Math.abs(s-l),f=t||u,c=0;f>=Lm?u>=Lm&&u<=Oxe?c=u:c=qm:t===C6&&f>=Cm?u>=Cm&&u<=Hxe?c=u:c=C6:f>=Dm?u>=Dm&&u<=Uxe?c=u:c=s0:t===bi&&f>=bi?c=bi:f>=Sn?c=Sn:t===Bs&&f>=Bs?c=Bs:t===cl&&f>=cl&&(c=cl);var v;c>=u&&(c=u,v=!0);var d=n+c;if(r.rangebreaks&&c>0){for(var p=84,y=0,m=0;mbi&&(c=u)}(c>0||a===0)&&(e[a].periodX=n+c/2)}}Ge.calcTicks=function(r,t){for(var a=r.type,n=r.calendar,i=r.ticklabelstep,o=r.ticklabelmode==="period",l=r.range[0]>r.range[1],s=!r.ticklabelindex||Sr.isArrayOrTypedArray(r.ticklabelindex)?r.ticklabelindex:[r.ticklabelindex],u=Sr.simpleMap(r.range,r.r2l,void 0,void 0,t),f=u[1]=(x?0:1);_--){var k=!_;_?(r._dtickInit=r.dtick,r._tick0Init=r.tick0):x&&(r.minor._dtickInit=r.minor.dtick,r.minor._tick0Init=r.minor.tick0);var T=_?r:Sr.extendFlat({},r,x?r.minor:{minor:{}});if(k?Ge.prepMinorTicks(T,r,t):Ge.prepTicks(T,t),T.tickmode==="array"){_?(m=[],p=Iz(r,!k)):(b=[],y=Iz(r,!k));continue}if(T.tickmode==="sync"){m=[],p=t5e(r);continue}var q=N6(u),C=q[0],E=q[1],P=ya(T.dtick),R=a==="log"&&!(P||T.dtick.charAt(0)==="L"),N=Ge.tickFirst(T,t);if(_){if(r._tmin=N,N=E:O<=E;O=Ge.tickIncrement(O,G,f,n)){if(_&&U++,T.rangebreaks&&!f){if(O=v)break}if(m.length>d||O===I)break;I=O;var W={value:$xe(O,V,G)};_?(O===N&&(W.first=!0),R&&O!==(O|0)&&(W.simpleLabel=!0),i>1&&U%i&&(W.skipLabel=!0),m.push(W)):(W.minor=!0,b.push(W))}}if(!b||b.length<3)s=!1;else{var j=(b[2].value-b[1].value)*(l?-1:1);S5e(j,r.tickformat)||(s=!1,b=b.slice(1))}if(!s)A=m;else{var J=m.concat(b);o&&m.length&&(J=J.slice(1)),J=J.sort(function(Xe,Se){return Xe.value-Se.value}).filter(function(Xe,Se,Fe){return Se===0||Xe.value!==Fe[Se-1].value});var te=J.map(function(Xe,Se){return Xe.minor===void 0&&!Xe.skipLabel?Se:null}).filter(function(Xe){return Xe!==null});te.forEach(function(Xe){s.map(function(Se){var Fe=Xe+Se;Fe>=0&&Fe-1;be--){if(m[be].drop){m.splice(be,1);continue}m[be].value=L6(m[be].value,r);var Me=r.c2p(m[be].value);(Re?Ce>Me-ye:Cev||erv&&(Fe.periodX=v),ern&&pn&&mqm)r/=qm,a=n(10),e.dtick="M"+12*fl(r,a,km);else if(i>s0)r/=s0,e.dtick="M"+fl(r,1,Bz);else if(i>Sn){if(e.dtick=fl(r,Sn,e._hasDayOfWeekBreaks?[1,2,7,14]:a5e),!t){var o=Ge.getTickFormat(e),l=e.ticklabelmode==="period";l&&(e._rawTick0=e.tick0),/%[uVW]/.test(o)?e.tick0=Sr.dateTick0(e.calendar,2):e.tick0=Sr.dateTick0(e.calendar,1),l&&(e._dowTick0=e.tick0)}}else i>cl?e.dtick=fl(r,cl,Bz):i>Gh?e.dtick=fl(r,Gh,Oz):i>Em?e.dtick=fl(r,Em,Oz):(a=n(10),e.dtick=fl(r,a,km))}else if(e.type==="log"){e.tick0=0;var s=Sr.simpleMap(e.range,e.r2l);if(e._isMinor&&(r*=1.5),r>.7)e.dtick=Math.ceil(r);else if(Math.abs(s[1]-s[0])<1){var u=1.5*Math.abs((s[1]-s[0])/r);r=Math.abs(Math.pow(10,s[1])-Math.pow(10,s[0]))/u,a=n(10),e.dtick="L"+fl(r,a,km)}else e.dtick=r>.3?"D2":"D1"}else e.type==="category"||e.type==="multicategory"?(e.tick0=0,e.dtick=Math.ceil(Math.max(r,1))):H6(e)?(e.tick0=0,a=1,e.dtick=fl(r,a,n5e)):(e.tick0=0,a=n(10),e.dtick=fl(r,a,km));if(e.dtick===0&&(e.dtick=1),!ya(e.dtick)&&typeof e.dtick!="string"){var f=e.dtick;throw e.dtick=1,"ax.dtick error: "+String(f)}};function Xz(e){var r=e.dtick;if(e._tickexponent=0,!ya(r)&&typeof r!="string"&&(r=1),(e.type==="category"||e.type==="multicategory")&&(e._tickround=null),e.type==="date"){var t=e.r2l(e.tick0),a=e.l2r(t).replace(/(^-|i)/g,""),n=a.length;if(String(r).charAt(0)==="M")n>10||a.slice(5)!=="01-01"?e._tickround="d":e._tickround=+r.slice(1)%12===0?"y":"m";else if(r>=Sn&&n<=10||r>=Sn*15)e._tickround="d";else if(r>=Gh&&n<=16||r>=cl)e._tickround="M";else if(r>=Em&&n<=19||r>=Gh)e._tickround="S";else{var i=e.l2r(t+r).replace(/^-/,"").length;e._tickround=Math.max(n,i)-20,e._tickround<0&&(e._tickround=4)}}else if(ya(r)||r.charAt(0)==="L"){var o=e.range.map(e.r2d||Number);ya(r)||(r=Number(r.slice(1))),e._tickround=2-Math.floor(Math.log(r)/Math.LN10+.01);var l=Math.max(Math.abs(o[0]),Math.abs(o[1])),s=Math.floor(Math.log(l)/Math.LN10+.01),u=e.minexponent===void 0?3:e.minexponent;Math.abs(s)>u&&(u0(e.exponentformat)&&e.exponentformat!=="SI extended"&&!I6(s)||u0(e.exponentformat)&&e.exponentformat==="SI extended"&&!B6(s)?e._tickexponent=3*Math.round((s-1)/3):e._tickexponent=s)}else e._tickround=null}Ge.tickIncrement=function(e,r,t,a){var n=t?-1:1;if(ya(r))return Sr.increment(e,n*r);var i=r.charAt(0),o=n*Number(r.slice(1));if(i==="M")return Sr.incrementMonth(e,o,a);if(i==="L")return Math.log(Math.pow(10,e)+o)/Math.LN10;if(i==="D"){var l=r==="D2"?Wz:jz,s=e+n*.01,u=Sr.roundUp(Sr.mod(s,1),l,t);return Math.floor(s)+Math.log(Yi.round(Math.pow(10,u),1))/Math.LN10}throw"unrecognized dtick "+String(r)};Ge.tickFirst=function(e,r){var t=e.r2l||Number,a=Sr.simpleMap(e.range,t,void 0,void 0,r),n=a[1]=0&&x<=e._length?w:null};if(s&&Sr.isArrayOrTypedArray(e.ticktext)){var p=Sr.simpleMap(e.range,e.r2l),y=(Math.abs(p[1]-p[0])-(e._lBreaks||0))/1e4;for(v=0;v"+l;else{var u=jh(e),f=e._trueSide||e.side;(!u&&f==="top"||u&&f==="bottom")&&(o+="
")}r.text=o}function o5e(e,r,t,a,n){var i=e.dtick,o=r.x,l=e.tickformat,s=typeof i=="string"&&i.charAt(0);if(n==="never"&&(n=""),a&&s!=="L"&&(i="L3",s="L"),l||s==="L")r.text=Vh(Math.pow(10,o),e,n,a);else if(ya(i)||s==="D"&&(e.minorloglabels==="complete"||Sr.mod(o+.01,1)<.1)){var u;e.minorloglabels==="complete"&&!(Sr.mod(o+.01,1)<.1)&&(u=!0,r.fontSize*=.75);var f=Math.pow(10,o).toExponential(0),c=f.split("e"),v=+c[1],d=Math.abs(v),p=e.exponentformat;p==="power"||u0(p)&&p!=="SI extended"&&I6(v)||u0(p)&&p==="SI extended"&&B6(v)?(r.text=c[0],d>0&&(r.text+="x10"),r.text==="1x10"&&(r.text="10"),v!==0&&v!==1&&(r.text+=""+(v>0?"":nf)+d+""),r.fontSize*=1.25):(p==="e"||p==="E")&&d>2?r.text=c[0]+p+(v>0?"+":nf)+d:(r.text=Vh(Math.pow(10,o),e,"","fakehover"),i==="D1"&&e._id.charAt(0)==="y"&&(r.dy-=r.fontSize/6))}else if(s==="D")r.text=e.minorloglabels==="none"?"":String(Math.round(Math.pow(10,Sr.mod(o,1)))),r.fontSize*=.75;else throw"unrecognized dtick "+String(i);if(e.dtick==="D1"){var y=String(r.text).charAt(0);(y==="0"||y==="1")&&(e._id.charAt(0)==="y"?r.dx-=r.fontSize/4:(r.dy+=r.fontSize/2,r.dx+=(e.range[1]>e.range[0]?1:-1)*r.fontSize*(o<0?.5:.25)))}}function l5e(e,r){var t=e._categories[Math.round(r.x)];t===void 0&&(t=""),r.text=String(t)}function s5e(e,r,t){var a=Math.round(r.x),n=e._categories[a]||[],i=n[1]===void 0?"":String(n[1]),o=n[0]===void 0?"":String(n[0]);t?r.text=o+" - "+i:(r.text=i,r.text2=o)}function u5e(e,r,t,a,n){n==="never"?n="":e.showexponent==="all"&&Math.abs(r.x/e.dtick)<1e-6&&(n="hide"),r.text=Vh(r.x,e,n,a)}function f5e(e,r,t,a,n){if(e.thetaunit==="radians"&&!t){var i=r.x/180;if(i===0)r.text="0";else{var o=c5e(i);if(o[1]>=100)r.text=Vh(Sr.deg2rad(r.x),e,n,a);else{var l=r.x<0;o[1]===1?o[0]===1?r.text="\u03C0":r.text=o[0]+"\u03C0":r.text=["",o[0],"","\u2044","",o[1],"","\u03C0"].join(""),l&&(r.text=nf+r.text)}}}else r.text=Vh(r.x,e,n,a)}function c5e(e){function r(l,s){return Math.abs(l-s)<=1e-6}function t(l,s){return r(s,0)?l:t(s,l%s)}function a(l){for(var s=1;!r(Math.round(l*s)/s,l);)s*=10;return s}var n=a(e),i=e*n,o=Math.abs(t(i,n));return[Math.round(i/o),Math.round(n/o)]}var $z=["f","p","n","\u03BC","m","","k","M","G","T"],v5e=["q","r","y","z","a",...$z,"P","E","Z","Y","R","Q"],u0=e=>["SI","SI extended","B"].includes(e);function I6(e){return e>14||e<-15}function B6(e){return e>32||e<-30}function h5e(e,r){return u0(r)?!!(r==="SI extended"&&B6(e)||r!=="SI extended"&&I6(e)):!1}function Vh(e,r,t,a){var n=e<0,i=r._tickround,o=t||r.exponentformat||"B",l=r._tickexponent,s=Ge.getTickFormat(r),u=r.separatethousands;if(a){var f={exponentformat:o,minexponent:r.minexponent,dtick:r.showexponent==="none"?r.dtick:ya(e)&&Math.abs(e)||1,range:r.showexponent==="none"?r.range.map(r.r2d):[0,e||1]};Xz(f),i=(Number(f._tickround)||0)+4,l=f._tickexponent,r.hoverformat&&(s=r.hoverformat)}if(s)return r._numFormat(s)(e).replace(/-/g,nf);o==="none"&&(l=0),e=Math.abs(e);let c=Math.pow(10,-i)/2;if(e"+v+"":o==="B"&&l===9?e+="B":u0(o)&&(e+=o==="SI extended"?v5e[l/3+10]:$z[l/3+5])}return n?nf+e:e}Ge.getTickFormat=function(e){var r;function t(s){return typeof s!="string"?s:Number(s.replace("M",""))*s0}function a(s,u){var f=["L","D"];if(typeof s==typeof u){if(typeof s=="number")return s-u;var c=f.indexOf(s.charAt(0)),v=f.indexOf(u.charAt(0));return c===v?Number(s.replace(/(L|D)/g,""))-Number(u.replace(/(L|D)/g,"")):c-v}else return typeof s=="number"?1:-1}function n(s,u,f){var c=f||function(p){return p},v=u[0],d=u[1];return(!v&&typeof v!="number"||c(v)<=c(s))&&(!d&&typeof d!="number"||c(d)>=c(s))}function i(s,u){var f=u[0]===null,c=u[1]===null,v=a(s,u[0])>=0,d=a(s,u[1])<=0;return(f||v)&&(c||d)}var o,l;if(e.tickformatstops&&e.tickformatstops.length>0)switch(e.type){case"date":case"linear":{for(r=0;r=0&&n.unshift(n.splice(f,1).shift())}});var l={false:{left:0,right:0}};return Sr.syncOrAsync(n.map(function(s){return function(){if(s){var u=Ge.getFromId(e,s);t||(t={}),t.axShifts=l,t.overlayingShiftedAx=o;var f=Ge.drawOne(e,u,t);return u._shiftPusher&&z6(u,u._fullDepth||0,l,!0),u._r=u.range.slice(),u._rl=Sr.simpleMap(u._r,u.r2l),f}}}))};Ge.drawOne=function(e,r,t){t=t||{};var a=t.axShifts||{},n=t.overlayingShiftedAx||[],i,o,l;r.setScale();var s=e._fullLayout,u=r._id,f=u.charAt(0),c=Ge.counterLetter(u),v=s._plots[r._mainSubplot],d=r.zerolinelayer==="above traces";if(!v)return;if(r._shiftPusher=r.autoshift||n.indexOf(r._id)!==-1||n.indexOf(r.overlaying)!==-1,r._shiftPusher&r.anchor==="free"){var p=r.linewidth/2||0;r.ticks==="inside"&&(p+=r.ticklen),z6(r,p,a,!0),z6(r,r.shift||0,a,!1)}(t.skipTitle!==!0||r._shift===void 0)&&(r._shift=k5e(r,a));var y=v[f+"axislayer"],m=r._mainLinePosition,b=m+=r._shift,A=r._mainMirrorPosition,w=r._vals=Ge.calcTicks(r),x=[r.mirror,b,A].join("_");for(i=0;i0?Se.bottom-Je:0,Xe))));var xe=0,Ye=0;if(r._shiftPusher&&(xe=Math.max(Xe,Se.height>0?qe==="l"?Je-Se.left:Se.right-Je:0),r.title.text!==s._dfltTitle[f]&&(Ye=(r._titleStandoff||0)+(r._titleScoot||0),qe==="l"&&(Ye+=Uz(r))),r._fullDepth=Math.max(xe,Ye)),r.automargin){Fe={x:0,y:0,r:0,l:0,t:0,b:0};var vr=[0,1],Pe=typeof r._shift=="number"?r._shift:0;if(f==="x"){if(qe==="b"?Fe[qe]=r._depth:(Fe[qe]=r._depth=Math.max(Se.width>0?Je-Se.top:0,Xe),vr.reverse()),Se.width>0){var me=Se.right-(r._offset+r._length);me>0&&(Fe.xr=1,Fe.r=me);var Te=r._offset-Se.left;Te>0&&(Fe.xl=0,Fe.l=Te)}}else if(qe==="l"?(r._depth=Math.max(Se.height>0?Je-Se.left:0,Xe),Fe[qe]=r._depth-Pe):(r._depth=Math.max(Se.height>0?Se.right-Je:0,Xe),Fe[qe]=r._depth+Pe,vr.reverse()),Se.height>0){var Ue=Se.bottom-(r._offset+r._length);Ue>0&&(Fe.yb=0,Fe.b=Ue);var $e=r._offset-Se.top;$e>0&&(Fe.yt=1,Fe.t=$e)}Fe[c]=r.anchor==="free"?r.position:r._anchorAxis.domain[vr[0]],r.title.text!==s._dfltTitle[f]&&(Fe[qe]+=Uz(r)+(r.title.standoff||0)),r.mirror&&r.anchor!=="free"&&(er={x:0,y:0,r:0,l:0,t:0,b:0},er[Ze]=r.linewidth,r.mirror&&r.mirror!==!0&&(er[Ze]+=Xe),r.mirror===!0||r.mirror==="ticks"?er[c]=r._anchorAxis.domain[vr[1]]:(r.mirror==="all"||r.mirror==="allticks")&&(er[c]=[r._counterDomainMin,r._counterDomainMax][vr[1]]))}Ie&&(re=Hh.getComponentMethod("rangeslider","autoMarginOpts")(e,r)),typeof r.automargin=="string"&&(Hz(Fe,r.automargin),Hz(er,r.automargin)),o0.autoMargin(e,O6(r),Fe),o0.autoMargin(e,Kz(r),er),o0.autoMargin(e,Qz(r),re)}),Sr.syncOrAsync(Le)}};function Hz(e,r){if(e){var t=Object.keys(Rz).reduce(function(a,n){return r.indexOf(n)!==-1&&Rz[n].forEach(function(i){a[i]=1}),a},{});Object.keys(e).forEach(function(a){t[a]||(a.length===1?e[a]=0:delete e[a])})}}function d5e(e,r){var t=[],a,n=function(i,o){var l=i.xbnd[o];l!==null&&t.push(Sr.extendFlat({},i,{x:l}))};if(r.length){for(a=0;ae.range[1],l=e.ticklabelposition&&e.ticklabelposition.indexOf("inside")!==-1,s=!l;if(t){var u=o?-1:1;t=t*u}if(a){var f=e.side,c=l&&(f==="top"||f==="left")||s&&(f==="bottom"||f==="right")?1:-1;a=a*c}return e._id.charAt(0)==="x"?function(v){return l0(n+e._offset+e.l2p(R6(v))+t,i+a)}:function(v){return l0(i+a,n+e._offset+e.l2p(R6(v))+t)}};function R6(e){return e.periodX!==void 0?e.periodX:e.x}function g5e(e){var r=e.ticklabelposition||"",t=e.tickson||"",a=function(p){return r.indexOf(p)!==-1},n=a("top"),i=a("left"),o=a("right"),l=a("bottom"),s=a("inside"),u=t!=="boundaries"&&(l||i||n||o);if(!u&&!s)return[0,0];var f=e.side,c=u?(e.tickwidth||0)/2:0,v=Pm,d=e.tickfont?e.tickfont.size:12;return(l||n)&&(c+=d*of,v+=(e.linewidth||0)/2),(i||o)&&(c+=(e.linewidth||0)/2,v+=Pm),s&&f==="top"&&(v-=d*(1-of)),(i||n)&&(c=-c),(f==="bottom"||f==="right")&&(v=-v),[u?c:0,s?v:0]}Ge.makeTickPath=function(e,r,t,a){a||(a={});var n=a.minor;if(n&&!e.minor)return"";var i=a.len!==void 0?a.len:n?e.minor.ticklen:e.ticklen,o=e._id.charAt(0),l=(e.linewidth||1)/2;return o==="x"?"M0,"+(r+l*t)+"v"+i*t:"M"+(r+l*t)+",0h"+i*t};Ge.makeLabelFns=function(e,r,t){var a=e.ticklabelposition||"",n=e.tickson||"",i=function(N){return a.indexOf(N)!==-1},o=i("top"),l=i("left"),s=i("right"),u=i("bottom"),f=n!=="boundaries"&&(u||l||o||s),c=i("inside"),v=a==="inside"&&e.ticks==="inside"||!c&&e.ticks==="outside"&&n!=="boundaries",d=0,p=0,y=v?e.ticklen:0;if(c?y*=-1:f&&(y=0),v&&(d+=y,t)){var m=Sr.deg2rad(t);d=y*Math.cos(m)+1,p=y*Math.sin(m)}e.showticklabels&&(v||e.showline)&&(d+=.2*e.tickfont.size),d+=(e.linewidth||1)/2*(c?-1:1);var b={labelStandoff:d,labelShift:p},A,w,x,_,k=0,T=e.side,q=e._id.charAt(0),C=e.tickangle,E;if(q==="x")E=!c&&T==="bottom"||c&&T==="top",_=E?1:-1,c&&(_*=-1),A=p*_,w=r+d*_,x=E?1:-.2,Math.abs(C)===90&&(c?x+=Oh:C===-90&&T==="bottom"?x=of:C===90&&T==="top"?x=Oh:x=.5,k=Oh/2*(C/90)),b.xFn=function(N){return N.dx+A+k*N.fontSize},b.yFn=function(N){return N.dy+w+N.fontSize*x},b.anchorFn=function(N,I){if(f){if(l)return"end";if(s)return"start"}return!ya(I)||I===0||I===180?"middle":I*_<0!==c?"end":"start"},b.heightFn=function(N,I,O){return I<-60||I>60?-.5*O:e.side==="top"!==c?-O:0};else if(q==="y"){if(E=!c&&T==="left"||c&&T==="right",_=E?1:-1,c&&(_*=-1),A=d,w=p*_,x=0,!c&&Math.abs(C)===90&&(C===-90&&T==="left"||C===90&&T==="right"?x=of:x=.5),c){var P=ya(C)?+C:0;if(P!==0){var R=Sr.deg2rad(P);k=Math.abs(Math.sin(R))*of*_,x=0}}b.xFn=function(N){return N.dx+r-(A+N.fontSize*x)*_+k*N.fontSize},b.yFn=function(N){return N.dy+w+N.fontSize*Oh},b.anchorFn=function(N,I){return ya(I)&&Math.abs(I)===90?"middle":E?"end":"start"},b.heightFn=function(N,I,O){return e.side==="right"&&(I*=-1),I<-30?-O:I<30?-.5*O:0}}return b};function zm(e){return[e.text,e.x,e.axInfo,e.font,e.fontSize,e.fontColor].join("_")}Ge.drawTicks=function(e,r,t){t=t||{};var a=r._id+"tick",n=[].concat(r.minor&&r.minor.ticks?t.vals.filter(function(o){return o.minor&&!o.noTick}):[]).concat(r.ticks?t.vals.filter(function(o){return!o.minor&&!o.noTick}):[]),i=t.layer.selectAll("path."+a).data(n,zm);i.exit().remove(),i.enter().append("path").classed(a,1).classed("ticks",1).classed("crisp",t.crisp!==!1).each(function(o){return Uh.stroke(Yi.select(this),o.minor?r.minor.tickcolor:r.tickcolor)}).style("stroke-width",function(o){return gi.crispRound(e,o.minor?r.minor.tickwidth:r.tickwidth,1)+"px"}).attr("d",t.path).style("display",null),Nm(r,[Gz]),i.attr("transform",t.transFn)};Ge.drawGrid=function(e,r,t){if(t=t||{},r.tickmode!=="sync"){var a=r._id+"grid",n=r.minor&&r.minor.showgrid,i=n?t.vals.filter(function(b){return b.minor}):[],o=r.showgrid?t.vals.filter(function(b){return!b.minor}):[],l=t.counterAxis;if(l&&Ge.shouldShowZeroLine(e,r,l))for(var s=r.tickmode==="array",u=0;u=0;p--){var y=p?v:d;if(y){var m=y.selectAll("path."+a).data(p?o:i,zm);m.exit().remove(),m.enter().append("path").classed(a,1).classed("crisp",t.crisp!==!1),m.attr("transform",t.transFn).attr("d",t.path).each(function(b){return Uh.stroke(Yi.select(this),b.minor?r.minor.gridcolor:r.gridcolor||"#ddd")}).style("stroke-dasharray",function(b){return gi.dashStyle(b.minor?r.minor.griddash:r.griddash,b.minor?r.minor.gridwidth:r.gridwidth)}).style("stroke-width",function(b){return(b.minor?c:r._gw)+"px"}).style("display",null),typeof t.path=="function"&&m.attr("d",t.path)}}Nm(r,[E6,P6])}};Ge.drawZeroLine=function(e,r,t){t=t||t;var a=r._id+"zl",n=Ge.shouldShowZeroLine(e,r,t.counterAxis),i=t.layer.selectAll("path."+a).data(n?[{x:0,id:r._id}]:[]);i.exit().remove(),i.enter().append("path").classed(a,1).classed("zl",1).classed("crisp",t.crisp!==!1).each(function(){t.layer.selectAll("path").sort(function(o,l){return Wxe(o.id,l.id)})}),i.attr("transform",t.transFn).attr("d",t.path).call(Uh.stroke,r.zerolinecolor||Uh.defaultLine).style("stroke-width",gi.crispRound(e,r.zerolinewidth,r._gw||1)+"px").style("display",null),Nm(r,[D6])};Ge.drawLabels=function(e,r,t){t=t||{};var a=e._fullLayout,n=r._id,i=r.zerolinelayer==="above traces",o=t.cls||n+"tick",l=t.vals.filter(function(V){return V.text}),s=t.labelFns,u=t.secondary?0:r.tickangle,f=(r._prevTickAngles||{})[o],c=t.layer.selectAll("g."+o).data(r.showticklabels?l:[],zm),v=[];c.enter().append("g").classed(o,1).append("text").attr("text-anchor","middle").each(function(V){var W=Yi.select(this),j=e._promises.length;W.call(af.positionText,s.xFn(V),s.yFn(V)).call(gi.font,{family:V.font,size:V.fontSize,color:V.fontColor,weight:V.fontWeight,style:V.fontStyle,variant:V.fontVariant,textcase:V.fontTextcase,lineposition:V.fontLineposition,shadow:V.fontShadow}).text(V.text).call(af.convertToTspans,e),e._promises[j]?v.push(e._promises.pop().then(function(){d(W,u)})):d(W,u)}),Nm(r,[Pz]),c.exit().remove(),t.repositionOnUpdate&&c.each(function(V){Yi.select(this).select("text").call(af.positionText,s.xFn(V),s.yFn(V))});function d(V,W){V.each(function(j){var J=Yi.select(this),te=J.select(".text-math-group"),ae=s.anchorFn(j,W),se=t.transFn.call(J.node(),j)+(ya(W)&&+W!=0?" rotate("+W+","+s.xFn(j)+","+(s.yFn(j)-j.fontSize/2)+")":""),$=af.lineCount(J),fe=Yh*j.fontSize,ie=s.heightFn(j,ya(W)?+W:0,($-1)*fe);if(ie&&(se+=l0(0,ie)),te.empty()){var ue=J.select("text");ue.attr({transform:se,"text-anchor":ae}),ue.style("display",null),r._adjustTickLabelsOverflow&&r._adjustTickLabelsOverflow()}else{var ce=gi.bBox(te.node()).width,oe=ce*{end:-.5,start:.5}[ae];te.attr("transform",se+l0(oe,0))}})}r._adjustTickLabelsOverflow=function(){var V=r.ticklabeloverflow;if(!(!V||V==="allow")){var W=V.indexOf("hide")!==-1,j=r._id.charAt(0)==="x",J=0,te=j?e._fullLayout.width:e._fullLayout.height;if(V.indexOf("domain")!==-1){var ae=Sr.simpleMap(r.range,r.r2l);J=r.l2p(ae[0])+r._offset,te=r.l2p(ae[1])+r._offset}var se=Math.min(J,te),$=Math.max(J,te),fe=r.side,ie=1/0,ue=-1/0;c.each(function(Re){var ye=Yi.select(this),Ce=ye.select(".text-math-group");if(Ce.empty()){var Me=gi.bBox(ye.node()),Le=0;j?(Me.right>$||Me.left$||Me.top+(r.tickangle?0:Re.fontSize/4)r["_visibleLabelMin_"+ae._id]?ye.style("display","none"):$.K==="tick"&&!se&&ye.node().style.display!=="none"&&ye.style("display",null)})})})})},d(c,f+1?f:u);function p(){return v.length&&Promise.all(v)}var y=null;function m(){if(d(c,u),l.length&&r.autotickangles&&(r.type!=="log"||String(r.dtick).charAt(0)!=="D")){y=r.autotickangles[0];var V=0,W=[],j,J=1;c.each(function(Fe){V=Math.max(V,Fe.fontSize);var er=r.l2p(Fe.x),re=F6(this),xe=gi.bBox(re.node());J=Math.max(J,af.lineCount(re)),W.push({top:0,bottom:10,height:10,left:er-xe.width/2,right:er+xe.width/2+2,width:xe.width+2})});var te=(r.tickson==="boundaries"||r.showdividers)&&!t.secondary,ae=l.length,se=Math.abs((l[ae-1].x-l[0].x)*r._m)/(ae-1),$=te?se/2:se,fe=te?r.ticklen:V*1.25*J,ie=Math.sqrt(Math.pow($,2)+Math.pow(fe,2)),ue=$/ie,ce=r.autotickangles.map(function(Fe){return Fe*Math.PI/180}),oe=ce.find(function(Fe){return Math.abs(Math.cos(Fe))<=ue});oe===void 0&&(oe=ce.reduce(function(Fe,er){return Math.abs(Math.cos(Fe))U*O&&(R=O,C[q]=E[q]=N[q])}var Y=Math.abs(R-P);Y-_>0?(Y-=_,_*=1+_/Y):_=0,r._id.charAt(0)!=="y"&&(_=-_),C[T]=w.p2r(w.r2p(E[T])+k*_),w.autorange==="min"||w.autorange==="max reversed"?(C[0]=null,w._rangeInitial0=void 0,w._rangeInitial1=void 0):(w.autorange==="max"||w.autorange==="min reversed")&&(C[1]=null,w._rangeInitial0=void 0,w._rangeInitial1=void 0),a._insideTickLabelsUpdaterange[w._name+".range"]=C}var G=Sr.syncOrAsync(b);return G&&G.then&&e._promises.push(G),G};function b5e(e,r,t){var a=r._id+"divider",n=t.vals,i=t.layer.selectAll("path."+a).data(n,zm);i.exit().remove(),i.enter().insert("path",":first-child").classed(a,1).classed("crisp",1).call(Uh.stroke,r.dividercolor).style("stroke-width",gi.crispRound(e,r.dividerwidth,1)+"px"),i.attr("transform",t.transFn).attr("d",t.path)}Ge.getPxPosition=function(e,r){var t=e._fullLayout._size,a=r._id.charAt(0),n=r.side,i;if(r.anchor!=="free"?i=r._anchorAxis:a==="x"?i={_offset:t.t+(1-(r.position||0))*t.h,_length:0}:a==="y"&&(i={_offset:t.l+(r.position||0)*t.w+r._shift,_length:0}),n==="top"||n==="left")return i._offset;if(n==="bottom"||n==="right")return i._offset+i._length};function Uz(e){var r=e.title.font.size,t=(e.title.text.match(af.BR_TAG_ALL)||[]).length;return e.title.hasOwnProperty("standoff")?r*(of+t*Yh):t?r*(t+1)*Yh:r}function x5e(e,r){var t=e._fullLayout,a=r._id,n=a.charAt(0),i=r.title.font.size,o,l=(r.title.text.match(af.BR_TAG_ALL)||[]).length;if(r.title.hasOwnProperty("standoff"))r.side==="bottom"||r.side==="right"?o=r._depth+r.title.standoff+i*of:(r.side==="top"||r.side==="left")&&(o=r._depth+r.title.standoff+i*(Oh+l*Yh));else{var s=jh(r);if(r.type==="multicategory")o=r._depth;else{var u=1.5*i;s&&(u=.5*i,r.ticks==="outside"&&(u+=r.ticklen)),o=10+u+(r.linewidth?r.linewidth-1:0)}s||(n==="x"?o+=r.side==="top"?i*(r.showticklabels?1:0):i*(r.showticklabels?1.5:.5):o+=r.side==="right"?i*(r.showticklabels?1:.5):i*(r.showticklabels?.5:0))}var f=Ge.getPxPosition(e,r),c,v,d;n==="x"?(v=r._offset+r._length/2,d=r.side==="top"?f-o:f+o):(d=r._offset+r._length/2,v=r.side==="right"?f+o:f-o,c={rotate:"-90",offset:0});var p;if(r.type!=="multicategory"){var y=r._selections[r._id+"tick"];if(p={selection:y,side:r.side},y&&y.node()&&y.node().parentNode){var m=gi.getTranslate(y.node().parentNode);p.offsetLeft=m.x,p.offsetTop=m.y}r.title.hasOwnProperty("standoff")&&(p.pad=0)}return r._titleStandoff=o,Ixe.draw(e,a+"title",{propContainer:r,propName:r._name+".title.text",placeholder:t._dfltTitle[n],avoid:p,transform:c,attributes:{x:v,y:d,"text-anchor":"middle"}})}Ge.shouldShowZeroLine=function(e,r,t){var a=Sr.simpleMap(r.range,r.r2l);return a[0]*a[1]<=0&&r.zeroline&&(r.type==="linear"||r.type==="-")&&!(r.rangebreaks&&r.maskBreaks(0)===Rm)&&(Jz(r,0)||!_5e(e,r,t,a)||w5e(e,r))};Ge.clipEnds=function(e,r){return r.filter(function(t){return Jz(e,t.x)})};function Jz(e,r){var t=e.l2p(r);return t>1&&t1)for(n=1;n=n.min&&e=Yxe:/%L/.test(r)?e>=Gxe:/%[SX]/.test(r)?e>=Em:/%M/.test(r)?e>=Gh:/%[HI]/.test(r)?e>=cl:/%p/.test(r)?e>=Bs:/%[Aadejuwx]/.test(r)?e>=Sn:/%[UVW]/.test(r)?e>=bi:/%[Bbm]/.test(r)?e>=Dm:/%[q]/.test(r)?e>=Cm:/%[Yy]/.test(r)?e>=Lm:!0}});var tN=z((rZe,rN)=>{"use strict";rN.exports=function(r,t,a){var n,i;if(a){var o=t==="reversed"||t==="min reversed"||t==="max reversed";n=a[o?1:0],i=a[o?0:1]}var l=r("autorangeoptions.minallowed",i===null?n:void 0),s=r("autorangeoptions.maxallowed",n===null?i:void 0);l===void 0&&r("autorangeoptions.clipmin"),s===void 0&&r("autorangeoptions.clipmax"),r("autorangeoptions.include")}});var U6=z((tZe,aN)=>{"use strict";var q5e=tN();aN.exports=function(r,t,a,n){var i=t._template||{},o=t.type||i.type||"-";a("minallowed"),a("maxallowed");var l=a("range");if(!l){var s;!n.noInsiderange&&o!=="log"&&(s=a("insiderange"),s&&(s[0]===null||s[1]===null)&&(t.insiderange=!1,s=void 0),s&&(l=a("range",s)))}var u=t.getAutorangeDflt(l,n),f=a("autorange",u),c;l&&(l[0]===null&&l[1]===null||(l[0]===null||l[1]===null)&&(f==="reversed"||f===!0)||l[0]!==null&&(f==="min"||f==="max reversed")||l[1]!==null&&(f==="max"||f==="min reversed"))&&(l=void 0,delete t.range,t.autorange=!0,c=!0),c||(u=t.getAutorangeDflt(l,n),f=a("autorange",u)),f&&(q5e(a,f,l),(o==="linear"||o==="-")&&a("rangemode")),t.cleanRange()}});var iN=z((aZe,nN)=>{var L5e={left:0,top:0};nN.exports=C5e;function C5e(e,r,t){r=r||e.currentTarget||e.srcElement,Array.isArray(t)||(t=[0,0]);var a=e.clientX||0,n=e.clientY||0,i=D5e(r);return t[0]=a-i.left,t[1]=n-i.top,t}function D5e(e){return e===window||e===document||e===document.body?L5e:e.getBoundingClientRect()}});var G6=z((nZe,oN)=>{"use strict";var E5e=A4();function P5e(){var e=!1;try{var r=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,r),window.removeEventListener("test",null,r)}catch(t){e=!1}return e}oN.exports=E5e&&P5e()});var sN=z((iZe,lN)=>{"use strict";lN.exports=function(r,t,a,n,i){var o=(r-a)/(n-a),l=o+t/(n-a),s=(o+l)/2;return i==="left"||i==="bottom"?o:i==="center"||i==="middle"?s:i==="right"||i==="top"?l:o<2/3-s?o:l>4/3-s?l:s}});var cN=z((oZe,fN)=>{"use strict";var uN=ke(),R5e=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];fN.exports=function(r,t,a,n){return a==="left"?r=0:a==="center"?r=1:a==="right"?r=2:r=uN.constrain(Math.floor(r*3),0,2),n==="bottom"?t=0:n==="middle"?t=1:n==="top"?t=2:t=uN.constrain(Math.floor(t*3),0,2),R5e[t][r]}});var hN=z((lZe,vN)=>{"use strict";var F5e=Ch(),z5e=zp(),N5e=wh().getGraphDiv,I5e=(ah(),ze(th)),Y6=vN.exports={};Y6.wrapped=function(e,r,t){var i;e=N5e(e),e._fullLayout&&z5e.clear(e._fullLayout._uid+I5e.HOVERID);let a=e._hoverdata;Y6.raw(e,r,t)&&e._hoverAnywhereActive&&(e._hoverAnywhereActive=!1,(i=e._fullLayout)!=null&&i.hoveranywhere&&(r!=null&&r.target)&&!a&&e.emit("plotly_unhover",{event:r,points:[]}))};Y6.raw=function(r,t){var a=r._fullLayout,n=r._hoverdata;return t||(t={}),t.target&&!r._dragged&&F5e.triggerHandler(r,"plotly_beforehover",t)===!1?!1:(a._hoverlayer.selectAll("g").remove(),a._hoverlayer.selectAll("line").remove(),a._hoverlayer.selectAll("circle").remove(),r._hoverdata=void 0,t.target&&n&&r.emit("plotly_unhover",{event:t,points:n}),!0)}});var Vi=z((sZe,yN)=>{"use strict";var B5e=iN(),V6=M4(),O5e=G6(),H5e=ke().removeElement,U5e=(Pa(),ze(Ea)),lf=yN.exports={};lf.align=sN();lf.getCursor=cN();var pN=hN();lf.unhover=pN.wrapped;lf.unhoverRaw=pN.raw;lf.init=function(r){var t=r.gd,a=1,n=t._context.doubleClickDelay,i=r.element,o,l,s,u,f,c,v,d;t._mouseDownTime||(t._mouseDownTime=0),i.style.pointerEvents="all",i.onmousedown=m,O5e?(i._ontouchstart&&i.removeEventListener("touchstart",i._ontouchstart),i._ontouchstart=m,i.addEventListener("touchstart",m,{passive:!1})):i.ontouchstart=m;function p(w,x,_){return Math.abs(w)<_&&(w=0),Math.abs(x)<_&&(x=0),[w,x]}var y=r.clampFn||p;function m(w){t._dragged=!1,t._dragging=!0;var x=dN(w);o=x[0],l=x[1],v=w.target,c=w,d=w.buttons===2||w.ctrlKey,typeof w.clientX=="undefined"&&typeof w.clientY=="undefined"&&(w.clientX=o,w.clientY=l),s=new Date().getTime(),s-t._mouseDownTimen&&(a=Math.max(a-1,1)),t._dragged)r.doneFn&&r.doneFn();else{var x;c.target===v?x=c:(x={target:v,srcElement:v,toElement:v},Object.keys(c).concat(Object.keys(c.__proto__)).forEach(_=>{var k=c[_];!x[_]&&typeof k!="function"&&(x[_]=k)})),r.clickFn&&r.clickFn(a,x),d||v.dispatchEvent(new MouseEvent("click",w))}t._dragging=!1,t._dragged=!1}};function mN(){var e=document.createElement("div");e.className="dragcover";var r=e.style;return r.position="fixed",r.left=0,r.right=0,r.top=0,r.bottom=0,r.zIndex=999999999,r.background="none",document.body.appendChild(e),e}lf.coverSlip=mN;function dN(e){return B5e(e.changedTouches?e.changedTouches[0]:e,document.body)}});var Os=z((uZe,gN)=>{"use strict";gN.exports=function(r,t){(r.attr("class")||"").split(" ").forEach(function(a){a.indexOf("cursor-")===0&&r.classed(a,!1)}),t&&r.classed("cursor-"+t,!0)}});var _N=z((fZe,xN)=>{"use strict";var j6=Os(),Wh="data-savedcursor",bN="!!";xN.exports=function(r,t){var a=r.attr(Wh);if(t){if(!a){for(var n=(r.attr("class")||"").split(" "),i=0;i{"use strict";var W6=Ca(),G5e=Ii();wN.exports={_isSubplotObj:!0,visible:{valType:"boolean",dflt:!0,editType:"legend"},bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:G5e.defaultLine,editType:"legend"},maxheight:{valType:"number",min:0,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:W6({editType:"legend"}),grouptitlefont:W6({editType:"legend"}),orientation:{valType:"enumerated",values:["v","h"],dflt:"v",editType:"legend"},traceorder:{valType:"flaglist",flags:["reversed","grouped"],extras:["normal"],editType:"legend"},tracegroupgap:{valType:"number",min:0,dflt:10,editType:"legend"},entrywidth:{valType:"number",min:0,editType:"legend"},entrywidthmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels",editType:"legend"},indentation:{valType:"number",min:-15,dflt:0,editType:"legend"},itemsizing:{valType:"enumerated",values:["trace","constant"],dflt:"trace",editType:"legend"},itemwidth:{valType:"number",min:30,dflt:30,editType:"legend"},itemclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggle",editType:"legend"},itemdoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggleothers",editType:"legend"},groupclick:{valType:"enumerated",values:["toggleitem","togglegroup"],dflt:"togglegroup",editType:"legend"},groupdoubleclick:{valType:"enumerated",values:["toggleitem","togglegroup"],editType:"legend"},titleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],editType:"legend"},titledoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],editType:"legend"},x:{valType:"number",editType:"legend"},xref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"legend"},y:{valType:"number",editType:"legend"},yref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],editType:"legend"},uirevision:{valType:"any",editType:"none"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"legend"},title:{text:{valType:"string",dflt:"",editType:"legend"},font:W6({editType:"legend"}),side:{valType:"enumerated",values:["top","left","top left","top center","top right"],editType:"legend"},editType:"legend"},editType:"legend"}});var Zh=z(Xh=>{"use strict";Xh.isGrouped=function(r){return(r.traceorder||"").indexOf("grouped")!==-1};Xh.isVertical=function(r){return r.orientation!=="h"};Xh.isReversed=function(r){return(r.traceorder||"").indexOf("reversed")!==-1};Xh.getId=function(r){return r._id||"legend"}});var $6=z((hZe,AN)=>{"use strict";var Im=Tr(),xi=ke(),Y5e=Ct(),V5e=On(),j5e=X6(),W5e=Ic(),Z6=Zh();function X5e(e,r,t,a,n){var i=r[e]||{},o=Y5e.newContainer(t,e);function l(W,j){return xi.coerce(i,o,j5e,W,j)}var s=xi.coerceFont(l,"font",t.font);l("bgcolor",t.paper_bgcolor),l("bordercolor");var u=l("visible");if(!u)return;var f,c=function(W,j){var J=f._input,te=f;return xi.coerce(J,te,V5e,W,j)},v=t.font||{},d=xi.coerceFont(l,"grouptitlefont",v,{overrideDflt:{size:Math.round(v.size*1.1)}}),p=0,y=!1,m="normal",b=(t.shapes||[]).filter(function(W){return W.showlegend});function A(W){return Im.traceIs(W,"pie-like")&&W._length!=null&&(Array.isArray(W.legend)||Array.isArray(W.showlegend))}a.filter(A).forEach(function(W){W.visible&&p++;for(var j=0;jW.legend.length)for(var te=W.legend.length;te(e==="legend"?1:0));if(k===!1&&(t[e]=void 0),k===!1&&!i.uirevision||(l("uirevision",t.uirevision),k===!1))return;l("borderwidth");var T=l("orientation"),q=l("yref"),C=l("xref"),E=T==="h",P=q==="paper",R=C==="paper",N,I,O,U="left";E?(N=0,Im.getComponentMethod("rangeslider","isVisible")(r.xaxis)?P?(I=1.1,O="bottom"):(I=1,O="top"):P?(I=-.1,O="top"):(I=0,O="bottom")):(I=1,O="auto",R?N=1.02:(N=1,U="right")),xi.coerce(i,o,{x:{valType:"number",editType:"legend",min:R?-2:0,max:R?3:1,dflt:N}},"x"),xi.coerce(i,o,{y:{valType:"number",editType:"legend",min:P?-2:0,max:P?3:1,dflt:I}},"y"),l("traceorder",m),Z6.isGrouped(t[e])&&l("tracegroupgap"),l("entrywidth"),l("entrywidthmode"),l("indentation"),l("itemsizing"),l("itemwidth"),l("itemclick"),l("itemdoubleclick");let Y=l("groupclick");l("groupdoubleclick",Y),l("xanchor",U),l("yanchor",O),l("maxheight"),l("valign"),xi.noneOrAll(i,o,["x","y"]);var G=l("title.text");if(G){l("title.side",E?"left":"top");var V=xi.extendFlat({},s,{size:xi.bigFont(s.size)});xi.coerceFont(l,"title.font",V);let W=n>1;l("titleclick",W?"toggle":!1),l("titledoubleclick",W?"toggleothers":!1)}}AN.exports=function(r,t,a){var n,i=a.slice(),o=t.shapes;if(o)for(n=0;n{"use strict";var Hs=Tr(),J6=ke(),Z5e=J6.pushUnique,$5e=Zh(),TN=!0;K6.handleItemClick=function(r,t,a,n,i){var o=t._fullLayout;if(t._dragged||t._editing)return;var l=r.data()[0][0];if(l.groupTitle&&l.noClick)return;let s=i===2?a.groupdoubleclick:a.groupclick;n==="toggle"&&a.itemdoubleclick==="toggleothers"&&TN&&t.data&&t._context.showTips&&(J6.notifier(J6._(t,"Double-click on legend to isolate one trace"),"long",t),TN=!1);var u=s==="togglegroup",f=o.hiddenlabels?o.hiddenlabels.slice():[],c=t._fullData;let v=(o.shapes||[]).filter(De=>De.showlegend||De.legendgroup);var d=c.concat(v),p=l.trace;p._isShape&&(p=o.shapes[p.index]);var y=p.legendgroup,m,b,A,w,x,_,k={},T=[],q=[],C=[];function E(De,Ie){var qe=T.indexOf(De),Ze=k.visible;return Ze||(Ze=k.visible=[]),T.indexOf(De)===-1&&(T.push(De),qe=T.length-1),Ze[qe]=Ie,qe}var P=(o.shapes||[]).map(function(De){return De._input}),R=!1;function N(De,Ie){P[De].visible=Ie,R=!0}function I(De,Ie){if(!(l.groupTitle&&!u)){var qe=De._isShape,Ze=De.index;Ze===void 0&&(Ze=De._index);var Je=De.visible===!1?!1:Ie;qe?N(Ze,Je):E(Ze,Je)}}var O=p.legend;if(!p._isShape&&Hs.traceIs(p,"pie-like")){var U=l.label,Y=f.indexOf(U);if(n==="toggle")Y===-1?f.push(U):f.splice(Y,1);else if(n==="toggleothers"){var G=Y!==-1,V=[];for(m=0;mb.showlegend||b.legendgroup),s=i.concat(l);function u(b){return(b.legend||"legend")===o}var f,c;if(a==="toggle")f=!s.some(function(A){return u(A)&&A.visible===!0}),c=!1;else{let b=s.some(function(A){return!u(A)&&A.visible===!0&&A.showlegend!==!1});f=!0,c=!b}let v={visible:[]},d=[],p=(n.shapes||[]).map(function(b){return b._input});for(var y=!1,m=0;ma_e,scrollBarColor:()=>Q5e,scrollBarEnterAttrs:()=>r_e,scrollBarMargin:()=>e_e,scrollBarMinHeight:()=>K5e,scrollBarWidth:()=>J5e,titlePad:()=>t_e});var J5e,K5e,Q5e,e_e,r_e,t_e,a_e,r7=St(()=>{"use strict";J5e=6,K5e=20,Q5e="#808BA4",e_e=4,r_e={rx:20,ry:3,width:0,height:0},t_e=2,a_e=5});var SN=z((pZe,kN)=>{"use strict";var{isArrayOrTypedArray:t7}=Zn(),MN=Tr(),a7=Zh();kN.exports=function(r,t,a){var n=t._inHover,i=a7.isGrouped(t),o=a7.isReversed(t),l={},s=[],u=!1,f={},c=0,v=0,d,p;function y(W,j,J){if(t.visible!==!1&&!(a&&W!==t._id))if(j===""||!a7.isGrouped(t)){var te="~~i"+c;s.push(te),l[te]=[J],c++}else s.indexOf(j)===-1?(s.push(j),u=!0,l[j]=[J]):l[j].push(J)}for(d=0;dN&&(P=N)}C[d][0]._groupMinRank=P,C[d][0]._preGroupSort=d}var I=function(W,j){return W[0]._groupMinRank-j[0]._groupMinRank||W[0]._preGroupSort-j[0]._preGroupSort},O=function(W,j){var J=t7(W.trace.legendrank)?W.trace.legendrank[W.i]:W.trace.legendrank,te=t7(j.trace.legendrank)?j.trace.legendrank[j.i]:j.trace.legendrank;return J-te||W._preSort-j._preSort};for(C.forEach(function(W,j){W[0]._preGroupSort=j}),C.sort(I),d=0;d{"use strict";var Bm=ke();function qN(e){return e.indexOf("e")!==-1?e.replace(/[.]?0+e/,"e"):e.indexOf(".")!==-1?e.replace(/[.]?0+$/,""):e}sf.formatPiePercent=function(r,t){var a=qN((r*100).toPrecision(3));return Bm.numSeparate(a,t)+"%"};sf.formatPieValue=function(r,t){var a=qN(r.toPrecision(10));return Bm.numSeparate(a,t)};sf.getFirstFilled=function(r,t){if(Bm.isArrayOrTypedArray(r))for(var a=0;a{"use strict";var n_e=Jr(),i_e=qr();LN.exports=function(r,t,a,n){var i=a.marker.pattern;i&&i.shape?n_e.pointStyle(r,a,n,t):i_e.fill(r,t.color)}});var Hm=z((gZe,PN)=>{"use strict";var DN=qr(),EN=Om().castOption,o_e=CN();PN.exports=function(r,t,a,n){var i=a.marker.line,o=EN(i.color,t.pts)||DN.defaultLine,l=EN(i.width,t.pts)||0;r.call(o_e,t,a,n).style("stroke-width",l).call(DN.stroke,o)}});var l7=z((bZe,BN)=>{"use strict";var qn=Pr(),n7=Tr(),mn=ke(),RN=mn.strTranslate,_i=Jr(),ji=qr(),i7=yi().extractOpts,Um=ri(),l_e=Hm(),s_e=Om().castOption,u_e=(r7(),ze(e7)),FN=12,zN=5,uf=2,f_e=10,f0=5;BN.exports=function(r,t,a){var n=t._fullLayout;a||(a=n.legend);var i=a.itemsizing==="constant",o=a.itemwidth,l=(o+u_e.itemGap*2)/2,s=RN(l,0),u=function(T,q,C,E){var P;if(T+1)P=T;else if(q&&q.width>0)P=q.width;else return 0;return i?E:Math.min(P,C)};r.each(function(T){var q=qn.select(this),C=mn.ensureSingle(q,"g","layers");C.style("opacity",T[0].trace.opacity);var E=a.indentation,P=a.valign,R=T[0].lineHeight,N=T[0].height;if(P==="middle"&&E===0||!R||!N)C.attr("transform",null);else{var I={top:1,bottom:-1}[P],O=I*(.5*(R-N+3))||0,U=a.indentation;C.attr("transform",RN(U,O))}var Y=C.selectAll("g.legendfill").data([T]);Y.enter().append("g").classed("legendfill",!0);var G=C.selectAll("g.legendlines").data([T]);G.enter().append("g").classed("legendlines",!0);var V=C.selectAll("g.legendsymbols").data([T]);V.enter().append("g").classed("legendsymbols",!0),V.selectAll("g.legendpoints").data([T]).enter().append("g").classed("legendpoints",!0)}).each(k).each(v).each(p).each(d).each(m).each(x).each(w).each(f).each(c).each(b).each(A);function f(T){var q=NN(T),C=q.showFill,E=q.showLine,P=q.showGradientLine,R=q.showGradientFill,N=q.anyFill,I=q.anyLine,O=T[0],U=O.trace,Y,G,V=i7(U),W=V.colorscale,j=V.reversescale,J=function(ue){if(ue.size())if(C)_i.fillGroupStyle(ue,t,!0);else{var ce="legendfill-"+U.uid;_i.gradient(ue,t,ce,o7(j),W,"fill")}},te=function(ue){if(ue.size()){var ce="legendline-"+U.uid;_i.lineGroupStyle(ue),_i.gradient(ue,t,ce,o7(j),W,"stroke")}},ae=Um.hasMarkers(U)||!N?"M5,0":I?"M5,-2":"M5,-3",se=qn.select(this),$=se.select(".legendfill").selectAll("path").data(C||R?[T]:[]);if($.enter().append("path").classed("js-fill",!0),$.exit().remove(),$.attr("d",ae+"h"+o+"v6h-"+o+"z").call(J),E||P){var fe=u(void 0,U.line,f_e,zN);G=mn.minExtend(U,{line:{width:fe}}),Y=[mn.minExtend(O,{trace:G})]}var ie=se.select(".legendlines").selectAll("path").data(E||P?[Y]:[]);ie.enter().append("path").classed("js-line",!0),ie.exit().remove(),ie.attr("d",ae+(P?"l"+o+",0.0001":"h"+o)).call(E?_i.lineGroupStyle:te)}function c(T){var q=NN(T),C=q.anyFill,E=q.anyLine,P=q.showLine,R=q.showMarker,N=T[0],I=N.trace,O=!R&&!E&&!C&&Um.hasText(I),U,Y;function G(fe,ie,ue,ce){var oe=mn.nestedProperty(I,fe).get(),be=mn.isArrayOrTypedArray(oe)&&ie?ie(oe):oe;if(i&&be&&ce!==void 0&&(be=ce),ue){if(beue[1])return ue[1]}return be}function V(fe){return N._distinct&&N.index&&fe[N.index]?fe[N.index]:fe[0]}if(R||O||P){var W={},j={};if(R){W.mc=G("marker.color",V);var J=I.type==="scattermap";W.mx=J?"circle":G("marker.symbol",V),W.mo=G("marker.opacity",mn.mean,[.2,1]),W.mlc=G("marker.line.color",V),W.mlw=G("marker.line.width",mn.mean,[0,5],uf),W.mld=G("marker.line.dash",V),j.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var te=G("marker.size",mn.mean,[2,16],FN);W.ms=te,j.marker.size=te}P&&(j.line={width:G("line.width",V,[0,10],zN)}),O&&(W.tx="Aa",W.tp=G("textposition",V),W.ts=10,W.tc=G("textfont.color",V),W.tf=G("textfont.family",V),W.tw=G("textfont.weight",V),W.ty=G("textfont.style",V),W.tv=G("textfont.variant",V),W.tC=G("textfont.textcase",V),W.tE=G("textfont.lineposition",V),W.tS=G("textfont.shadow",V)),U=[mn.minExtend(N,W)],Y=mn.minExtend(I,j),Y.selectedpoints=null,Y.texttemplate=null}var ae=qn.select(this).select("g.legendpoints"),se=ae.selectAll("path.scatterpts").data(R?U:[]);se.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform",s),se.exit().remove(),se.call(_i.pointStyle,Y,t),R&&(U[0].mrc=3);var $=ae.selectAll("g.pointtext").data(O?U:[]);$.enter().append("g").classed("pointtext",!0).append("text").attr("transform",s),$.exit().remove(),$.selectAll("text").call(_i.textPointStyle,Y,t)}function v(T){var q=T[0].trace,C=q.type==="waterfall";if(T[0]._distinct&&C){var E=T[0].trace[T[0].dir].marker;return T[0].mc=E.color,T[0].mlw=E.line.width,T[0].mlc=E.line.color,y(T,this,"waterfall")}var P=[];q.visible&&C&&(P=T[0].hasTotals?[["increasing","M-6,-6V6H0Z"],["totals","M6,6H0L-6,-6H-0Z"],["decreasing","M6,6V-6H0Z"]]:[["increasing","M-6,-6V6H6Z"],["decreasing","M6,6V-6H-6Z"]]);var R=qn.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(P);R.enter().append("path").classed("legendwaterfall",!0).attr("transform",s).style("stroke-miterlimit",1),R.exit().remove(),R.each(function(N){var I=qn.select(this),O=q[N[0]].marker,U=u(void 0,O.line,f0,uf);I.attr("d",N[1]).style("stroke-width",U+"px").call(ji.fill,O.color),U&&I.call(ji.stroke,O.line.color)})}function d(T){y(T,this)}function p(T){y(T,this,"funnel")}function y(T,q,C){var E=T[0].trace,P=E.marker||{},R=P.line||{},N=P.cornerradius?"M6,3a3,3,0,0,1-3,3H-3a3,3,0,0,1-3-3V-3a3,3,0,0,1,3-3H3a3,3,0,0,1,3,3Z":"M6,6H-6V-6H6Z",I=C?E.visible&&E.type===C:n7.traceIs(E,"bar"),O=qn.select(q).select("g.legendpoints").selectAll("path.legend"+C).data(I?[T]:[]);O.enter().append("path").classed("legend"+C,!0).attr("d",N).attr("transform",s),O.exit().remove(),O.each(function(U){var Y=qn.select(this),G=U[0],V=u(G.mlw,P.line,f0,uf);Y.style("stroke-width",V+"px");var W=G.mcc;if(!a._inHover&&"mc"in G){var j=i7(P),J=j.mid;J===void 0&&(J=(j.max+j.min)/2),W=_i.tryColorscale(P,"")(J)}var te=W||G.mc||P.color,ae=P.pattern,se=_i.getPatternAttr,$=ae&&(se(ae.shape,0,"")||se(ae.path,0,""));if($){var fe=se(ae.bgcolor,0,null),ie=se(ae.fgcolor,0,null),ue=ae.fgopacity,ce=IN(ae.size,8,10),oe=IN(ae.solidity,.5,1),be="legend-"+E.uid;Y.call(_i.pattern,"legend",t,be,$,ce,oe,W,ae.fillmode,fe,ie,ue)}else Y.call(ji.fill,te);V&&ji.stroke(Y,G.mlc||R.color)})}function m(T){var q=T[0].trace,C=qn.select(this).select("g.legendpoints").selectAll("path.legendbox").data(q.visible&&n7.traceIs(q,"box-violin")?[T]:[]);C.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform",s),C.exit().remove(),C.each(function(){var E=qn.select(this);if((q.boxpoints==="all"||q.points==="all")&&ji.opacity(q.fillcolor)===0&&ji.opacity((q.line||{}).color)===0){var P=mn.minExtend(q,{marker:{size:i?FN:mn.constrain(q.marker.size,2,16),sizeref:1,sizemin:1,sizemode:"diameter"}});C.call(_i.pointStyle,P,t)}else{var R=u(void 0,q.line,f0,uf);E.style("stroke-width",R+"px").call(ji.fill,q.fillcolor),R&&ji.stroke(E,q.line.color)}})}function b(T){var q=T[0].trace,C=qn.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(q.visible&&q.type==="candlestick"?[T,T]:[]);C.enter().append("path").classed("legendcandle",!0).attr("d",function(E,P){return P?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"}).attr("transform",s).style("stroke-miterlimit",1),C.exit().remove(),C.each(function(E,P){var R=qn.select(this),N=q[P?"increasing":"decreasing"],I=u(void 0,N.line,f0,uf);R.style("stroke-width",I+"px").call(ji.fill,N.fillcolor),I&&ji.stroke(R,N.line.color)})}function A(T){var q=T[0].trace,C=qn.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(q.visible&&q.type==="ohlc"?[T,T]:[]);C.enter().append("path").classed("legendohlc",!0).attr("d",function(E,P){return P?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"}).attr("transform",s).style("stroke-miterlimit",1),C.exit().remove(),C.each(function(E,P){var R=qn.select(this),N=q[P?"increasing":"decreasing"],I=u(void 0,N.line,f0,uf);R.style("fill","none").call(_i.dashLine,N.line.dash,I),I&&ji.stroke(R,N.line.color)})}function w(T){_(T,this,"pie")}function x(T){_(T,this,"funnelarea")}function _(T,q,C){var E=T[0],P=E.trace,R=C?P.visible&&P.type===C:n7.traceIs(P,C),N=qn.select(q).select("g.legendpoints").selectAll("path.legend"+C).data(R?[T]:[]);if(N.enter().append("path").classed("legend"+C,!0).attr("d","M6,6H-6V-6H6Z").attr("transform",s),N.exit().remove(),N.size()){var I=P.marker||{},O=u(s_e(I.line.width,E.pts),I.line,f0,uf),U="pieLike",Y=mn.minExtend(P,{marker:{line:{width:O}}},U),G=mn.minExtend(E,{trace:Y},U);l_e(N,G,Y,t)}}function k(T){var q=T[0].trace,C,E=[];if(q.visible)switch(q.type){case"histogram2d":case"heatmap":E=[["M-15,-2V4H15V-2Z"]],C=!0;break;case"choropleth":case"choroplethmap":E=[["M-6,-6V6H6V-6Z"]],C=!0;break;case"densitymap":E=[["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]],C="radial";break;case"cone":E=[["M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z"],["M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z"],["M-6,-2 A2,2 0 0,0 -6,2 L6,0Z"]],C=!1;break;case"streamtube":E=[["M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z"],["M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z"],["M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z"]],C=!1;break;case"surface":E=[["M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z"],["M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z"]],C=!0;break;case"mesh3d":E=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],C=!1;break;case"volume":E=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],C=!0;break;case"isosurface":E=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]],C=!1;break}var P=qn.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(E);P.enter().append("path").classed("legend3dandfriends",!0).attr("transform",s).style("stroke-miterlimit",1),P.exit().remove(),P.each(function(R,N){var I=qn.select(this),O=i7(q),U=O.colorscale,Y=O.reversescale,G=function(J){if(J.size()){var te="legendfill-"+q.uid;_i.gradient(J,t,te,o7(Y,C==="radial"),U,"fill")}},V;if(U){if(!C){var j=U.length;V=N===0?U[Y?j-1:0][1]:N===1?U[Y?0:j-1][1]:U[Math.floor((j-1)/2)][1]}}else{var W=q.vertexcolor||q.facecolor||q.color;V=mn.isArrayOrTypedArray(W)?W[N]||W[0]:W}I.attr("d",R[0]),V?I.call(ji.fill,V):I.call(G)})}};function o7(e,r){var t=r?"radial":"horizontal";return t+(e?"":"reversed")}function NN(e){var r=e[0].trace,t=r.contours,a=Um.hasLines(r)||r.visible&&r.type==="quiver",n=Um.hasMarkers(r),i=r.visible&&r.fill&&r.fill!=="none",o=!1,l=!1;if(t){var s=t.coloring;s==="lines"?o=!0:a=s==="none"||s==="heatmap"||t.showlines,t.type==="constraint"?i=t._operation!=="=":(s==="fill"||s==="heatmap")&&(l=!0)}return{showMarker:n,showLine:a,showFill:i,showGradientLine:o,showGradientFill:l,anyLine:a||o,anyFill:i||l}}function IN(e,r,t){return e&&mn.isArrayOrTypedArray(e)?r:e>t?t:e}});var c7=z((xZe,XN)=>{"use strict";var Hn=Pr(),ga=ke(),u7=ma(),ff=Tr(),Vm=Ch(),s7=Vi(),ba=Jr(),$h=qr(),cf=Fa(),ON=Q6().handleItemClick,HN=Q6().handleTitleClick,Ta=(r7(),ze(e7)),f7=(on(),ze(nn)),jN=f7.LINE_SPACING,v0=f7.FROM_TL,UN=f7.FROM_BR,GN=SN(),c_e=l7(),h0=Zh(),c0=1,v_e=/^legend[0-9]*$/;XN.exports=function(r,t){if(t)YN(r,t);else{var a=r._fullLayout,n=a._legends,i=a._infolayer.selectAll('[class^="legend"]');i.each(function(){var u=Hn.select(this),f=u.attr("class"),c=f.split(" ")[0];c.match(v_e)&&n.indexOf(c)===-1&&u.remove()});for(var o=0;o1)}var p=a.hiddenlabels||[];if(!l&&(!a.showlegend||!s.length))return o.selectAll("."+n).remove(),a._topdefs.select("#"+i).remove(),u7.autoMargin(e,n);var y=ga.ensureSingle(o,"g",n,function(q){l||q.attr("pointer-events","all")}),m=ga.ensureSingleById(a._topdefs,"clipPath",i,function(q){q.append("rect")}),b=ga.ensureSingle(y,"rect","bg",function(q){q.attr("shape-rendering","crispEdges")});b.call($h.stroke,t.bordercolor).call($h.fill,t.bgcolor).style("stroke-width",t.borderwidth+"px");var A=ga.ensureSingle(y,"g","scrollbox"),w=t.title;t._titleWidth=0,t._titleHeight=0;var x;w.text?(x=ga.ensureSingle(A,"text",n+"titletext"),x.attr("text-anchor","start").call(ba.font,w.font).text(w.text),Ym(x,A,e,t,c0),!l&&(t.titleclick||t.titledoubleclick)&&m_e(A,e,t,n)):(A.selectAll("."+n+"titletext").remove(),A.selectAll("."+n+"titletoggle").remove());var _=ga.ensureSingle(y,"rect","scrollbar",function(q){q.attr(Ta.scrollBarEnterAttrs).call($h.fill,Ta.scrollBarColor)}),k=A.selectAll("g.groups").data(s);k.enter().append("g").attr("class","groups"),k.exit().remove();var T=k.selectAll("g.traces").data(ga.identity);T.enter().append("g").attr("class","traces"),T.exit().remove(),T.style("opacity",function(q){let C=q[0],E=C.trace;if(C.groupTitle){let P=E.legendgroup,R=(a.shapes||[]).filter(function(I){return I.showlegend});return e._fullData.concat(R).some(function(I){return I.legendgroup===P&&(I.legend||"legend")===n&&I.visible===!0})?1:.5}return ff.traceIs(E,"pie-like")?p.indexOf(q[0].label)!==-1?.5:1:E.visible==="legendonly"?.5:1}).each(function(){Hn.select(this).call(d_e,e,t)}).call(c_e,e,t).each(function(q){l||q[0].groupTitle&&t.groupclick==="toggleitem"||Hn.select(this).call(p_e,e,n)}),ga.syncOrAsync([u7.previousPromises,function(){return b_e(e,k,T,t,A)},function(){var q=a._size,C=t.borderwidth,E=t.xref==="paper",P=t.yref==="paper";if(w.text){let Ce=(a.shapes||[]).filter(function(Le){return Le.showlegend}),Me=e._fullData.concat(Ce).some(function(Le){let De=Le.legend||"legend";var Ie=Array.isArray(De)?De.includes(n):De===n;return Ie&&Le.visible===!0});x.style("opacity",Me?1:.5)}if(!l){var R,N;E?R=q.l+q.w*t.x-v0[jm(t)]*t._width:R=a.width*t.x-v0[jm(t)]*t._width,P?N=q.t+q.h*(1-t.y)-v0[Wm(t)]*t._effHeight:N=a.height*(1-t.y)-v0[Wm(t)]*t._effHeight;var I=x_e(e,n,R,N);if(I)return;if(a.margin.autoexpand){var O=R,U=N;R=E?ga.constrain(R,0,a.width-t._width):O,N=P?ga.constrain(N,0,a.height-t._effHeight):U,R!==O&&ga.log("Constrain "+n+".x to make legend fit inside graph"),N!==U&&ga.log("Constrain "+n+".y to make legend fit inside graph")}ba.setTranslate(y,R,N)}if(_.on(".drag",null),y.on("wheel",null),l||t._height<=t._maxHeight||e._context.staticPlot){var Y=t._effHeight;l&&(Y=t._height),b.attr({width:t._width-C,height:Y-C,x:C/2,y:C/2}),ba.setTranslate(A,0,0),m.select("rect").attr({width:t._width-2*C,height:Y-2*C,x:C,y:C}),ba.setClipUrl(A,i,e),ba.setRect(_,0,0,0,0),delete t._scrollY}else{var G=Math.max(Ta.scrollBarMinHeight,t._effHeight*t._effHeight/t._height),V=t._effHeight-G-2*Ta.scrollBarMargin,W=t._height-t._effHeight,j=V/W,J=Math.min(t._scrollY||0,W);b.attr({width:t._width-2*C+Ta.scrollBarWidth+Ta.scrollBarMargin,height:t._effHeight-C,x:C/2,y:C/2}),m.select("rect").attr({width:t._width-2*C+Ta.scrollBarWidth+Ta.scrollBarMargin,height:t._effHeight-2*C,x:C,y:C+J}),ba.setClipUrl(A,i,e),ce(J,G,j),y.on("wheel",function(){J=ga.constrain(t._scrollY+Hn.event.deltaY/W*V,0,W),ce(J,G,j),J!==0&&J!==W&&Hn.event.preventDefault()});var te,ae,se,$=function(Ce,Me,Le){var De=(Le-Me)/j+Ce;return ga.constrain(De,0,W)},fe=function(Ce,Me,Le){var De=(Me-Le)/j+Ce;return ga.constrain(De,0,W)},ie=Hn.behavior.drag().on("dragstart",function(){var Ce=Hn.event.sourceEvent;Ce.type==="touchstart"?te=Ce.changedTouches[0].clientY:te=Ce.clientY,se=J}).on("drag",function(){var Ce=Hn.event.sourceEvent;Ce.buttons===2||Ce.ctrlKey||(Ce.type==="touchmove"?ae=Ce.changedTouches[0].clientY:ae=Ce.clientY,J=$(se,te,ae),ce(J,G,j))});_.call(ie);var ue=Hn.behavior.drag().on("dragstart",function(){var Ce=Hn.event.sourceEvent;Ce.type==="touchstart"&&(te=Ce.changedTouches[0].clientY,se=J)}).on("drag",function(){var Ce=Hn.event.sourceEvent;Ce.type==="touchmove"&&(ae=Ce.changedTouches[0].clientY,J=fe(se,te,ae),ce(J,G,j))});A.call(ue)}function ce(Ce,Me,Le){t._scrollY=e._fullLayout[n]._scrollY=Ce,ba.setTranslate(A,0,-Ce),ba.setRect(_,t._width,Ta.scrollBarMargin+Ce*Le,Ta.scrollBarWidth,Me),m.select("rect").attr("y",C+Ce)}if(e._context.edits.legendPosition){var oe,be,Re,ye;y.classed("cursor-move",!0),s7.init({element:y.node(),gd:e,prepFn:function(Ce){if(Ce.target!==_.node()){var Me=ba.getTranslate(y);Re=Me.x,ye=Me.y}},moveFn:function(Ce,Me){if(Re!==void 0&&ye!==void 0){var Le=Re+Ce,De=ye+Me;ba.setTranslate(y,Le,De),oe=s7.align(Le,t._width,q.l,q.l+q.w,t.xanchor),be=s7.align(De+t._height,-t._height,q.t+q.h,q.t,t.yanchor)}},doneFn:function(){if(oe!==void 0&&be!==void 0){var Ce={};Ce[n+".x"]=oe,Ce[n+".y"]=be,ff.call("_guiRelayout",e,Ce)}},clickFn:function(Ce,Me){var Le=o.selectAll("g.traces").filter(function(){var De=this.getBoundingClientRect();return Me.clientX>=De.left&&Me.clientX<=De.right&&Me.clientY>=De.top&&Me.clientY<=De.bottom});Le.size()>0&&WN(e,t,Le,Ce,Me)}})}}],e)}}function Gm(e,r,t){var a=e[0],n=a.width,i=r.entrywidthmode,o=a.trace.legendwidth||r.entrywidth;return i==="fraction"?r._maxWidth*o:t+(o||n)}function WN(e,r,t,a,n){var i=e._fullLayout,o=t.data()[0][0].trace,l=r.itemclick,s=r.itemdoubleclick,u={event:n,node:t.node(),curveNumber:o.index,expandedIndex:o.index,data:e.data,layout:e.layout,frames:e._transitionData._frames,config:e._context,fullData:e._fullData,fullLayout:i};o._group&&(u.group=o._group),ff.traceIs(o,"pie-like")&&(u.label=t.datum()[0].label);var f=Vm.triggerHandler(e,"plotly_legendclick",u);if(a===1){if(f===!1)return;r._clickTimeout=setTimeout(function(){e._fullLayout&&l&&ON(t,e,r,l,a)},e._context.doubleClickDelay)}else if(a===2){r._clickTimeout&&clearTimeout(r._clickTimeout),e._legendMouseDownTime=0;var c=Vm.triggerHandler(e,"plotly_legenddoubleclick",u);c!==!1&&f!==!1&&s&&ON(t,e,r,s,a)}}function d_e(e,r,t){var a=h0.getId(t),n=e.data()[0][0],i=n.trace,o=ff.traceIs(i,"pie-like"),l=!t._inHover&&r._context.edits.legendText&&!o,s=t._maxNameLength,u,f;n.groupTitle?(u=n.groupTitle.text,f=n.groupTitle.font):(f=t.font,t.entries?u=n.text:(u=o?n.label:i.name,i._meta&&(u=ga.templateString(u,i._meta))));var c=ga.ensureSingle(e,"text",a+"text");c.attr("text-anchor","start").call(ba.font,f).text(l?VN(u,s):u);var v=t.indentation+t.itemwidth+Ta.itemGap*2;cf.positionText(c,v,0),l?c.call(cf.makeEditable,{gd:r,text:u}).call(Ym,e,r,t).on("edit",function(d){this.text(VN(d,s)).call(Ym,e,r,t);var p={};return p.name=d,n.trace._isShape?ff.call("_guiRelayout",r,"shapes["+i.index+"].name",p.name):ff.call("_guiRestyle",r,p,i.index)}):Ym(c,e,r,t)}function VN(e,r){var t=Math.max(4,r);if(e&&e.trim().length>=t/2)return e;e=e||"";for(var a=t-e.length;a>0;a--)e+=" ";return e}function p_e(e,r,t){var a=r._context.doubleClickDelay,n,i=1,o=ga.ensureSingle(e,"rect",t+"toggle",function(l){r._context.staticPlot||l.style("cursor","pointer").attr("pointer-events","all"),l.call($h.fill,"rgba(0,0,0,0)")});r._context.staticPlot||(o.on("mousedown",function(){n=new Date().getTime(),n-r._legendMouseDownTimea&&(i=Math.max(i-1,1)),WN(r,l,e,i,Hn.event)}}))}function m_e(e,r,t,a){if(r._fullData.some(function(u){let f=u.legend||"legend";return(Array.isArray(f)?f.includes(a):f===a)&&ff.traceIs(u,"pie-like")}))return;let i=r._context.doubleClickDelay;var o,l=1;let s=ga.ensureSingle(e,"rect",a+"titletoggle",function(u){r._context.staticPlot||u.style("cursor","pointer").attr("pointer-events","all"),u.call($h.fill,"rgba(0,0,0,0)")});r._context.staticPlot||(s.on("mousedown",function(){o=new Date().getTime(),o-r._legendMouseDownTimei&&(l=Math.max(l-1,1));let u={event:Hn.event,legendId:a,data:r.data,layout:r.layout,fullData:r._fullData,fullLayout:r._fullLayout};if(l===1&&t.titleclick){if(Vm.triggerHandler(r,"plotly_legendtitleclick",u)===!1)return;t._titleClickTimeout=setTimeout(function(){r._fullLayout&&HN(r,t,t.titleclick)},i)}else l===2&&(t._titleClickTimeout&&clearTimeout(t._titleClickTimeout),r._legendMouseDownTime=0,Vm.triggerHandler(r,"plotly_legendtitledoubleclick",u)!==!1&&t.titledoubleclick&&HN(r,t,t.titledoubleclick))}))}function Ym(e,r,t,a,n){a._inHover&&e.attr("data-notex",!0),cf.convertToTspans(e,t,function(){y_e(r,t,a,n)})}function y_e(e,r,t,a){var n=e.data()[0][0],i=n&&n.trace.showlegend;if(Array.isArray(i)&&(i=i[n.i]!==!1),!t._inHover&&n&&!i){e.remove();return}var o=e.select("g[class*=math-group]"),l=o.node(),s=h0.getId(t);t||(t=r._fullLayout[s]);var u=t.borderwidth,f;a===c0?f=t.title.font:n.groupTitle?f=n.groupTitle.font:f=t.font;var c=f.size*jN,v,d;if(l){var p=ba.bBox(l);v=p.height,d=p.width,a===c0?ba.setTranslate(o,u,u+v*.75):ba.setTranslate(o,0,v*.25)}else{var y="."+s+(a===c0?"title":"")+"text",m=e.select(y),b=cf.lineCount(m),A=m.node();if(v=c*b,d=A?ba.bBox(A).width:0,a===c0)t.title.side==="left"&&(d+=Ta.itemGap*2),cf.positionText(m,u+Ta.titlePad,u+c);else{var w=Ta.itemGap*2+t.indentation+t.itemwidth;n.groupTitle&&(w=Ta.itemGap,d-=t.indentation+t.itemwidth),cf.positionText(m,w,-c*((b-1)/2-.3))}}a===c0?(t._titleWidth=d,t._titleHeight=v):(n.lineHeight=c,n.height=Math.max(v,16)+3,n.width=d)}function g_e(e){var r=0,t=0,a=e.title.side;return a&&(a.indexOf("left")!==-1&&(r=e._titleWidth),a.indexOf("top")!==-1&&(t=e._titleHeight)),[r,t]}function b_e(e,r,t,a,n){var i=e._fullLayout,o=h0.getId(a);a||(a=i[o]);var l=i._size,s=h0.isVertical(a),u=h0.isGrouped(a),f=a.entrywidthmode==="fraction",c=a.borderwidth,v=2*c,d=Ta.itemGap,p=a.indentation+a.itemwidth+d*2,y=2*(c+d),m=Wm(a),b=a.y<0||a.y===0&&m==="top",A=a.y>1||a.y===1&&m==="bottom",w=a.tracegroupgap,x={};let{orientation:_,yref:k}=a,{maxheight:T}=a,q=b||A||_!=="v"||k!=="paper";T||(T=q?.5:1);let C=q?i.height:l.h;a._maxHeight=Math.max(T>1?T:T*C,30);var E=0;a._width=0,a._height=0;var P=g_e(a);if(s)t.each(function(Ce){var Me=Ce[0].height;ba.setTranslate(this,c+P[0],c+P[1]+a._height+Me/2+d),a._height+=Me,a._width=Math.max(a._width,Ce[0].width)}),E=p+a._width,a._width+=d+p+v,a._height+=y,u&&(r.each(function(Ce,Me){ba.setTranslate(this,0,Me*a.tracegroupgap)}),a._height+=(a._lgroupsLength-1)*a.tracegroupgap);else{var R=jm(a),N=a.x<0||a.x===0&&R==="right",I=a.x>1||a.x===1&&R==="left",O=A||b,U=i.width/2;a._maxWidth=Math.max(N?O&&R==="left"?l.l+l.w:U:I?O&&R==="right"?l.r+l.w:U:l.w,2*p);var Y=0,G=0;t.each(function(Ce){var Me=Gm(Ce,a,p);Y=Math.max(Y,Me),G+=Me}),E=null;var V=0;if(u){var W=0,j=0,J=0;r.each(function(){var Ce=0,Me=0;Hn.select(this).selectAll("g.traces").each(function(De){var Ie=Gm(De,a,p),qe=De[0].height;ba.setTranslate(this,P[0],P[1]+c+d+qe/2+Me),Me+=qe,Ce=Math.max(Ce,Ie),x[De[0].trace.legendgroup]=Ce});var Le=Ce+d;j>0&&Le+c+j>a._maxWidth?(V=Math.max(V,j),j=0,J+=W+w,W=Me):W=Math.max(W,Me),ba.setTranslate(this,j,J),j+=Le}),a._width=Math.max(V,j)+c,a._height=J+W+y}else{var te=t.size(),ae=G+v+(te-1)*d=a._maxWidth&&(V=Math.max(V,ie),$=0,fe+=se,a._height+=se,se=0),ba.setTranslate(this,P[0]+c+$,P[1]+c+fe+Me/2+d),ie=$+Le+d,$+=De,se=Math.max(se,Me)}),ae?(a._width=$+v,a._height=se+y):(a._width=Math.max(V,ie)+v,a._height+=se+y)}}a._width=Math.ceil(Math.max(a._width+P[0],a._titleWidth+2*(c+Ta.titlePad))),a._height=Math.ceil(Math.max(a._height+P[1],a._titleHeight+2*(c+Ta.itemGap))),a._effHeight=Math.min(a._height,a._maxHeight);var ue=e._context.edits,ce=ue.legendText||ue.legendPosition;t.each(function(Ce){var Me=Hn.select(this).select("."+o+"toggle"),Le=Ce[0].height,De=Ce[0].trace.legendgroup,Ie=Gm(Ce,a,p);u&&De!==""&&(Ie=x[De]);var qe=ce?p:E||Ie;!s&&!f&&(qe+=d/2),ba.setRect(Me,0,-Le/2,qe,Le)});var oe=n.select("."+o+"titletext");oe.node()&&h_e(oe,a,c);var be=n.select("."+o+"titletoggle");if(be.size()&&oe.node()){var Re=oe.attr("x")||0,ye=Ta.titlePad;ba.setRect(be,Re-ye,c,a._titleWidth+2*ye,a._titleHeight+2*ye)}}function x_e(e,r,t,a){var n=e._fullLayout,i=n[r],o=jm(i),l=Wm(i),s=i.xref==="paper",u=i.yref==="paper";e._fullLayout._reservedMargin[r]={};var f=i.y<.5?"b":"t",c=i.x<.5?"l":"r",v={r:n.width-t,l:t+i._width,b:n.height-a,t:a+i._effHeight};if(s&&u)return u7.autoMargin(e,r,{x:i.x,y:i.y,l:i._width*v0[o],r:i._width*UN[o],b:i._effHeight*UN[l],t:i._effHeight*v0[l]});s?e._fullLayout._reservedMargin[r][f]=v[f]:u||i.orientation==="v"?e._fullLayout._reservedMargin[r][c]=v[c]:e._fullLayout._reservedMargin[r][f]=v[f]}function jm(e){return ga.isRightAnchor(e)?"right":ga.isCenterAnchor(e)?"center":"left"}function Wm(e){return ga.isBottomAnchor(e)?"bottom":ga.isMiddleAnchor(e)?"middle":"top"}});var p7=z(d7=>{"use strict";var vf=Pr(),Wl=Br(),ea=ke(),__e=ea.pushUnique,v7=ea.strTranslate,w_e=ea.strRotate,A_e=Ch(),Wi=Fa(),T_e=_N(),hl=Jr(),Ma=qr(),Xm=Vi(),dl=Yr(),M_e=(Pa(),ze(Ea)).zindexSeparator,p0=Tr(),wi=Ro(),hf=(ah(),ze(th)),k_e=$6(),S_e=c7(),tI=hf.YANGLE,h7=Math.PI*tI/180,q_e=1/Math.sin(h7),L_e=Math.cos(h7),C_e=Math.sin(h7),Ut=hf.HOVERARROWSIZE,Xr=hf.HOVERTEXTPAD,ZN={box:!0,ohlc:!0,violin:!0,candlestick:!0},D_e={scatter:!0,scattergl:!0,splom:!0};function $N(e,r){return e.distance-r.distance}d7.hover=function(r,t,a,n){r=ea.getGraphDiv(r);var i=t.target;ea.throttle(r._fullLayout._uid+hf.HOVERID,hf.HOVERMINTIME,function(){E_e(r,t,a,n,i)})};d7.loneHover=function(r,t){var a=!0;Array.isArray(r)||(a=!1,r=[r]);var n=t.gd,i=lI(n),o=sI(n),l=r.map(function(m){var b=m._x0||m.x0||m.x||0,A=m._x1||m.x1||m.x||0,w=m._y0||m.y0||m.y||0,x=m._y1||m.y1||m.y||0,_=m.eventData;if(_){var k=Math.min(b,A),T=Math.max(b,A),q=Math.min(w,x),C=Math.max(w,x),E=m.trace;if(p0.traceIs(E,"gl3d")){var P=n._fullLayout[E.scene]._scene.container,R=P.offsetLeft,N=P.offsetTop;k+=R,T+=R,q+=N,C+=N}_.bbox={x0:k+o,x1:T+o,y0:q+i,y1:C+i},_.xPixel=(b+A)/2,_.yPixel=(w+x)/2,t.inOut_bbox&&t.inOut_bbox.push(_.bbox)}else _=!1;return{color:m.color||Ma.defaultLine,x0:m.x0||m.x||0,x1:m.x1||m.x||0,y0:m.y0||m.y||0,y1:m.y1||m.y||0,xLabel:m.xLabel,yLabel:m.yLabel,zLabel:m.zLabel,text:m.text,name:m.name,idealAlign:m.idealAlign,borderColor:m.borderColor,fontFamily:m.fontFamily,fontSize:m.fontSize,fontColor:m.fontColor,fontWeight:m.fontWeight,fontStyle:m.fontStyle,fontVariant:m.fontVariant,nameLength:m.nameLength,textAlign:m.textAlign,trace:m.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:m.hovertemplate||!1,hovertemplateLabels:m.hovertemplateLabels||!1,eventData:_}}),s=!1,u=nI(l,{gd:n,hovermode:"closest",rotateLabels:s,bgColor:t.bgColor||Ma.background,container:vf.select(t.container),outerContainer:t.outerContainer||t.container}),f=u.hoverLabels,c=5,v=0,d=0;f.sort(function(m,b){return m.y0-b.y0}).each(function(m,b){var A=m.y0-m.by/2;A-cT[0]._length||ye<0||ye>q[0]._length)return Xm.unhoverRaw(e,r)}if(r.pointerX=Re+T[0]._offset,r.pointerY=ye+q[0]._offset,"xval"in r?U=wi.flat(i,r.xval):U=wi.p2c(T,Re),"yval"in r?Y=wi.flat(i,r.yval):Y=wi.p2c(q,ye),e._hoverPointerX=r.pointerX,e._hoverPointerY=r.pointerY,!Wl(U[0])||!Wl(Y[0]))return ea.warn("Fx.hover failed",r,e),Xm.unhoverRaw(e,r)}l.clickanywhere&&(e._hoverXVals=U,e._hoverYVals=Y,e._hoverXAxes=T,e._hoverYAxes=q);var Le=1/0;function De(hr,wt){for(V=0;Vie&&(I.splice(0,ie),Le=I[0].distance),c&&N!==0&&I.length===0){fe.distance=N,fe.index=!1;var it=j._module.hoverPoints(fe,se,$,"closest",{hoverLayer:l._hoverlayer});if(it&&(it=it.filter(function(la){return la.spikeDistance<=N})),it&&it.length){var ia,zn=it.filter(function(la){return la.xa.showspikes&&la.xa.spikesnap!=="hovered data"});if(zn.length){var Xt=zn[0];Wl(Xt.x0)&&Wl(Xt.y0)&&(ia=qe(Xt),(!ue.vLinePoint||ue.vLinePoint.spikeDistance>ia.spikeDistance)&&(ue.vLinePoint=ia))}var Pt=it.filter(function(la){return la.ya.showspikes&&la.ya.spikesnap!=="hovered data"});if(Pt.length){var oa=Pt[0];Wl(oa.x0)&&Wl(oa.y0)&&(ia=qe(oa),(!ue.hLinePoint||ue.hLinePoint.spikeDistance>ia.spikeDistance)&&(ue.hLinePoint=ia))}}}}}De();function Ie(hr,wt,Vr){for(var ht=null,Nt=1/0,kt,it=0;ithr.trace.index===Te.trace.index):I=[Te];var Ue=I.length,$e=rI("x",Te,l),Oe=rI("y",Te,l);De($e,Oe);var We=[],ar={},or=0,sr=function(hr){var wt=ZN[hr.trace.type]?aI(hr):hr.trace.index;if(!ar[wt])or++,ar[wt]=or,We.push(hr);else{var Vr=ar[wt]-1,ht=We[Vr];Vr>0&&Math.abs(hr.distance)Ue-1;Ee--)sr(I[Ee]);I=We,Se()}var Ke=e._hoverdata,Be=[],mr=lI(e),yr=sI(e);for(let hr of I){var ur=wi.makeEventData(hr,hr.trace,hr.cd);if(hr.hovertemplate!==!1){var gr=!1;hr.cd[hr.index]&&hr.cd[hr.index].ht&&(gr=hr.cd[hr.index].ht),hr.hovertemplate=gr||hr.trace.hovertemplate||!1}if(hr.xa&&hr.ya){var ne=hr.x0+hr.xa._offset,ge=hr.x1+hr.xa._offset,Ne=hr.y0+hr.ya._offset,He=hr.y1+hr.ya._offset,Kr=Math.min(ne,ge),Qr=Math.max(ne,ge),yt=Math.min(Ne,He),gt=Math.max(Ne,He);ur.bbox={x0:Kr+yr,x1:Qr+yr,y0:yt+mr,y1:gt+mr},ur.xPixel=(ne+ge)/2,ur.yPixel=(Ne+He)/2}hr.eventData=[ur],Be.push(ur)}e._hoverdata=Be;var Et=v==="y"&&(O.length>1||I.length>1)||v==="closest"&&ce&&I.length>1,aa=Ma.combine(l.plot_bgcolor||Ma.background,l.paper_bgcolor),$a=nI(I,{gd:e,hovermode:v,rotateLabels:Et,bgColor:aa,container:l._hoverlayer,outerContainer:l._paper.node(),commonLabelOpts:l.hoverlabel,hoverdistance:l.hoverdistance}),na=$a.hoverLabels;if(wi.isUnifiedHover(v)||(R_e(na,Et,l,$a.commonLabelBoundingBox),oI(na,Et,l._invScaleX,l._invScaleY)),n&&n.tagName){var Ja=p0.getComponentMethod("annotations","hasClickToShow")(e,Be);T_e(vf.select(n),Ja?"pointer":"")}var hn=N_e(e,r,Ke);if(!n||a||!hn&&!l.hoveranywhere)return;Ke&&hn&&e.emit("plotly_unhover",{event:r,points:Ke}),fa(e._hoverdata);function fa(hr){e.emit("plotly_hover",{event:r,points:hr,xaxes:T,yaxes:q,xvals:wi.c2dApply(T,U),yvals:wi.c2dApply(q,Y),xPixel:r.pointerX,yPixel:r.pointerY})}}function aI(e){return[e.trace.index,e.index,e.x0,e.y0,e.name,e.attr,e.xa?e.xa._id:"",e.ya?e.ya._id:""].join(",")}var P_e=/([\s\S]*)<\/extra>/;function nI(e,r){var t=r.gd,a=t._fullLayout,n=r.hovermode,i=r.rotateLabels,o=r.bgColor,l=r.container,s=r.outerContainer,u=r.commonLabelOpts||{};if(e.length===0)return[[]];var f=r.fontFamily||hf.HOVERFONT,c=r.fontSize||hf.HOVERFONTSIZE,v=r.fontWeight||a.font.weight,d=r.fontStyle||a.font.style,p=r.fontVariant||a.font.variant,y=r.fontTextcase||a.font.textcase,m=r.fontLineposition||a.font.lineposition,b=r.fontShadow||a.font.shadow,A=e[0],w=A.xa,x=A.ya,_=n.charAt(0),k=_+"Label",T=A[k];if(T===void 0&&w.type==="multicategory")for(var q=0;qa.width-Be&&(mr=a.width-Be),me.attr("d","M"+(sr-mr)+",0L"+(sr-mr+Ut)+","+Ke+Ut+"H"+Be+"v"+Ke+(Xr*2+or.height)+"H"+-Be+"V"+Ke+Ut+"H"+(sr-mr-Ut)+"Z"),sr=mr,V.minX=sr-Be,V.maxX=sr+Be,w.side==="top"?(V.minY=Ee-(Xr*2+or.height),V.maxY=Ee-Xr):(V.minY=Ee+Xr,V.maxY=Ee+(Xr*2+or.height))}else{var yr,ur,gr;x.side==="right"?(yr="start",ur=1,gr="",sr=w._offset+w._length):(yr="end",ur=-1,gr="-",sr=w._offset),Ee=x._offset+(A.y0+A.y1)/2,Te.attr("text-anchor",yr),me.attr("d","M0,0L"+gr+Ut+","+Ut+"V"+(Xr+or.height/2)+"h"+gr+(Xr*2+or.width)+"V-"+(Xr+or.height/2)+"H"+gr+Ut+"V-"+Ut+"Z"),V.minY=Ee-(Xr+or.height/2),V.maxY=Ee+(Xr+or.height/2),x.side==="right"?(V.minX=sr+Ut,V.maxX=sr+Ut+(Xr*2+or.width)):(V.minX=sr-Ut-(Xr*2+or.width),V.maxX=sr-Ut);var ne=or.height/2,ge=E-or.top-ne,Ne="clip"+a._uid+"commonlabel"+x._id,He;if(srme.hoverinfo!=="none");if(Pe.length===0)return[];var W=a.hoverlabel,j=W.font,J=Pe[0],te=((n==="x unified"?J.xa:J.ya).unifiedhovertitle||{}).text,ae=te?ea.hovertemplateString({data:n==="x unified"?[{xa:J.xa,x:J.xVal}]:[{ya:J.ya,y:J.yVal}],fallback:J.trace.hovertemplatefallback,locale:a._d3locale,template:te}):T,se={showlegend:!0,legend:{title:{text:ae,font:j},font:j,bgcolor:W.bgcolor,bordercolor:W.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:a.legend?a.legend.traceorder:void 0,orientation:"v"}},$={font:j};k_e(se,$,t._fullData);var fe=$.legend;fe.entries=[];for(var ie=0;ie=0?xe=Se:Fe+Me=0?xe=Fe:er+Me=0?Ye=Je:Xe+Le=0?Ye=Xe:re+Le=0,(Pe.idealAlign==="top"||!yt)&>?(gr-=ge/2,Pe.anchor="end"):yt?(gr+=ge/2,Pe.anchor="start"):Pe.anchor="middle",Pe.crossPos=gr;else{if(Pe.pos=gr,yt=ur+ne/2+Qr<=P,gt=ur-ne/2-Qr>=0,(Pe.idealAlign==="left"||!yt)&>)ur-=ne/2,Pe.anchor="end";else if(yt)ur+=ne/2,Pe.anchor="start";else{Pe.anchor="middle";var Et=Qr/2,aa=ur+Et-P,$a=ur-Et;aa>0&&(ur-=aa),$a<0&&(ur+=-$a)}Pe.crossPos=ur}Ee.attr("text-anchor",Pe.anchor),Be&&Ke.attr("text-anchor",Pe.anchor),me.attr("transform",v7(ur,gr)+(i?w_e(tI):""))}),{hoverLabels:vr,commonLabelBoundingBox:V}}function JN(e,r,t,a,n,i){var c,v;var o="",l="";e.nameOverride!==void 0&&(e.name=e.nameOverride),e.name&&(e.trace._meta&&(e.name=ea.templateString(e.name,e.trace._meta)),o=eI(e.name,e.nameLength));var s=t.charAt(0),u=s==="x"?"y":"x";e.zLabel!==void 0?(e.xLabel!==void 0&&(l+="x: "+e.xLabel+"
"),e.yLabel!==void 0&&(l+="y: "+e.yLabel+"
"),e.trace.type!=="choropleth"&&e.trace.type!=="choroplethmap"&&(l+=(l?"z: ":"")+e.zLabel)):r&&e[s+"Label"]===n?l=e[u+"Label"]||"":e.xLabel===void 0?e.yLabel!==void 0&&e.trace.type!=="scattercarpet"&&(l=e.yLabel):e.yLabel===void 0?l=e.xLabel:l="("+e.xLabel+", "+e.yLabel+")",(e.text||e.text===0)&&!Array.isArray(e.text)&&(l+=(l?"
":"")+e.text),e.extraText!==void 0&&(l+=(l?"
":"")+e.extraText),i&&l===""&&!e.hovertemplate&&(o===""&&i.remove(),l=o),(v=(c=e.trace)==null?void 0:c.hoverlabel)!=null&&v.split&&(e.hovertemplate="");let{hovertemplate:f=!1}=e;if(f){let d=e.hovertemplateLabels||e;e[s+"Label"]!==n&&(d[s+"other"]=d[s+"Val"],d[s+"otherLabel"]=d[s+"Label"]),l=ea.hovertemplateString({data:[e.eventData[0]||{},e.trace._meta],fallback:e.trace.hovertemplatefallback,labels:d,locale:a._d3locale,template:f}),l=l.replace(P_e,(p,y)=>(o=eI(y,e.nameLength),""))}return[l,o]}function R_e(e,r,t,a){var n=r?"xa":"ya",i=r?"ya":"xa",o=0,l=1,s=e.size(),u=new Array(s),f=0,c=a.minX,v=a.maxX,d=a.minY,p=a.maxY,y=function(U){return U*t._invScaleX},m=function(U){return U*t._invScaleY};e.each(function(U){var Y=U[n],G=U[i],V=Y._id.charAt(0)==="x",W=Y.range;f===0&&W&&W[0]>W[1]!==V&&(l=-1);var j=0,J=V?t.width:t.height;if(t.hovermode==="x"||t.hovermode==="y"){var te=iI(U,r),ae=U.anchor,se=ae==="end"?-1:1,$,fe;if(ae==="middle")$=U.crossPos+(V?m(te.y-U.by/2):y(U.bx/2+U.tx2width/2)),fe=$+(V?m(U.by):y(U.bx));else if(V)$=U.crossPos+m(Ut+te.y)-m(U.by/2-Ut),fe=$+m(U.by);else{var ie=y(se*Ut+te.x),ue=ie+y(se*U.bx);$=U.crossPos+Math.min(ie,ue),fe=U.crossPos+Math.max(ie,ue)}V?d!==void 0&&p!==void 0&&Math.min(fe,p)-Math.max($,d)>1&&(G.side==="left"?(j=G._mainLinePosition,J=t.width):J=G._mainLinePosition):c!==void 0&&v!==void 0&&Math.min(fe,v)-Math.max($,c)>1&&(G.side==="top"?(j=G._mainLinePosition,J=t.height):J=G._mainLinePosition)}u[f++]=[{datum:U,traceIndex:U.trace.index,dp:0,pos:U.pos,posref:U.posref,size:U.by*(V?q_e:1)/2,pmin:j,pmax:J}]}),u.sort(function(U,Y){return U[0].posref-Y[0].posref||l*(Y[0].traceIndex-U[0].traceIndex)});var b,A,w,x,_,k,T;function q(U){var Y=U[0],G=U[U.length-1];if(A=Y.pmin-Y.pos-Y.dp+Y.size,w=G.pos+G.dp+G.size-Y.pmax,A>.01){for(_=U.length-1;_>=0;_--)U[_].dp+=A;b=!1}if(!(w<.01)){if(A<-.01){for(_=U.length-1;_>=0;_--)U[_].dp-=w;b=!1}if(b){var V=0;for(x=0;xY.pmax&&V++;for(x=U.length-1;x>=0&&!(V<=0);x--)k=U[x],k.pos>Y.pmax-1&&(k.del=!0,V--);for(x=0;x=0;_--)U[_].dp-=w;for(x=U.length-1;x>=0&&!(V<=0);x--)k=U[x],k.pos+k.dp+k.size>Y.pmax&&(k.del=!0,V--)}}}for(;!b&&o<=s;){for(o++,b=!0,x=0;x.01){for(_=E.length-1;_>=0;_--)E[_].dp+=A;for(C.push.apply(C,E),u.splice(x+1,1),T=0,_=C.length-1;_>=0;_--)T+=C[_].dp;for(w=T/C.length,_=C.length-1;_>=0;_--)C[_].dp-=w;b=!1}else x++}u.forEach(q)}for(x=u.length-1;x>=0;x--){var N=u[x];for(_=N.length-1;_>=0;_--){var I=N[_],O=I.datum;O.offset=I.dp,O.del=I.del}}}function iI(e,r){var t=0,a=e.offset;return r&&(a*=-C_e,t=e.offset*L_e),{x:t,y:a}}function F_e(e){var r={start:1,end:-1,middle:0}[e.anchor],t=r*(Ut+Xr),a=t+r*(e.txwidth+Xr),n=e.anchor==="middle";return n&&(t-=e.tx2width/2,a+=e.txwidth/2+Xr),{alignShift:r,textShiftX:t,text2ShiftX:a}}function oI(e,r,t,a){var n=function(o){return o*t},i=function(o){return o*a};e.each(function(o){var l=vf.select(this);if(o.del)return l.remove();var s=l.select("text.nums"),u=o.anchor,f=u==="end"?-1:1,c=F_e(o),v=iI(o,r),d=v.x,p=v.y,y=u==="middle",m="hoverlabel"in o.trace?o.trace.hoverlabel.showarrow:!0,b;y?b="M-"+n(o.bx/2+o.tx2width/2)+","+i(p-o.by/2)+"h"+n(o.bx)+"v"+i(o.by)+"h-"+n(o.bx)+"Z":m?b="M0,0L"+n(f*Ut+d)+","+i(Ut+p)+"v"+i(o.by/2-Ut)+"h"+n(f*o.bx)+"v-"+i(o.by)+"H"+n(f*Ut+d)+"V"+i(p-Ut)+"Z":b="M"+n(f*Ut+d)+","+i(p-o.by/2)+"h"+n(f*o.bx)+"v"+i(o.by)+"h"+n(-f*o.bx)+"Z",l.select("path").attr("d",b);var A=d+c.textShiftX,w=p+o.ty0-o.by/2+Xr,x=o.textAlign||"auto";x!=="auto"&&(x==="left"&&u!=="start"?(s.attr("text-anchor","start"),A=y?-o.bx/2-o.tx2width/2+Xr:-o.bx-Xr):x==="right"&&u!=="end"&&(s.attr("text-anchor","end"),A=y?o.bx/2-o.tx2width/2-Xr:o.bx+Xr)),s.call(Wi.positionText,n(A),i(w)),o.tx2width&&(l.select("text.name").call(Wi.positionText,n(c.text2ShiftX+c.alignShift*Xr+d),i(p+o.ty0-o.by/2+Xr)),l.select("rect").call(hl.setRect,n(c.text2ShiftX+(c.alignShift-1)*o.tx2width/2+d),i(p-o.by/2-1),n(o.tx2width),i(o.by+2)))})}function z_e(e,r){var t=e.index,a=e.trace||{},n=e.cd[0],i=e.cd[t]||{};function o(v){return v||Wl(v)&&v===0}var l=Array.isArray(t)?function(v,d){var p=ea.castOption(n,t,v);return o(p)?p:ea.extractOption({},a,"",d)}:function(v,d){return ea.extractOption(i,a,v,d)};function s(v,d,p){var y=l(d,p);o(y)&&(e[v]=y)}if(s("hoverinfo","hi","hoverinfo"),s("bgcolor","hbg","hoverlabel.bgcolor"),s("borderColor","hbc","hoverlabel.bordercolor"),s("fontFamily","htf","hoverlabel.font.family"),s("fontSize","hts","hoverlabel.font.size"),s("fontColor","htc","hoverlabel.font.color"),s("fontWeight","htw","hoverlabel.font.weight"),s("fontStyle","hty","hoverlabel.font.style"),s("fontVariant","htv","hoverlabel.font.variant"),s("nameLength","hnl","hoverlabel.namelength"),s("textAlign","hta","hoverlabel.align"),e.posref=r==="y"||r==="closest"&&a.orientation==="h"?e.xa._offset+(e.x0+e.x1)/2:e.ya._offset+(e.y0+e.y1)/2,e.x0=ea.constrain(e.x0,0,e.xa._length),e.x1=ea.constrain(e.x1,0,e.xa._length),e.y0=ea.constrain(e.y0,0,e.ya._length),e.y1=ea.constrain(e.y1,0,e.ya._length),e.xLabelVal!==void 0&&(e.xLabel="xLabel"in e?e.xLabel:dl.hoverLabelText(e.xa,e.xLabelVal,a.xhoverformat),e.xVal=e.xa.c2d(e.xLabelVal)),e.yLabelVal!==void 0&&(e.yLabel="yLabel"in e?e.yLabel:dl.hoverLabelText(e.ya,e.yLabelVal,a.yhoverformat),e.yVal=e.ya.c2d(e.yLabelVal)),e.zLabelVal!==void 0&&e.zLabel===void 0&&(e.zLabel=String(e.zLabelVal)),!isNaN(e.xerr)&&!(e.xa.type==="log"&&e.xerr<=0)){var u=dl.tickText(e.xa,e.xa.c2l(e.xerr),"hover").text;e.xerrneg!==void 0?e.xLabel+=" +"+u+" / -"+dl.tickText(e.xa,e.xa.c2l(e.xerrneg),"hover").text:e.xLabel+=" \xB1 "+u,r==="x"&&(e.distance+=1)}if(!isNaN(e.yerr)&&!(e.ya.type==="log"&&e.yerr<=0)){var f=dl.tickText(e.ya,e.ya.c2l(e.yerr),"hover").text;e.yerrneg!==void 0?e.yLabel+=" +"+f+" / -"+dl.tickText(e.ya,e.ya.c2l(e.yerrneg),"hover").text:e.yLabel+=" \xB1 "+f,r==="y"&&(e.distance+=1)}var c=e.hoverinfo||e.trace.hoverinfo;return c&&c!=="all"&&(c=Array.isArray(c)?c:c.split("+"),c.indexOf("x")===-1&&(e.xLabel=void 0),c.indexOf("y")===-1&&(e.yLabel=void 0),c.indexOf("z")===-1&&(e.zLabel=void 0),c.indexOf("text")===-1&&(e.text=void 0),c.indexOf("name")===-1&&(e.name=void 0)),e}function KN(e,r,t){var a=t.container,n=t.fullLayout,i=n._size,o=t.event,l=!!r.hLinePoint,s=!!r.vLinePoint,u,f;if(a.selectAll(".spikeline").remove(),!!(s||l)){var c=Ma.combine(n.plot_bgcolor,n.paper_bgcolor);if(l){var v=r.hLinePoint,d,p;u=v&&v.xa,f=v&&v.ya;var y=f.spikesnap;y==="cursor"?(d=o.pointerX,p=o.pointerY):(d=u._offset+v.x,p=f._offset+v.y);var m=Ma.wcagContrast(v.color,c)<1.5?Ma.contrast(c):v.color,b=f.spikemode,A=f.spikethickness,w=f.spikecolor||m,x=dl.getPxPosition(e,f),_,k;if(b.indexOf("toaxis")!==-1||b.indexOf("across")!==-1){if(b.indexOf("toaxis")!==-1&&(_=x,k=d),b.indexOf("across")!==-1){var T=f._counterDomainMin,q=f._counterDomainMax;f.anchor==="free"&&(T=Math.min(T,f.position),q=Math.max(q,f.position)),_=i.l+T*i.w,k=i.l+q*i.w}a.insert("line",":first-child").attr({x1:_,x2:k,y1:p,y2:p,"stroke-width":A,stroke:w,"stroke-dasharray":hl.dashStyle(f.spikedash,A)}).classed("spikeline",!0).classed("crisp",!0),a.insert("line",":first-child").attr({x1:_,x2:k,y1:p,y2:p,"stroke-width":A+2,stroke:c}).classed("spikeline",!0).classed("crisp",!0)}b.indexOf("marker")!==-1&&a.insert("circle",":first-child").attr({cx:x+(f.side!=="right"?A:-A),cy:p,r:A,fill:w}).classed("spikeline",!0)}if(s){var C=r.vLinePoint,E,P;u=C&&C.xa,f=C&&C.ya;var R=u.spikesnap;R==="cursor"?(E=o.pointerX,P=o.pointerY):(E=u._offset+C.x,P=f._offset+C.y);var N=Ma.wcagContrast(C.color,c)<1.5?Ma.contrast(c):C.color,I=u.spikemode,O=u.spikethickness,U=u.spikecolor||N,Y=dl.getPxPosition(e,u),G,V;if(I.indexOf("toaxis")!==-1||I.indexOf("across")!==-1){if(I.indexOf("toaxis")!==-1&&(G=Y,V=P),I.indexOf("across")!==-1){var W=u._counterDomainMin,j=u._counterDomainMax;u.anchor==="free"&&(W=Math.min(W,u.position),j=Math.max(j,u.position)),G=i.t+(1-j)*i.h,V=i.t+(1-W)*i.h}a.insert("line",":first-child").attr({x1:E,x2:E,y1:G,y2:V,"stroke-width":O,stroke:U,"stroke-dasharray":hl.dashStyle(u.spikedash,O)}).classed("spikeline",!0).classed("crisp",!0),a.insert("line",":first-child").attr({x1:E,x2:E,y1:G,y2:V,"stroke-width":O+2,stroke:c}).classed("spikeline",!0).classed("crisp",!0)}I.indexOf("marker")!==-1&&a.insert("circle",":first-child").attr({cx:E,cy:Y-(u.side!=="top"?O:-O),r:O,fill:U}).classed("spikeline",!0)}}}function N_e(e,r,t){if(!t||t.length!==e._hoverdata.length)return!0;for(var a=t.length-1;a>=0;a--){var n=t[a],i=e._hoverdata[a];if(n.curveNumber!==i.curveNumber||String(n.pointNumber)!==String(i.pointNumber)||String(n.pointNumbers)!==String(i.pointNumbers)||n.binNumber!==i.binNumber)return!0}return!1}function QN(e,r){return!r||r.vLinePoint!==e._spikepoints.vLinePoint||r.hLinePoint!==e._spikepoints.hLinePoint}function eI(e,r){return Wi.plainText(e||"",{len:r,allowedTags:["br","sub","sup","b","i","em","s","u"]})}function I_e(e,r){for(var t=r.charAt(0),a=[],n=[],i=[],o=0;oe.offsetTop+e.clientTop,sI=e=>e.offsetLeft+e.clientLeft;function d0(e,r){var t=e._fullLayout,a=r.getBoundingClientRect(),n=a.left,i=a.top,o=n+a.width,l=i+a.height,s=ea.apply3DTransform(t._invTransform)(n,i),u=ea.apply3DTransform(t._invTransform)(o,l),f=s[0],c=s[1],v=u[0],d=u[1];return{x:f,y:c,width:v-f,height:d-c,top:Math.min(c,d),left:Math.min(f,v),right:Math.max(f,v),bottom:Math.max(c,d)}}});var Zm=z((wZe,uI)=>{"use strict";var B_e=ke(),O_e=qr(),H_e=Ro().isUnifiedHover;uI.exports=function(r,t,a,n){n=n||{};var i=t.legend;function o(l){n.font[l]||(n.font[l]=i?t.legend.font[l]:t.font[l])}t&&H_e(t.hovermode)&&(n.font||(n.font={}),o("size"),o("family"),o("color"),o("weight"),o("style"),o("variant"),i?(n.bgcolor||(n.bgcolor=O_e.combine(t.legend.bgcolor,t.paper_bgcolor)),n.bordercolor||(n.bordercolor=t.legend.bordercolor)):n.bgcolor||(n.bgcolor=t.paper_bgcolor)),a("hoverlabel.bgcolor",n.bgcolor),a("hoverlabel.bordercolor",n.bordercolor),a("hoverlabel.namelength",n.namelength),a("hoverlabel.showarrow",n.showarrow),B_e.coerceFont(a,"hoverlabel.font",n.font),a("hoverlabel.align",n.align)}});var cI=z((AZe,fI)=>{"use strict";var U_e=ke(),G_e=Zm(),Y_e=Mc();fI.exports=function(r,t){function a(n,i){return U_e.coerce(r,t,Y_e,n,i)}G_e(r,t,a)}});var dI=z((TZe,hI)=>{"use strict";var vI=ke(),V_e=j1(),j_e=Zm();hI.exports=function(r,t,a,n){function i(l,s){return vI.coerce(r,t,V_e,l,s)}var o=vI.extendFlat({},n.hoverlabel);t.hovertemplate&&(o.namelength=-1),j_e(r,t,i,o)}});var m7=z((MZe,pI)=>{"use strict";var W_e=ke(),X_e=Mc();pI.exports=function(r,t){function a(n,i){return t[n]!==void 0?t[n]:W_e.coerce(r,t,X_e,n,i)}return a("clickmode"),a("hoversubplots"),a("hoveranywhere"),a("clickanywhere"),a("hovermode")}});var gI=z((kZe,yI)=>{"use strict";var mI=ke(),Z_e=Mc(),$_e=m7(),J_e=Zm();yI.exports=function(r,t){function a(u,f){return mI.coerce(r,t,Z_e,u,f)}var n=$_e(r,t);n&&(a("hoverdistance"),a("spikedistance"),n.indexOf("unified")!==-1&&a("hoversort"));var i=a("dragmode");i==="select"&&a("selectdirection");var o=t._has("map"),l=t._has("geo"),s=t._basePlotModules.length;t.dragmode==="zoom"&&((o||l)&&s===1||o&&l&&s===2)&&(t.dragmode="pan"),J_e(r,t,a),mI.coerceFont(a,"hoverlabel.grouptitlefont",t.hoverlabel.font)}});var _I=z((SZe,xI)=>{"use strict";var y7=ke(),bI=Tr();xI.exports=function(r){var t=r.calcdata,a=r._fullLayout;function n(u){return function(f){return y7.coerceHoverinfo({hoverinfo:f},{_module:u._module},a)}}for(var i=0;i{"use strict";var Q_e=Tr(),wI=Ro(),e4e=p7().hover;AI.exports=function(r,t,a){var n=Q_e.getComponentMethod("annotations","onClick")(r,r._hoverdata),i=r._fullLayout;a!==void 0&&e4e(r,t,a,!0);function o(){var s,u,f,c,v,d;var l={points:r._hoverdata,event:t};(s=l.xaxes)!=null||(l.xaxes=r._hoverXAxes),(u=l.yaxes)!=null||(l.yaxes=r._hoverYAxes),(f=l.xvals)!=null||(l.xvals=r._hoverXVals&&wI.c2dApply(r._hoverXAxes,r._hoverXVals)),(c=l.yvals)!=null||(l.yvals=r._hoverYVals&&wI.c2dApply(r._hoverYAxes,r._hoverYVals)),(v=l.xPixel)!=null||(l.xPixel=r._hoverPointerX),(d=l.yPixel)!=null||(l.yPixel=r._hoverPointerY),r.emit("plotly_click",l)}(r._hoverdata||i.clickanywhere)&&t&&t.target&&(r._hoverdata||(r._hoverdata=[]),n&&n.then?n.then(o):o(),t.stopImmediatePropagation&&t.stopImmediatePropagation())}});var Un=z((LZe,SI)=>{"use strict";var r4e=Pr(),$m=ke(),t4e=Vi(),Jh=Ro(),MI=Mc(),kI=p7();SI.exports={moduleType:"component",name:"fx",constants:(ah(),ze(th)),schema:{layout:MI},attributes:j1(),layoutAttributes:MI,supplyLayoutGlobalDefaults:cI(),supplyDefaults:dI(),supplyLayoutDefaults:gI(),calc:_I(),getDistanceFunction:Jh.getDistanceFunction,getClosest:Jh.getClosest,inbox:Jh.inbox,quadrature:Jh.quadrature,appendArrayPointValue:Jh.appendArrayPointValue,castHoverOption:n4e,castHoverinfo:i4e,hover:kI.hover,unhover:t4e.unhover,loneHover:kI.loneHover,loneUnhover:a4e,click:TI()};function a4e(e){var r=$m.isD3Selection(e)?e:r4e.select(e);r.selectAll("g.hovertext").remove(),r.selectAll(".spikeline").remove()}function n4e(e,r,t){return $m.castOption(e,r,"hoverlabel."+t)}function i4e(e,r,t){function a(n){return $m.coerceHoverinfo({hoverinfo:n},{_module:e._module},r)}return $m.castOption(e,t,"hoverinfo",a)}});var df=z(Xl=>{"use strict";Xl.selectMode=function(e){return e==="lasso"||e==="select"};Xl.drawMode=function(e){return e==="drawclosedpath"||e==="drawopenpath"||e==="drawline"||e==="drawrect"||e==="drawcircle"};Xl.openMode=function(e){return e==="drawline"||e==="drawopenpath"};Xl.rectMode=function(e){return e==="select"||e==="drawline"||e==="drawrect"||e==="drawcircle"};Xl.freeMode=function(e){return e==="lasso"||e==="drawclosedpath"||e==="drawopenpath"};Xl.selectingOrDrawing=function(e){return Xl.freeMode(e)||Xl.rectMode(e)}});var Jm=z((DZe,qI)=>{"use strict";qI.exports=function(r){var t=r._fullLayout;t._glcanvas&&t._glcanvas.size()&&t._glcanvas.each(function(a){a.regl&&a.regl.clear({color:!0,depth:!0})})}});var Km=z((EZe,LI)=>{"use strict";LI.exports={undo:{width:857.1,height:1e3,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",transform:"matrix(1 0 0 -1 0 850)"},home:{width:928.6,height:1e3,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",transform:"matrix(1 0 0 -1 0 850)"},"camera-retro":{width:1e3,height:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",transform:"matrix(1 0 0 -1 0 850)"},curlybraces:{width:18,height:16,path:"M 9,4 C 7.354992,4 6,5.354992 6,7 V 9 C 6,9.2999997 5.8778068,9.8883542 5.5878906,10.291016 5.2979744,10.693677 4.9222213,11 4,11 a 1.0001,1.0001 0 0 0 0,2 c 0.2999997,0 0.8883542,0.122193 1.2910156,0.412109 C 5.693677,13.702026 6,14.077779 6,15 v 2 c 0,1.645008 1.354992,3 3,3 h 0.5 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 H 9 C 8.4358712,18 8,17.564129 8,17 V 15 C 8,13.625876 7.3766799,12.602305 6.6113281,11.96875 6.8086352,11.794047 7.0679793,11.657537 7.2109375,11.458984 7.8210204,10.611647 8,9.6999993 8,9 V 7 C 8,6.4358712 8.4358712,6 9,6 h 0.5 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z m 5.5,0 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 H 15 c 0.564129,0 1,0.4358712 1,1 v 2 c 0,0.6999993 0.17898,1.611647 0.789062,2.458984 0.142959,0.198553 0.402303,0.335063 0.59961,0.509766 C 16.62332,12.602305 16,13.625876 16,15 v 2 c 0,0.564129 -0.435871,1 -1,1 h -0.5 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 H 15 c 1.645008,0 3,-1.354992 3,-3 v -2 c 0,-0.922221 0.306323,-1.297974 0.708984,-1.587891 C 19.111646,13.122193 19.7,13 20,13 a 1.0001,1.0001 0 0 0 0,-2 C 19.077779,11 18.702026,10.693677 18.412109,10.291016 18.122193,9.8883542 18,9.2999997 18,9 V 7 C 18,5.354992 16.645008,4 15,4 Z",transform:"translate(-3 -4)"},zoombox:{width:1e3,height:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",transform:"matrix(1 0 0 -1 0 850)"},pan:{width:1e3,height:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",transform:"matrix(1 0 0 -1 0 850)"},zoom_plus:{width:875,height:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},zoom_minus:{width:875,height:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},autoscale:{width:1e3,height:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_basic:{width:1500,height:1e3,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_compare:{width:1125,height:1e3,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",transform:"matrix(1 0 0 -1 0 850)"},plotlylogo:{width:1542,height:1e3,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",transform:"matrix(1 0 0 -1 0 850)"},"z-axis":{width:1e3,height:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",transform:"matrix(1 0 0 -1 0 850)"},"3d_rotate":{width:1e3,height:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",transform:"matrix(1 0 0 -1 0 850)"},camera:{width:1e3,height:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",transform:"matrix(1 0 0 -1 0 850)"},movie:{width:1e3,height:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",transform:"matrix(1 0 0 -1 0 850)"},question:{width:857.1,height:1e3,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",transform:"matrix(1 0 0 -1 0 850)"},disk:{width:857.1,height:1e3,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",transform:"matrix(1 0 0 -1 0 850)"},cloudupload:{width:640,height:640,path:"M451.5 160C434.9 160 418.8 164.5 404.7 172.7C388.9 156.7 370.5 143.3 350.2 133.2C378.4 109.2 414.3 96 451.5 96C537.9 96 608 166 608 252.5C608 294 591.5 333.8 562.2 363.1L491.1 434.2C461.8 463.5 422 480 380.5 480C294.1 480 224 410 224 323.5C224 322 224 320.5 224.1 319C224.6 301.3 239.3 287.4 257 287.9C274.7 288.4 288.6 303.1 288.1 320.8C288.1 321.7 288.1 322.6 288.1 323.4C288.1 374.5 329.5 415.9 380.6 415.9C405.1 415.9 428.6 406.2 446 388.8L517.1 317.7C534.4 300.4 544.2 276.8 544.2 252.3C544.2 201.2 502.8 159.8 451.7 159.8zM307.2 237.3C305.3 236.5 303.4 235.4 301.7 234.2C289.1 227.7 274.7 224 259.6 224C235.1 224 211.6 233.7 194.2 251.1L123.1 322.2C105.8 339.5 96 363.1 96 387.6C96 438.7 137.4 480.1 188.5 480.1C205 480.1 221.1 475.7 235.2 467.5C251 483.5 269.4 496.9 289.8 507C261.6 530.9 225.8 544.2 188.5 544.2C102.1 544.2 32 474.2 32 387.7C32 346.2 48.5 306.4 77.8 277.1L148.9 206C178.2 176.7 218 160.2 259.5 160.2C346.1 160.2 416 230.8 416 317.1C416 318.4 416 319.7 416 321C415.6 338.7 400.9 352.6 383.2 352.2C365.5 351.8 351.6 337.1 352 319.4C352 318.6 352 317.9 352 317.1C352 283.4 334 253.8 307.2 237.5z",transform:"matrix(1 0 0 1 -15 -15)"},drawopenpath:{width:70,height:70,path:"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z",transform:"matrix(1 0 0 1 -15 -15)"},drawclosedpath:{width:90,height:90,path:"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z",transform:"matrix(1 0 0 1 -5 -5)"},lasso:{width:1031,height:1e3,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",transform:"matrix(1 0 0 -1 0 850)"},selectbox:{width:1e3,height:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",transform:"matrix(1 0 0 -1 0 850)"},drawline:{width:70,height:70,path:"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z",transform:"matrix(1 0 0 1 -15 -15)"},drawrect:{width:80,height:80,path:"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z",transform:"matrix(1 0 0 1 -10 -10)"},drawcircle:{width:80,height:80,path:"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z",transform:"matrix(1 0 0 1 -10 -10)"},eraseshape:{width:80,height:80,path:"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z",transform:"matrix(1 0 0 1 -10 -10)"},spikeline:{width:1e3,height:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",transform:"matrix(1.5 0 0 -1.5 0 850)"},pencil:{width:1792,height:1792,path:"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z",transform:"matrix(1 0 0 1 0 1)"},newplotlylogo:{name:"newplotlylogo",svg:[""," plotly-logomark"," "," "," "," "," "," "," "," "," "," "," "," "," ",""].join("")}}});var Qm={};qt(Qm,{CIRCLE_SIDES:()=>o4e,SQRT2:()=>h4e,cos45:()=>c4e,i000:()=>l4e,i090:()=>s4e,i180:()=>u4e,i270:()=>f4e,sin45:()=>v4e});var o4e,l4e,s4e,u4e,f4e,c4e,v4e,h4e,ey=St(()=>{"use strict";o4e=32,l4e=0,s4e=8,u4e=16,f4e=24,c4e=Math.cos(Math.PI/4),v4e=Math.sin(Math.PI/4),h4e=Math.sqrt(2)});var ry=z((PZe,DI)=>{"use strict";var d4e=ke().strTranslate;function CI(e,r){switch(e.type){case"log":return e.p2d(r);case"date":return e.p2r(r,0,e.calendar);default:return e.p2r(r)}}function p4e(e,r){switch(e.type){case"log":return e.d2p(r);case"date":return e.r2p(r,0,e.calendar);default:return e.r2p(r)}}function m4e(e){var r=e._id.charAt(0)==="y"?1:0;return function(t){return CI(e,t[r])}}function y4e(e){return d4e(e.xaxis._offset,e.yaxis._offset)}DI.exports={p2r:CI,r2p:p4e,axValue:m4e,getTransform:y4e}});var Us=z(Zl=>{"use strict";var g4e=i6(),RI=(ey(),ze(Qm)),m0=RI.CIRCLE_SIDES,g7=RI.SQRT2,FI=ry(),EI=FI.p2r,PI=FI.r2p,b4e=[0,3,4,5,6,1,2],x4e=[0,3,4,1,2];Zl.writePaths=function(e){var r=e.length;if(!r)return"M0,0Z";for(var t="",a=0;a0&&s{"use strict";var zI=Aa(),HI=df(),_4e=HI.drawMode,w4e=HI.openMode,y0=(ey(),ze(Qm)),NI=y0.i000,II=y0.i090,BI=y0.i180,OI=y0.i270,A4e=y0.cos45,T4e=y0.sin45,UI=ry(),ay=UI.p2r,Gs=UI.r2p,M4e=Es(),k4e=M4e.clearOutline,ny=Us(),S4e=ny.readPaths,q4e=ny.writePaths,L4e=ny.ellipseOver,C4e=ny.fixDatesForPaths;function D4e(e,r){if(e.length){var t=e[0][0];if(t){var a=r.gd,n=r.isActiveShape,i=r.dragmode,o=(a.layout||{}).shapes||[];if(!_4e(i)&&n!==void 0){var l=a._fullLayout._activeShapeIndex;if(l{"use strict";var E4e=df(),P4e=E4e.selectMode,R4e=Es(),F4e=R4e.clearOutline,b7=Us(),z4e=b7.readPaths,N4e=b7.writePaths,I4e=b7.fixDatesForPaths;VI.exports=function(r,t){if(r.length){var a=r[0][0];if(a){var n=a.getAttribute("d"),i=t.gd,o=i._fullLayout.newselection,l=t.plotinfo,s=l.xaxis,u=l.yaxis,f=t.isActiveSelection,c=t.dragmode,v=(i.layout||{}).selections||[];if(!P4e(c)&&f!==void 0){var d=i._fullLayout._activeSelectionIndex;if(dG4e,paramIsX:()=>H4e,paramIsY:()=>U4e,paramRE:()=>O4e,segmentRE:()=>B4e});var B4e,O4e,H4e,U4e,G4e,ed=St(()=>{"use strict";B4e=/[MLHVQCTSZ][^MLHVQCTSZ]*/g,O4e=/[^\s,]+/g,H4e={M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},U4e={M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:3},Z:{}},G4e={M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}});var Vs=z(ja=>{"use strict";var ml=(ed(),ze(Qh)),jI=ke(),Ys=Yr();ja.rangeToShapePosition=function(e){return e.type==="log"?e.r2d:function(r){return r}};ja.shapePositionToRange=function(e){return e.type==="log"?e.d2r:function(r){return r}};ja.decodeDate=function(e){return function(r){return r.replace&&(r=r.replace("_"," ")),e(r)}};ja.encodeDate=function(e){return function(r){return e(r).replace(" ","_")}};ja.extractPathCoords=function(e,r,t){var a=[],n=e.match(ml.segmentRE);return n.forEach(function(i){var o=r[i.charAt(0)].drawn;if(o!==void 0){var l=i.slice(1).match(ml.paramRE);if(!(!l||l.length{let l=o.charAt(0),s=n[l].drawn!==void 0;return i+(s?1:0)},0)};ja.getDataToPixel=function(e,r,t,a,n){var i=e._fullLayout._size,o;if(r)if(n==="domain")o=function(s){return r._length*(a?1-s:s)+r._offset};else{var l=ja.shapePositionToRange(r);o=function(s){var u=pl(r,t);return r._offset+r.r2p(l(s,!0))+u},r.type==="date"&&(o=ja.decodeDate(o))}else a?o=function(s){return i.t+i.h*(1-s)}:o=function(s){return i.l+i.w*s};return o};ja.getPixelToData=function(e,r,t,a){var n=e._fullLayout._size,i;if(r)if(a==="domain")i=function(l){var s=(l-r._offset)/r._length;return t?1-s:s};else{var o=ja.rangeToShapePosition(r);i=function(l){return o(r.p2r(l-r._offset))}}else t?i=function(l){return 1-(l-n.t)/n.h}:i=function(l){return(l-n.l)/n.w};return i};ja.roundPositionForSharpStrokeRendering=function(e,r){var t=Math.round(r%2)===1,a=Math.round(e);return t?a+.5:a};ja.makeShapesOptionsAndPlotinfo=function(e,r){var t=e._fullLayout.shapes[r]||{},a=e._fullLayout._plots[t.xref+t.yref],n=!!a;return n?a._hadPlotinfo=!0:(a={},t.xref&&t.xref!=="paper"&&(a.xaxis=e._fullLayout[t.xref+"axis"]),t.yref&&t.yref!=="paper"&&(a.yaxis=e._fullLayout[t.yref+"axis"])),a.xsizemode=t.xsizemode,a.ysizemode=t.ysizemode,a.xanchor=t.xanchor,a.yanchor=t.yanchor,{options:t,plotinfo:a}};ja.makeSelectionsOptionsAndPlotinfo=function(e,r){var t=e._fullLayout.selections[r]||{},a=e._fullLayout._plots[t.xref+t.yref],n=!!a;return n?a._hadPlotinfo=!0:(a={},t.xref&&(a.xaxis=e._fullLayout[t.xref+"axis"]),t.yref&&(a.yaxis=e._fullLayout[t.yref+"axis"])),{options:t,plotinfo:a}};ja.getPathString=function(e,r){let t=r.type,a=Ys.getRefType(r.xref),n=Ys.getRefType(r.yref),i=e._fullLayout._size;var o,l,s,u,f,c,v,d,p,y,m,b;function A(E,P,R,N){var I;if(E)if(P==="domain")N?I=function(O){return E._offset+E._length*(1-O)}:I=function(O){return E._offset+E._length*O};else{let O=ja.shapePositionToRange(E);I=function(U){return E._offset+E.r2p(O(U,!0))},R==="path"&&E.type==="date"&&(I=ja.decodeDate(I))}else N?I=function(O){return i.t+i.h*(1-O)}:I=function(O){return i.l+i.w*O};return I}if(a==="array"?(v=[],o=r.xref.map(function(E){return Ys.getFromId(e,E)}),v=r.xref.map(function(E,P){return A(o[P],Ys.getRefType(E),t,!1)})):(o=Ys.getFromId(e,r.xref),v=A(o,a,t,!1)),n==="array"?(d=[],l=r.yref.map(function(E){return Ys.getFromId(e,E)}),d=r.yref.map(function(E,P){return A(l[P],Ys.getRefType(E),t,!0)})):(l=Ys.getFromId(e,r.yref),d=A(l,n,t,!0)),t==="path")return Y4e(r,v,d);if(a==="array")s=pl(o[0],r.x0shift),u=pl(o[1],r.x1shift),p=v[0](r.x0)+s,y=v[1](r.x1)+u;else if(s=pl(o,r.x0shift),u=pl(o,r.x1shift),r.xsizemode==="pixel"){let E=v(r.xanchor);p=E+r.x0+s,y=E+r.x1+u}else p=v(r.x0)+s,y=v(r.x1)+u;if(n==="array")f=pl(l[0],r.y0shift),c=pl(l[1],r.y1shift),m=d[0](r.y0)+f,b=d[1](r.y1)+c;else if(f=pl(l,r.y0shift),c=pl(l,r.y1shift),r.ysizemode==="pixel"){let E=d(r.yanchor);m=E-r.y0+f,b=E-r.y1+c}else m=d(r.y0)+f,b=d(r.y1)+c;if(t==="line")return"M"+p+","+m+"L"+y+","+b;if(t==="rect")return"M"+p+","+m+"H"+y+"V"+b+"H"+p+"Z";var w=(p+y)/2,x=(m+b)/2,_=Math.abs(w-p),k=Math.abs(x-m),T="A"+_+","+k,q=w+_+","+x,C=w+","+(x-k);return"M"+q+T+" 0 1,1 "+C+T+" 0 0,1 "+q+"Z"};function Y4e(e,r,t){let a=e.path,n=e.xsizemode,i=e.ysizemode,o=e.xanchor,l=e.yanchor,s=Array.isArray(e.xref),u=Array.isArray(e.yref);var f=0,c=0;return a.replace(ml.segmentRE,function(v){var d=0,p=v.charAt(0),y=ml.paramIsX[p],m=ml.paramIsY[p],b=ml.numParams[p];let A=y.drawn!==void 0,w=m.drawn!==void 0,x=s?r[f]:r,_=u?t[c]:t;var k=v.slice(1).replace(ml.paramRE,function(T){return y[d]?n==="pixel"?T=x(o)+Number(T):T=x(T):m[d]&&(i==="pixel"?T=_(l)-Number(T):T=_(T)),d++,d>b&&(T="X"),T});return d>b&&(k=k.replace(/[\s,]*X.*/,""),jI.log("Ignoring extra params in segment "+v)),A&&f++,w&&c++,p+k})}ja.getPixelShift=pl;function pl(e,r){r=r||0;var t=0;return r&&e&&(e.type==="category"||e.type==="multicategory")&&(t=(e.r2p(1)-e.r2p(0))*r),t}});var _7=z((IZe,ZI)=>{"use strict";var V4e=ke(),yl=Yr(),WI=Fa(),XI=Jr(),j4e=Us().readPaths,pf=Vs(),W4e=pf.getPathString,rd=Sp(),X4e=(on(),ze(nn)).FROM_TL;ZI.exports=function(r,t,a,n){if(n.selectAll(".shape-label").remove(),!!(a.label.text||a.label.texttemplate)){var i;if(a.label.texttemplate){var o={};if(a.type!=="path"){var l=yl.getFromId(r,a.xref),s=yl.getFromId(r,a.yref);let j=Array.isArray(a.xref),J=Array.isArray(a.yref);for(var u in rd){var f=typeof rd[u]=="function",c=!j||rd.simpleXVariables.includes(u),v=!J||rd.simpleYVariables.includes(u);if(f&&c&&v){var d=rd[u](a,l,s);d!==void 0&&(o[u]=d)}}}i=V4e.texttemplateStringForShapes({data:[o],fallback:a.label.texttemplatefallback,locale:r._fullLayout._d3locale,template:a.label.texttemplate})}else i=a.label.text;var p={"data-index":t},y=a.label.font,m={"data-notex":1},b=n.append("g").attr(p).classed("shape-label",!0),A=b.append("text").attr(m).classed("shape-label-text",!0).text(i),w,x,_,k;if(a.path){var T=W4e(r,a),q=j4e(T,r);w=1/0,_=1/0,x=-1/0,k=-1/0;for(var C=0;Cpf.getDataToPixel(r,Ce,ye,!1,Me)(Re),be=(Re,ye,Ce,Me)=>pf.getDataToPixel(r,Ce,ye,!0,Me)(Re);if(a.xsizemode==="pixel"){let Re=oe(a.xanchor,void 0,te,fe),ye=pf.getPixelShift(te,a.x0shift),Ce=pf.getPixelShift(te,a.x1shift);w=Re+a.x0+ye,x=Re+a.x1+Ce}else w=oe(a.x0,a.x0shift,te,fe),x=oe(a.x1,a.x1shift,ae,ie);if(a.ysizemode==="pixel"){let Re=be(a.yanchor,void 0,se,ue),ye=pf.getPixelShift(se,a.y0shift),Ce=pf.getPixelShift(se,a.y1shift);_=Re-a.y0+ye,k=Re-a.y1+Ce}else _=be(a.y0,a.y0shift,se,ue),k=be(a.y1,a.y1shift,$,ce)}var O=a.label.textangle;O==="auto"&&(a.type==="line"?O=Z4e(w,_,x,k):O=0),A.call(function(j){return j.call(XI.font,y).attr({}),WI.convertToTspans(j,r),j});var U=XI.bBox(A.node()),Y=$4e(w,_,x,k,a,O,U),G=Y.textx,V=Y.texty,W=Y.xanchor;A.attr({"text-anchor":{left:"start",center:"middle",right:"end"}[W],y:V,x:G,transform:"rotate("+O+","+G+","+V+")"}).call(WI.positionText,G,V)}};function Z4e(e,r,t,a){var n,i;return i=Math.abs(t-e),t>=e?n=r-a:n=a-r,-180/Math.PI*Math.atan2(n,i)}function $4e(e,r,t,a,n,i,o){var l=n.label.textposition,s=n.label.textangle,u=n.label.padding,f=n.type,c=Math.PI/180*i,v=Math.sin(c),d=Math.cos(c),p=n.label.xanchor,y=n.label.yanchor,m,b,A,w;if(f==="line"){l==="start"?(m=e,b=r):l==="end"?(m=t,b=a):(m=(e+t)/2,b=(r+a)/2),p==="auto"&&(l==="start"?s==="auto"?t>e?p="left":te?p="right":te?p="right":te?p="left":t{"use strict";var J4e=ke(),K4e=J4e.strTranslate,$I=Vi(),QI=df(),Q4e=QI.drawMode,eB=QI.selectMode,rB=Tr(),JI=qr(),ly=(ey(),ze(Qm)),e6e=ly.i000,r6e=ly.i090,t6e=ly.i180,a6e=ly.i270,n6e=Es(),tB=n6e.clearOutlineControllers,A7=Us(),oy=A7.pointsOnRectangle,w7=A7.pointsOnEllipse,i6e=A7.writePaths,o6e=iy().newShapes,l6e=iy().createShapeObj,s6e=x7(),u6e=_7();aB.exports=function e(r,t,a,n){n||(n=0);var i=a.gd;function o(){e(r,t,a,n++),(w7(r[0])||a.hasText)&&l({redrawing:!0})}function l(Y){var G={};a.isActiveShape!==void 0&&(a.isActiveShape=!1,G=o6e(t,a)),a.isActiveSelection!==void 0&&(a.isActiveSelection=!1,G=s6e(t,a),i._fullLayout._reselect=!0),Object.keys(G).length&&rB.call((Y||{}).redrawing?"relayout":"_guiRelayout",i,G)}var s=i._fullLayout,u=s._zoomlayer,f=a.dragmode,c=Q4e(f),v=eB(f);(c||v)&&(i._fullLayout._outlining=!0),tB(i),t.attr("d",i6e(r));var d,p,y,m,b;if(!n&&(a.isActiveShape||a.isActiveSelection)){b=f6e([],r);var A=u.append("g").attr("class","outline-controllers");E(A),U()}if(c&&a.hasText){var w=u.select(".label-temp"),x=l6e(t,a,a.dragmode);u6e(i,"label-temp",x,w)}function _(Y){y=+Y.srcElement.getAttribute("data-i"),m=+Y.srcElement.getAttribute("data-j"),d[y][m].moveFn=k}function k(Y,G){if(r.length){var V=b[y][m][1],W=b[y][m][2],j=r[y],J=j.length;if(oy(j)){var te=Y,ae=G;if(a.isActiveSelection){var se=KI(j,m);se[1]===j[m][1]?ae=0:te=0}for(var $=0;$1&&!(Y.length===2&&Y[1][0]==="Z")&&(m===0&&(Y[0][0]="M"),r[y]=Y,o(),l())}}function C(Y,G){if(Y===2){y=+G.srcElement.getAttribute("data-i"),m=+G.srcElement.getAttribute("data-j");var V=r[y];!oy(V)&&!w7(V)&&q()}}function E(Y){d=[];for(var G=0;G{"use strict";var v6e=Pr(),uB=Tr(),M7=ke(),mf=Yr(),h6e=Us().readPaths,d6e=sy(),fy=_7(),fB=Es().clearOutlineControllers,T7=qr(),cy=Jr(),p6e=Ct().arrayEditor,nB=Vi(),iB=Un(),oB=Os(),yf=(ed(),ze(Qh)),ti=Vs(),k7=ti.getPathString;hB.exports={draw:S7,drawOne:cB,eraseActiveShape:x6e,drawLabel:fy};function S7(e){var r=e._fullLayout;r._shapeUpperLayer.selectAll("path").remove(),r._shapeLowerLayer.selectAll("path").remove(),r._shapeUpperLayer.selectAll("text").remove(),r._shapeLowerLayer.selectAll("text").remove();for(var t in r._plots){var a=r._plots[t].shapelayer;a&&(a.selectAll("path").remove(),a.selectAll("text").remove())}for(var n=0;n{if(!e._dragging&&e._fullLayout.hoveranywhere){let o=n(i);o&&iB.hover(e,o,t.id)}}),a.addEventListener("click",i=>{if(!e._dragged&&e._fullLayout.clickanywhere){let o=n(i);o&&iB.click(e,o,t.id)}})}function vB(e,r,t){let a=t.xref,n=t.yref;if(Array.isArray(a)||Array.isArray(n)){let i="clip"+r._fullLayout._uid+"shape"+t._index,o=y6e(r,a,n);M7.ensureSingleById(r._fullLayout._clips,"clipPath",i,function(l){l.append("rect")}).select("rect").attr(o),cy.setClipUrl(e,i,r)}else{let i=(a+n).replace(/paper/g,"").replace(/[xyz][0-9]* *domain/g,"");cy.setClipUrl(e,i?"clip"+r._fullLayout._uid+i:null,r)}}function y6e(e,r,t){let a=e._fullLayout._size;function n(l,s){let u=(Array.isArray(l)?l:[l]).map(v=>mf.getFromId(e,v)).filter(Boolean);if(!u.length)return s?[a.t,a.t+a.h]:[a.l,a.l+a.w];let f=u.map(function(v){return v._offset}),c=u.map(function(v){return v._offset+v._length});return[Math.min(...f),Math.max(...c)]}let i=n(r,!1),o=n(t,!0);return{x:i[0],y:o[0],width:i[1]-i[0],height:o[1]-o[0]}}function g6e(e,r,t,a,n,i){var o=10,l=10,s=t.xsizemode==="pixel",u=t.ysizemode==="pixel",f=t.type==="line",c=t.type==="path",v=i.modifyItem,d,p,y,m,b,A,w,x,_,k,T,q,C,E,P,R=v6e.select(r.node().parentNode),N=mf.getFromId(e,t.xref),I=mf.getRefType(t.xref),O=mf.getFromId(e,t.yref),U=mf.getRefType(t.yref),Y=t.x0shift,G=t.x1shift,V=t.y0shift,W=t.y1shift,j=function(Ie,qe){var Ze=ti.getDataToPixel(e,N,qe,!1,I);return Ze(Ie)},J=function(Ie,qe){var Ze=ti.getDataToPixel(e,O,qe,!0,U);return Ze(Ie)},te=ti.getPixelToData(e,N,!1,I),ae=ti.getPixelToData(e,O,!0,U),se=ie(),$={element:se.node(),gd:e,prepFn:oe,doneFn:be,clickFn:Re},fe;nB.init($),se.node().onmousemove=ce;function ie(){return f?ue():r}function ue(){var Ie=10,qe=Math.max(t.line.width,Ie),Ze=n.append("g").attr("data-index",a).attr("drag-helper",!0);Ze.append("path").attr("d",r.attr("d")).style({cursor:"move","stroke-width":qe,"stroke-opacity":"0"});var Je={"fill-opacity":"0"},Xe=Math.max(qe/2,Ie);return Ze.append("circle").attr({"data-line-point":"start-point",cx:s?j(t.xanchor)+t.x0:j(t.x0,Y),cy:u?J(t.yanchor)-t.y0:J(t.y0,V),r:Xe}).style(Je).classed("cursor-grab",!0),Ze.append("circle").attr({"data-line-point":"end-point",cx:s?j(t.xanchor)+t.x1:j(t.x1,G),cy:u?J(t.yanchor)-t.y1:J(t.y1,W),r:Xe}).style(Je).classed("cursor-grab",!0),Ze}function ce(Ie){if(uy(e)){fe=null;return}if(f)Ie.target.tagName==="path"?fe="move":fe=Ie.target.attributes["data-line-point"].value==="start-point"?"resize-over-start-point":"resize-over-end-point";else{var qe=$.element.getBoundingClientRect(),Ze=qe.right-qe.left,Je=qe.bottom-qe.top,Xe=Ie.clientX-qe.left,Se=Ie.clientY-qe.top,Fe=!c&&Ze>o&&Je>l&&!Ie.shiftKey?nB.getCursor(Xe/Ze,1-Se/Je):"move";oB(r,Fe),fe=Fe.split("-")[0]}}function oe(Ie){uy(e)||(s&&(b=j(t.xanchor)),u&&(A=J(t.yanchor)),t.type==="path"?P=t.path:(d=s?t.x0:j(t.x0),p=u?t.y0:J(t.y0),y=s?t.x1:j(t.x1),m=u?t.y1:J(t.y1)),dm?(w=p,T="y0",x=m,q="y1"):(w=m,T="y1",x=p,q="y0"),ce(Ie),Me(n,t),De(r,t,e),$.moveFn=fe==="move"?ye:Ce,$.altKey=Ie.altKey)}function be(){uy(e)||(oB(r),Le(n),vB(r,e,t),uB.call("_guiRelayout",e,i.getUpdateObj()))}function Re(){uy(e)||Le(n)}function ye(Ie,qe){if(t.type==="path"){var Ze=function(Se){return Se},Je=Ze,Xe=Ze;s?v("xanchor",t.xanchor=te(b+Ie)):(Je=function(Fe){return te(j(Fe)+Ie)},N&&N.type==="date"&&(Je=ti.encodeDate(Je))),u?v("yanchor",t.yanchor=ae(A+qe)):(Xe=function(Fe){return ae(J(Fe)+qe)},O&&O.type==="date"&&(Xe=ti.encodeDate(Xe))),v("path",t.path=lB(P,Je,Xe))}else s?v("xanchor",t.xanchor=te(b+Ie)):(v("x0",t.x0=te(d+Ie)),v("x1",t.x1=te(y+Ie))),u?v("yanchor",t.yanchor=ae(A+qe)):(v("y0",t.y0=ae(p+qe)),v("y1",t.y1=ae(m+qe)));r.attr("d",k7(e,t)),Me(n,t),fy(e,a,t,R)}function Ce(Ie,qe){if(c){var Ze=function(We){return We},Je=Ze,Xe=Ze;s?v("xanchor",t.xanchor=te(b+Ie)):(Je=function(ar){return te(j(ar)+Ie)},N&&N.type==="date"&&(Je=ti.encodeDate(Je))),u?v("yanchor",t.yanchor=ae(A+qe)):(Xe=function(ar){return ae(J(ar)+qe)},O&&O.type==="date"&&(Xe=ti.encodeDate(Xe))),v("path",t.path=lB(P,Je,Xe))}else if(f){if(fe==="resize-over-start-point"){var Se=d+Ie,Fe=u?p-qe:p+qe;v("x0",t.x0=s?Se:te(Se)),v("y0",t.y0=u?Fe:ae(Fe))}else if(fe==="resize-over-end-point"){var er=y+Ie,re=u?m-qe:m+qe;v("x1",t.x1=s?er:te(er)),v("y1",t.y1=u?re:ae(re))}}else{var xe=function(We){return fe.indexOf(We)!==-1},Ye=xe("n"),vr=xe("s"),Pe=xe("w"),me=xe("e"),Te=Ye?w+qe:w,Ue=vr?x+qe:x,$e=Pe?_+Ie:_,Oe=me?k+Ie:k;u&&(Ye&&(Te=w-qe),vr&&(Ue=x-qe)),(!u&&Ue-Te>l||u&&Te-Ue>l)&&(v(T,t[T]=u?Te:ae(Te)),v(q,t[q]=u?Ue:ae(Ue))),Oe-$e>o&&(v(C,t[C]=s?$e:te($e)),v(E,t[E]=s?Oe:te(Oe)))}r.attr("d",k7(e,t)),Me(n,t),fy(e,a,t,R)}function Me(Ie,qe){(s||u)&&Ze();function Ze(){var Je=qe.type!=="path",Xe=Ie.selectAll(".visual-cue").data([0]),Se=1;Xe.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":Se}).classed("visual-cue",!0);var Fe=j(s?qe.xanchor:M7.midRange(Je?[qe.x0,qe.x1]:ti.extractPathCoords(qe.path,yf.paramIsX))),er=J(u?qe.yanchor:M7.midRange(Je?[qe.y0,qe.y1]:ti.extractPathCoords(qe.path,yf.paramIsY)));if(Fe=ti.roundPositionForSharpStrokeRendering(Fe,Se),er=ti.roundPositionForSharpStrokeRendering(er,Se),s&&u){var re="M"+(Fe-1-Se)+","+(er-1-Se)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";Xe.attr("d",re)}else if(s){var xe="M"+(Fe-1-Se)+","+(er-9-Se)+"v18 h2 v-18 Z";Xe.attr("d",xe)}else{var Ye="M"+(Fe-9-Se)+","+(er-1-Se)+"h18 v2 h-18 Z";Xe.attr("d",Ye)}}}function Le(Ie){Ie.selectAll(".visual-cue").remove()}function De(Ie,qe,Ze){var Je=qe.xref,Xe=qe.yref,Se=mf.getFromId(Ze,Je),Fe=mf.getFromId(Ze,Xe),er="";Je!=="paper"&&!Se.autorange&&(er+=Je),Xe!=="paper"&&!Fe.autorange&&(er+=Xe),cy.setClipUrl(Ie,er?"clip"+Ze._fullLayout._uid+er:null,Ze)}}function lB(e,r,t){return e.replace(yf.segmentRE,function(a){var n=0,i=a.charAt(0),o=yf.paramIsX[i],l=yf.paramIsY[i],s=yf.numParams[i],u=a.slice(1).replace(yf.paramRE,function(f){return n>=s||(o[n]?f=r(f):l[n]&&(f=t(f)),n++),f});return i+u})}function b6e(e,r){if(vy(e)){var t=r.node(),a=+t.getAttribute("data-index");if(a>=0){if(a===e._fullLayout._activeShapeIndex){sB(e);return}e._fullLayout._activeShapeIndex=a,e._fullLayout._deactivateShape=sB,S7(e)}}}function sB(e){if(vy(e)){var r=e._fullLayout._activeShapeIndex;r>=0&&(fB(e),delete e._fullLayout._activeShapeIndex,S7(e))}}function x6e(e){if(vy(e)){fB(e);var r=e._fullLayout._activeShapeIndex,t=(e.layout||{}).shapes||[];if(r{"use strict";var g0=ke()._,_6e=function(e){return{DIALOG_TITLE:g0(e,"Share chart"),DIALOG_MESSAGE_CLOUD:g0(e,"This chart will be uploaded to {Plotly Cloud} to create a sharing link. Only you can see it until you change its visibility."),DIALOG_MESSAGE_CLOUD_ACCOUNT:g0(e,"If you don't have a Plotly Cloud account yet, you'll have a chance to create one."),DIALOG_MESSAGE_OTHER:g0(e,"This chart will be sent to {serverUrl}."),DIALOG_CANCEL:g0(e,"Cancel"),DIALOG_CONFIRM:g0(e,"Share")}};dB.exports=_6e});var gB=z((UZe,yB)=>{"use strict";var mB=Pr(),{dfltConfig:w6e}=xs(),A6e=pB(),T6e=(e,r,t,a,n)=>{let i=A6e(e),o=r.append("div").classed("plotly-cloud-dialog-box",!0);if(o.append("div").classed("plotly-cloud-dialog-title",!0).text(i.DIALOG_TITLE),t===w6e.plotlyServerURL){let s=o.append("div").classed("plotly-cloud-dialog-message",!0),u=new URL(t).origin,f=i.DIALOG_MESSAGE_CLOUD.split(/(\{|\})/),c=f[0],v=f[2],d=f[4];s.append("span").text(c),s.append("a").classed("plotly-cloud-dialog-message--hostname",!0).attr("href",u).attr("target","_blank").text(v),s.append("span").text(d),s.append("div").classed("plotly-cloud-dialog-message--account",!0).text(i.DIALOG_MESSAGE_CLOUD_ACCOUNT)}else{let s=new URL(t),u=s.hostname,f=s.origin,c=i.DIALOG_MESSAGE_OTHER.split(/(\{|\})/),v=c[0],d=c[4],p=o.append("div").classed("plotly-cloud-dialog-message",!0);p.append("span").text(v),p.append("a").classed("plotly-cloud-dialog-message--hostname",!0).attr("href",f).attr("target","_blank").text(u),p.append("span").text(d)}let l=o.append("div").classed("plotly-cloud-dialog-buttons",!0);l.append("button").classed("plotly-cloud-dialog-btn",!0).classed("plotly-cloud-dialog-btn--cancel",!0).text(i.DIALOG_CANCEL).on("click",n),l.append("button").classed("plotly-cloud-dialog-btn",!0).classed("plotly-cloud-dialog-btn--confirm",!0).text(i.DIALOG_CONFIRM).on("click",a)},M6e=(e,r,t)=>{let a=mB.select(e._fullLayout._paperdiv.node());a.selectAll(".plotly-cloud-dialog").remove();let n=a.append("div").classed("plotly-cloud-dialog",!0),i=()=>{n.remove(),document.removeEventListener("keydown",o)},o=l=>{(l.key==="Escape"||l.keyCode===27)&&i()};document.addEventListener("keydown",o),n.on("click",()=>{mB.event.target===n.node()&&i()}),T6e(e,n,r,()=>{i(),t()},i)};yB.exports=M6e});var C7=z((GZe,MB)=>{"use strict";var Ai=Tr(),k6e=ma(),xB=Aa(),tt=Km(),S6e=hy().eraseActiveShape,q6e=gB(),b0=ke(),Zr=b0._,rt={};MB.exports=rt;rt.toImage={name:"toImage",title:function(e){var r=e._context.toImageButtonOptions||{},t=r.format||"png";return t==="png"?Zr(e,"Download plot as a PNG"):Zr(e,"Download plot")},icon:tt.camera,click:function(e){var r=e._context.toImageButtonOptions,t={format:r.format||"png"};b0.notifier(Zr(e,"Preparing image - this may take a few seconds"),"long",e),["filename","width","height","scale"].forEach(function(a){a in r&&(t[a]=r[a])}),Ai.call("downloadImage",e,t).then(function(a){b0.notifier(Zr(e,"Image download succeeded")+" - "+a,"long",e)}).catch(function(){b0.notifier(Zr(e,"Sorry, there was a problem downloading your image!"),"long",e)})}};rt.downloadJson={name:"downloadJson",title:function(e){return Zr(e,"Download plot as JSON")},icon:tt.curlybraces,click:function(e){Ai.call("downloadImage",e,{format:"full-json"}).then(function(r){b0.notifier(Zr(e,"JSON download succeeded")+" - "+r,"long",e)}).catch(function(){b0.notifier(Zr(e,"Sorry, there was a problem downloading your JSON file!"),"long",e)})}};rt.sendChartToCloud={name:"sendChartToCloud",title:function(e){return Zr(e,"Share chart...")},icon:tt.cloudupload,click:function(e){var r=(window.PLOTLYENV||{}).BASE_URL||e._context.plotlyServerURL;if(!r){console.error("No destination URL provided (plotlyServerURL is empty)");return}var t;try{t=new URL(r)}catch(n){console.error("Invalid plotlyServerURL: "+r);return}let a=["http:","https:"];if(!a.includes(t.protocol)){console.error(`Invalid protocol '${t.protocol}' in plotlyServerURL '${r}'. Must be one of: ${a.join(", ")}`);return}q6e(e,r,function(){k6e.sendDataToCloud(e,r)})}};rt.zoom2d={name:"zoom2d",_cat:"zoom",title:function(e){return Zr(e,"Zoom")},attr:"dragmode",val:"zoom",icon:tt.zoombox,click:Ln};rt.pan2d={name:"pan2d",_cat:"pan",title:function(e){return Zr(e,"Pan")},attr:"dragmode",val:"pan",icon:tt.pan,click:Ln};rt.select2d={name:"select2d",_cat:"select",title:function(e){return Zr(e,"Box Select")},attr:"dragmode",val:"select",icon:tt.selectbox,click:Ln};rt.lasso2d={name:"lasso2d",_cat:"lasso",title:function(e){return Zr(e,"Lasso Select")},attr:"dragmode",val:"lasso",icon:tt.lasso,click:Ln};rt.drawclosedpath={name:"drawclosedpath",title:function(e){return Zr(e,"Draw closed freeform")},attr:"dragmode",val:"drawclosedpath",icon:tt.drawclosedpath,click:Ln};rt.drawopenpath={name:"drawopenpath",title:function(e){return Zr(e,"Draw open freeform")},attr:"dragmode",val:"drawopenpath",icon:tt.drawopenpath,click:Ln};rt.drawline={name:"drawline",title:function(e){return Zr(e,"Draw line")},attr:"dragmode",val:"drawline",icon:tt.drawline,click:Ln};rt.drawrect={name:"drawrect",title:function(e){return Zr(e,"Draw rectangle")},attr:"dragmode",val:"drawrect",icon:tt.drawrect,click:Ln};rt.drawcircle={name:"drawcircle",title:function(e){return Zr(e,"Draw circle")},attr:"dragmode",val:"drawcircle",icon:tt.drawcircle,click:Ln};rt.eraseshape={name:"eraseshape",title:function(e){return Zr(e,"Erase active shape")},icon:tt.eraseshape,click:S6e};rt.zoomIn2d={name:"zoomIn2d",_cat:"zoomin",title:function(e){return Zr(e,"Zoom in")},attr:"zoom",val:"in",icon:tt.zoom_plus,click:Ln};rt.zoomOut2d={name:"zoomOut2d",_cat:"zoomout",title:function(e){return Zr(e,"Zoom out")},attr:"zoom",val:"out",icon:tt.zoom_minus,click:Ln};rt.autoScale2d={name:"autoScale2d",_cat:"autoscale",title:function(e){return Zr(e,"Autoscale")},attr:"zoom",val:"auto",icon:tt.autoscale,click:Ln};rt.resetScale2d={name:"resetScale2d",_cat:"resetscale",title:function(e){return Zr(e,"Reset axes")},attr:"zoom",val:"reset",icon:tt.home,click:Ln};rt.hoverClosestCartesian={name:"hoverClosestCartesian",_cat:"hoverclosest",title:function(e){return Zr(e,"Show closest data on hover")},attr:"hovermode",val:"closest",icon:tt.tooltip_basic,gravity:"ne",click:Ln};rt.hoverCompareCartesian={name:"hoverCompareCartesian",_cat:"hoverCompare",title:function(e){return Zr(e,"Compare data on hover")},attr:"hovermode",val:function(e){return e._fullLayout._isHoriz?"y":"x"},icon:tt.tooltip_compare,gravity:"ne",click:Ln};function Ln(e,r){var t=r.currentTarget,a=t.getAttribute("data-attr"),n=t.getAttribute("data-val")||!0,i=e._fullLayout,o={},l=xB.list(e,null,!0),s=i._cartesianSpikesEnabled,u,f;if(a==="zoom"){var c=n==="in"?.5:2,v=(1+c)/2,d=(1-c)/2,p,y;for(f=0;f-k),[y,m]=c.invert(f.midPt),{minscale:b}=u.projection,A=(l=u.projection.maxscale)!=null?l:1/0,w=Math.min(b,A),x=Math.max(b,A),_=n==="in"?bB*v:1/bB*v;_>x?_=x:_{"use strict";var kB=C7(),E6e=Object.keys(kB),SB=["drawline","drawopenpath","drawclosedpath","drawcircle","drawrect","eraseshape"],qB=["v1hovermode","hoverclosest","hovercompare","togglehover","togglespikelines"].concat(SB,["downloadJson"]),x0=[],P6e=function(e){if(qB.indexOf(e._cat||e.name)===-1){var r=e.name,t=(e._cat||e.name).toLowerCase();x0.indexOf(r)===-1&&x0.push(r),x0.indexOf(t)===-1&&x0.push(t)}};E6e.forEach(function(e){P6e(kB[e])});x0.sort();LB.exports={DRAW_MODES:SB,backButtons:qB,foreButtons:x0}});var P7={};qt(P7,{default:()=>F6e});var E7,R6e,F6e,R7=St(()=>{"use strict";E7=xc(D7()),R6e={editType:"modebar",orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"modebar",description:"Sets the orientation of the modebar."},bgcolor:{valType:"color",editType:"modebar",description:"Sets the background color of the modebar."},color:{valType:"color",editType:"modebar",description:"Sets the color of the icons in the modebar."},activecolor:{valType:"color",editType:"modebar",description:"Sets the color of the active or hovered on icons in the modebar."},uirevision:{valType:"any",editType:"none",description:["Controls persistence of user-driven changes related to the modebar,","including `hovermode`, `dragmode`, and `showspikes` at both the","root level and inside subplots. Defaults to `layout.uirevision`."].join(" ")},add:{valType:"string",arrayOk:!0,dflt:"",editType:"modebar",description:["Determines which predefined modebar buttons to add.","Please note that these buttons will only be shown if they are","compatible with all trace types used in a graph.","Similar to `config.modeBarButtonsToAdd` option.",`This may include *${E7.default.backButtons.join("*, *")}*.`].join(" ")},remove:{valType:"string",arrayOk:!0,dflt:"",editType:"modebar",description:["Determines which predefined modebar buttons to remove.","Similar to `config.modeBarButtonsToRemove` option.",`This may include *${E7.default.foreButtons.join("*, *")}*.`].join(" ")}},F6e=R6e});var DB=z((VZe,CB)=>{"use strict";var z6e=ke(),td=qr(),N6e=Ct(),I6e=(R7(),ze(P7)).default;CB.exports=function(r,t){var a=r.modebar||{},n=N6e.newContainer(t,"modebar");function i(l,s){return z6e.coerce(a,n,I6e,l,s)}i("orientation"),i("bgcolor",td.addOpacity(t.paper_bgcolor,.5));var o=td.contrast(td.rgb(t.modebar.bgcolor));i("color",td.addOpacity(o,.3)),i("activecolor",td.addOpacity(o,.7)),i("uirevision",t.uirevision),i("add"),i("remove")}});var FB=z((jZe,RB)=>{"use strict";var F7=Pr(),B6e=Br(),my=ke(),EB=Km(),O6e=Jv().version,H6e=new DOMParser;function PB(e){this.container=e.container,this.element=document.createElement("div"),this.update(e.graphInfo,e.buttons),this.container.appendChild(this.element)}var gl=PB.prototype;gl.update=function(e,r){this.graphInfo=e;var t=this.graphInfo._context,a=this.graphInfo._fullLayout,n="modebar-"+a._uid;this.element.setAttribute("id",n),this.element.setAttribute("role","toolbar"),this._uid=n,this.element.className="modebar modebar--custom",t.displayModeBar==="hover"&&(this.element.className+=" modebar--hover ease-bg"),a.modebar.orientation==="v"&&(this.element.className+=" vertical",r=r.reverse());var i=a.modebar,o="#"+n+" .modebar-group";document.querySelectorAll(o).forEach(function(c){c.style.backgroundColor=i.bgcolor});var l=!this.hasButtons(r),s=this.hasLogo!==t.displaylogo,u=this.locale!==t.locale;if(this.locale=t.locale,(l||s||u)&&(this.removeAllButtons(),this.updateButtons(r),t.watermark||t.displaylogo)){var f=this.getLogo();t.watermark&&(f.className=f.className+" watermark"),a.modebar.orientation==="v"?this.element.insertBefore(f,this.element.childNodes[0]):this.element.appendChild(f),this.hasLogo=!0}this.updateActiveButton(),my.setStyleOnHover("#"+n+" .modebar-btn",".active",".icon path","fill: "+i.activecolor,"fill: "+i.color,this.element)};gl.updateButtons=function(e){var r=this;this.buttons=e,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(t){var a=r.createGroup();t.forEach(function(n){var i=n.name;if(!i)throw new Error("must provide button 'name' in button config");if(r.buttonsNames.indexOf(i)!==-1)throw new Error("button name '"+i+"' is taken");r.buttonsNames.push(i);var o=r.createButton(n);r.buttonElements.push(o),a.appendChild(o)}),r.element.appendChild(a)})};gl.createGroup=function(){var e=document.createElement("div");e.className="modebar-group";var r=this.graphInfo._fullLayout.modebar;return e.style.backgroundColor=r.bgcolor,e};gl.createButton=function(e){var r=this,t=document.createElement("button");t.setAttribute("type","button"),t.setAttribute("rel","tooltip"),t.className="modebar-btn";var a=e.title;a===void 0?a=e.name:typeof a=="function"&&(a=a(this.graphInfo)),(a||a===0)&&(t.setAttribute("data-title",a),t.setAttribute("aria-label",a)),e.attr!==void 0&&t.setAttribute("data-attr",e.attr);var n=e.val;n!==void 0&&(typeof n=="function"&&(n=n(this.graphInfo)),t.setAttribute("data-val",n));var i=e.click;if(typeof i!="function")throw new Error("must provide button 'click' function in button config");t.addEventListener("click",function(l){e.click(r.graphInfo,l),r.updateActiveButton(l.currentTarget)}),t.setAttribute("data-toggle",e.toggle||!1),e.toggle&&F7.select(t).classed("active",!0);var o=e.icon;return typeof o=="function"?t.appendChild(o()):t.appendChild(this.createIcon(o||EB.question)),t.setAttribute("data-gravity",e.gravity||"n"),t};gl.createIcon=function(e){var r=B6e(e.height)?Number(e.height):e.ascent-e.descent,t="http://www.w3.org/2000/svg",a;if(e.path){a=document.createElementNS(t,"svg"),a.setAttribute("viewBox",[0,0,e.width,r].join(" ")),a.setAttribute("class","icon");var n=document.createElementNS(t,"path");n.setAttribute("d",e.path),e.transform?n.setAttribute("transform",e.transform):e.ascent!==void 0&&n.setAttribute("transform","matrix(1 0 0 -1 0 "+e.ascent+")"),a.appendChild(n)}if(e.svg){var i=H6e.parseFromString(e.svg,"application/xml");a=i.childNodes[0]}return a.setAttribute("height","1em"),a.setAttribute("width","1em"),a};gl.updateActiveButton=function(e){var r=this.graphInfo._fullLayout,t=e!==void 0?e.getAttribute("data-attr"):null;this.buttonElements.forEach(function(a){var n=a.getAttribute("data-val")||!0,i=a.getAttribute("data-attr"),o=a.getAttribute("data-toggle")==="true",l=F7.select(a),s=function(c,v){var d=r.modebar,p=c.querySelector(".icon path");p&&(v||c.matches(":hover")?p.style.fill=d.activecolor:p.style.fill=d.color)};if(o){if(i===t){var u=!l.classed("active");l.classed("active",u),s(a,u)}}else{var f=i===null?i:my.nestedProperty(r,i).get();l.classed("active",f===n),s(a,f===n)}})};gl.hasButtons=function(e){var r=this.buttons;if(!r||e.length!==r.length)return!1;for(var t=0;t{"use strict";var Y6e=Aa(),zB=ri(),z7=Tr(),V6e=Ro().isUnifiedHover,j6e=FB(),yy=C7(),W6e=D7().DRAW_MODES,X6e=ke().extendDeep;NB.exports=function(r){var t=r._fullLayout,a=r._context,n=t._modeBar;if(!a.displayModeBar&&!a.watermark){n&&(n.destroy(),delete t._modeBar);return}if(!Array.isArray(a.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(a.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var i=a.modeBarButtons,o;Array.isArray(i)&&i.length?o=e7e(i):!a.displayModeBar&&a.watermark?o=[]:o=Z6e(r),n?n.update(r,o):t._modeBar=j6e(r,o)};function Z6e(e){var r=e._fullLayout,t=e._fullData,a=e._context;function n(G,V){if(typeof V=="string"){if(V.toLowerCase()===G.toLowerCase())return!0}else{var W=V.name,j=V._cat||V.name;if(W===G||j===G.toLowerCase())return!0}return!1}var i=r.modebar.add;typeof i=="string"&&(i=[i]);var o=r.modebar.remove;typeof o=="string"&&(o=[o]);var l=a.modeBarButtonsToAdd.concat(i.filter(function(G){for(var V=0;V1?(C=["toggleHover"],E=["resetViews"]):c?(q=["zoomInGeo","zoomOutGeo"],C=["hoverClosestGeo"],E=["resetGeo"]):f?(C=["hoverClosest3d"],E=["resetCameraDefault3d","resetCameraLastSave3d"]):y?(q=["zoomInMap","zoomOutMap"],C=["toggleHover"],E=["resetViewMap"]):v?C=["hoverClosestPie"]:A?(C=["hoverClosestCartesian","hoverCompareCartesian"],E=["resetViewSankey"]):C=["toggleHover"],u&&C.push("toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"),(K6e(t)||x)&&(C=[]),u&&!w&&(q=["zoomIn2d","zoomOut2d","autoScale2d"],E[0]!=="resetViews"&&(E=["resetScale2d"])),f?P=["zoom3d","pan3d","orbitRotation","tableRotation"]:u&&!w||p?P=["zoom2d","pan2d"]:y||c?P=["pan2d"]:m&&(P=["zoom2d"]),J6e(t)&&P.push("select2d","lasso2d");var R=[],N=function(G){R.indexOf(G)===-1&&C.indexOf(G)!==-1&&R.push(G)};if(Array.isArray(l)){for(var I=[],O=0;O{"use strict";BB.exports={moduleType:"component",name:"modebar",layoutAttributes:(R7(),ze(P7)).default,supplyLayoutDefaults:DB(),manage:IB()}});var I7=z((ZZe,OB)=>{"use strict";var r7e=(on(),ze(nn)).FROM_BL;OB.exports=function(r,t,a){a===void 0&&(a=r7e[r.constraintoward||"center"]);var n=[r.r2l(r.range[0]),r.r2l(r.range[1])],i=n[0]+(n[1]-n[0])*a;r.range=r._input.range=[r.l2r(i+(n[0]-i)*t),r.l2r(i+(n[1]-i)*t)],r.setScale()}});var bf=z(ad=>{"use strict";var gf=ke(),B7=Bh(),zo=Aa().id2name,t7e=Gi(),HB=I7(),a7e=i0(),n7e=(jt(),ze(Zt)).ALMOST_EQUAL,i7e=(on(),ze(nn)).FROM_BL;ad.handleDefaults=function(e,r,t){var a=t.axIds,n=t.axHasImage,i=r._axisConstraintGroups=[],o=r._axisMatchGroups=[],l,s,u,f,c,v,d,p;for(l=0;li?t.slice(i):a.slice(n))+o}function l7e(e,r){for(var t=r._size,a=t.h/t.w,n={},i=Object.keys(e),o=0;on7e*p&&!A)){for(i=0;iR&&WE&&(E=W);var J=(E-C)/(2*P);c/=J,C=s.l2r(C),E=s.l2r(E),s.range=s._input.range=k{"use strict";var by=Pr(),Cn=Tr(),Ti=ma(),Xi=ke(),U7=Fa(),G7=Jm(),nd=qr(),_0=Jr(),VB=n0(),$B=N7(),id=Yr(),$l=(on(),ze(nn)),JB=bf(),s7e=JB.enforce,u7e=JB.clean,jB=Bh().doAutoRange,KB="start",f7e="middle",QB="end",c7e=(Pa(),ze(Ea)).zindexSeparator;Ha.layoutStyles=function(e){return Xi.syncOrAsync([Ti.doAutoMargin,h7e],e)};function v7e(e,r,t){for(var a=0;a=e[1]||n[1]<=e[0])&&i[0]r[0])return!0}return!1}function h7e(e){var r=e._fullLayout,t=r._size,a=t.p,n=id.list(e,"",!0),i,o,l,s,u,f;if(r._paperdiv.style({width:e._context.responsive&&r.autosize&&!e._context._hasZeroWidth&&!e.layout.width?"100%":r.width+"px",height:e._context.responsive&&r.autosize&&!e._context._hasZeroHeight&&!e.layout.height?"100%":r.height+"px"}).selectAll(".main-svg").call(_0.setSize,r.width,r.height),e._context.setBackground(e,r.paper_bgcolor),Ha.drawMainTitle(e),$B.manage(e),!r._has("cartesian"))return Ti.previousPromises(e);function c(oe,be,Re){var ye=oe._lw/2;if(oe._id.charAt(0)==="x"){if(be){if(Re==="top")return be._offset-a-ye}else return t.t+t.h*(1-(oe.position||0))+ye%1;return be._offset+be._length+a+ye}if(be){if(Re==="right")return be._offset+be._length+a+ye}else return t.l+t.w*(oe.position||0)+ye%1;return be._offset-a-ye}for(i=0;i0){y7e(e,i,u,s),l.attr({x:o,y:i,"text-anchor":a,dy:ZB(r.yanchor)}).call(U7.positionText,o,i);var f=(r.text.match(U7.BR_TAG_ALL)||[]).length;if(f){var c=$l.LINE_SPACING*f+$l.MID_SHIFT;r.y===0&&(c=-c),l.selectAll(".line").each(function(){var m=+this.getAttribute("dy").slice(0,-2)-c+"em";this.setAttribute("dy",m)})}var v=by.select(e).selectAll(".gtitle-subtitle");if(v.node()){var d=l.node().getBBox(),p=d.y+d.height,y=p+VB.SUBTITLE_PADDING_EM*r.subtitle.font.size;v.attr({x:o,y,"text-anchor":a,dy:ZB(r.yanchor)}).call(U7.positionText,o,y)}}}};function d7e(e,r,t,a,n){var i=r.yref==="paper"?e._fullLayout._size.h:e._fullLayout.height,o=Xi.isTopAnchor(r)?a:a-n,l=t==="b"?i-o:o;return Xi.isTopAnchor(r)&&t==="t"||Xi.isBottomAnchor(r)&&t==="b"?!1:l.5?"t":"b",o=e._fullLayout.margin[i],l=0;return r.yref==="paper"?l=t+r.pad.t+r.pad.b:r.yref==="container"&&(l=p7e(i,a,n,e._fullLayout.height,t)+r.pad.t+r.pad.b),l>o?l:0}function y7e(e,r,t,a){var n="title.automargin",i=e._fullLayout.title,o=i.y>.5?"t":"b",l={x:i.x,y:i.y,t:0,b:0},s={};i.yref==="paper"&&d7e(e,i,o,r,a)?l[o]=t:i.yref==="container"&&(s[o]=t,e._fullLayout._reservedMargin[n]=s),Ti.allowAutoMargin(e,n),Ti.autoMargin(e,n,l)}function g7e(e,r){var t=e.title,a=e._size,n=0;return r===KB?n=t.pad.l:r===QB&&(n=-t.pad.r),t.xref==="paper"?a.l+a.w*t.x+n:e.width*t.x+n}function b7e(e,r){var t=e.title,a=e._size,n=0;return r==="0em"||!r?n=-t.pad.b:r===$l.CAP_SHIFT+"em"&&(n=t.pad.t),t.y==="auto"?a.t/2:t.yref==="paper"?a.t+a.h-a.h*t.y+n:e.height-e.height*t.y+n}function ZB(e){return e==="top"?$l.CAP_SHIFT+.3+"em":e==="bottom"?"-0.3em":$l.MID_SHIFT+"em"}function x7e(e){var r=e.title,t=f7e;return Xi.isRightAnchor(r)?t=QB:Xi.isLeftAnchor(r)&&(t=KB),t}function _7e(e){var r=e.title,t="0em";return Xi.isTopAnchor(r)?t=$l.CAP_SHIFT+"em":Xi.isMiddleAnchor(r)&&(t=$l.MID_SHIFT+"em"),t}Ha.doTraceStyle=function(e){var r=e.calcdata,t=[],a;for(a=0;a{"use strict";var w7e=Us().readPaths,A7e=sy(),eO=Es().clearOutlineControllers,Y7=qr(),rO=Jr(),T7e=Ct().arrayEditor,tO=Vs(),M7e=tO.getPathString;nO.exports={draw:_y,drawOne:aO,activateLastSelection:q7e};function _y(e){var r=e._fullLayout;eO(e),r._selectionLayer.selectAll("path").remove();for(var t in r._plots){var a=r._plots[t].selectionLayer;a&&a.selectAll("path").remove()}for(var n=0;n=0;m--){var b=o.append("path").attr(s).style("opacity",m?.1:u).call(Y7.stroke,c).call(Y7.fill,f).call(rO.dashLine,m?"solid":d,m?4+v:v);if(k7e(b,e,a),p){var A=T7e(e.layout,"selections",a);b.style({cursor:"move"});var w={element:b.node(),plotinfo:n,gd:e,editHelpers:A,isActiveSelection:!0},x=w7e(l,e);A7e(x,b,w)}else b.style("pointer-events",m?"all":"none");y[m]=b}var _=y[0],k=y[1];k.node().addEventListener("click",function(){return S7e(e,_)})}}function k7e(e,r,t){var a=t.xref+t.yref;rO.setClipUrl(e,"clip"+r._fullLayout._uid+a,r)}function S7e(e,r){if(wy(e)){var t=r.node(),a=+t.getAttribute("data-index");if(a>=0){if(a===e._fullLayout._activeSelectionIndex){V7(e);return}e._fullLayout._activeSelectionIndex=a,e._fullLayout._deactivateSelection=V7,_y(e)}}}function q7e(e){if(wy(e)){var r=e._fullLayout.selections.length-1;e._fullLayout._activeSelectionIndex=r,e._fullLayout._deactivateSelection=V7,_y(e)}}function V7(e){if(wy(e)){var r=e._fullLayout._activeSelectionIndex;r>=0&&(eO(e),delete e._fullLayout._activeSelectionIndex,_y(e))}}});var oO=z((QZe,iO)=>{function L7e(){var e,r=0,t=!1;function a(n,i){return e.list.push({type:n,data:i?JSON.parse(JSON.stringify(i)):void 0}),e}return e={list:[],segmentId:function(){return r++},checkIntersection:function(n,i){return a("check",{seg1:n,seg2:i})},segmentChop:function(n,i){return a("div_seg",{seg:n,pt:i}),a("chop",{seg:n,pt:i})},statusRemove:function(n){return a("pop_seg",{seg:n})},segmentUpdate:function(n){return a("seg_update",{seg:n})},segmentNew:function(n,i){return a("new_seg",{seg:n,primary:i})},segmentRemove:function(n){return a("rem_seg",{seg:n})},tempStatus:function(n,i,o){return a("temp_status",{seg:n,above:i,below:o})},rewind:function(n){return a("rewind",{seg:n})},status:function(n,i,o){return a("status",{seg:n,above:i,below:o})},vert:function(n){return n===t?e:(t=n,a("vert",{x:n}))},log:function(n){return typeof n!="string"&&(n=JSON.stringify(n,!1," ")),a("log",{txt:n})},reset:function(){return a("reset")},selected:function(n){return a("selected",{segs:n})},chainStart:function(n){return a("chain_start",{seg:n})},chainRemoveHead:function(n,i){return a("chain_rem_head",{index:n,pt:i})},chainRemoveTail:function(n,i){return a("chain_rem_tail",{index:n,pt:i})},chainNew:function(n,i){return a("chain_new",{pt1:n,pt2:i})},chainMatch:function(n){return a("chain_match",{index:n})},chainClose:function(n){return a("chain_close",{index:n})},chainAddHead:function(n,i){return a("chain_add_head",{index:n,pt:i})},chainAddTail:function(n,i){return a("chain_add_tail",{index:n,pt:i})},chainConnect:function(n,i){return a("chain_con",{index1:n,index2:i})},chainReverse:function(n){return a("chain_rev",{index:n})},chainJoin:function(n,i){return a("chain_join",{index1:n,index2:i})},done:function(){return a("done")}},e}iO.exports=L7e});var sO=z((e$e,lO)=>{function C7e(e){typeof e!="number"&&(e=1e-10);var r={epsilon:function(t){return typeof t=="number"&&(e=t),e},pointAboveOrOnLine:function(t,a,n){var i=a[0],o=a[1],l=n[0],s=n[1],u=t[0],f=t[1];return(l-i)*(f-o)-(s-o)*(u-i)>=-e},pointBetween:function(t,a,n){var i=t[1]-a[1],o=n[0]-a[0],l=t[0]-a[0],s=n[1]-a[1],u=l*o+i*s;if(u-e)},pointsSameX:function(t,a){return Math.abs(t[0]-a[0])e!=l-i>e&&(o-f)*(i-c)/(l-c)+f-n>e&&(s=!s),o=f,l=c}return s}};return r}lO.exports=C7e});var fO=z((r$e,uO)=>{var D7e={create:function(){var e={root:{root:!0,next:null},exists:function(r){return!(r===null||r===e.root)},isEmpty:function(){return e.root.next===null},getHead:function(){return e.root.next},insertBefore:function(r,t){for(var a=e.root,n=e.root.next;n!==null;){if(t(n)){r.prev=n.prev,r.next=n,n.prev.next=r,n.prev=r;return}a=n,n=n.next}a.next=r,r.prev=a,r.next=null},findTransition:function(r){for(var t=e.root,a=e.root.next;a!==null&&!r(a);)t=a,a=a.next;return{before:t===e.root?null:t,after:a,insert:function(n){return n.prev=t,n.next=a,t.next=n,a!==null&&(a.prev=n),n}}}};return e},node:function(e){return e.prev=null,e.next=null,e.remove=function(){e.prev.next=e.next,e.next&&(e.next.prev=e.prev),e.prev=null,e.next=null},e}};uO.exports=D7e});var vO=z((t$e,cO)=>{var od=fO();function E7e(e,r,t){function a(p,y){return{id:t?t.segmentId():-1,start:p,end:y,myFill:{above:null,below:null},otherFill:null}}function n(p,y,m){return{id:t?t.segmentId():-1,start:p,end:y,myFill:{above:m.myFill.above,below:m.myFill.below},otherFill:null}}var i=od.create();function o(p,y,m,b,A,w){var x=r.pointsCompare(y,A);return x!==0?x:r.pointsSame(m,w)?0:p!==b?p?1:-1:r.pointAboveOrOnLine(m,b?A:w,b?w:A)?1:-1}function l(p,y){i.insertBefore(p,function(m){var b=o(p.isStart,p.pt,y,m.isStart,m.pt,m.other.pt);return b<0})}function s(p,y){var m=od.node({isStart:!0,pt:p.start,seg:p,primary:y,other:null,status:null});return l(m,p.end),m}function u(p,y,m){var b=od.node({isStart:!1,pt:y.end,seg:y,primary:m,other:p,status:null});p.other=b,l(b,p.pt)}function f(p,y){var m=s(p,y);return u(m,p,y),m}function c(p,y){t&&t.segmentChop(p.seg,y),p.other.remove(),p.seg.end=y,p.other.pt=y,l(p.other,p.pt)}function v(p,y){var m=n(y,p.seg.end,p.seg);return c(p,y),f(m,p.primary)}function d(p,y){var m=od.create();function b(O,U){var Y=O.seg.start,G=O.seg.end,V=U.seg.start,W=U.seg.end;return r.pointsCollinear(Y,V,W)?r.pointsCollinear(G,V,W)||r.pointAboveOrOnLine(G,V,W)?1:-1:r.pointAboveOrOnLine(Y,V,W)?1:-1}function A(O){return m.findTransition(function(U){var Y=b(O,U.ev);return Y>0})}function w(O,U){var Y=O.seg,G=U.seg,V=Y.start,W=Y.end,j=G.start,J=G.end;t&&t.checkIntersection(Y,G);var te=r.linesIntersect(V,W,j,J);if(te===!1){if(!r.pointsCollinear(V,W,j)||r.pointsSame(V,J)||r.pointsSame(W,j))return!1;var ae=r.pointsSame(V,j),se=r.pointsSame(W,J);if(ae&&se)return U;var $=!ae&&r.pointBetween(V,j,J),fe=!se&&r.pointBetween(W,j,J);if(ae)return fe?v(U,W):v(O,J),U;$&&(se||(fe?v(U,W):v(O,J)),v(U,V))}else te.alongA===0&&(te.alongB===-1?v(O,j):te.alongB===0?v(O,te.pt):te.alongB===1&&v(O,J)),te.alongB===0&&(te.alongA===-1?v(U,V):te.alongA===0?v(U,te.pt):te.alongA===1&&v(U,W));return!1}for(var x=[];!i.isEmpty();){var _=i.getHead();if(t&&t.vert(_.pt[0]),_.isStart){let O=function(){if(T){var U=w(_,T);if(U)return U}return q?w(_,q):!1};var I=O;t&&t.segmentNew(_.seg,_.primary);var k=A(_),T=k.before?k.before.ev:null,q=k.after?k.after.ev:null;t&&t.tempStatus(_.seg,T?T.seg:!1,q?q.seg:!1);var C=O();if(C){if(e){var E;_.seg.myFill.below===null?E=!0:E=_.seg.myFill.above!==_.seg.myFill.below,E&&(C.seg.myFill.above=!C.seg.myFill.above)}else C.seg.otherFill=_.seg.myFill;t&&t.segmentUpdate(C.seg),_.other.remove(),_.remove()}if(i.getHead()!==_){t&&t.rewind(_.seg);continue}if(e){var E;_.seg.myFill.below===null?E=!0:E=_.seg.myFill.above!==_.seg.myFill.below,q?_.seg.myFill.below=q.seg.myFill.above:_.seg.myFill.below=p,E?_.seg.myFill.above=!_.seg.myFill.below:_.seg.myFill.above=_.seg.myFill.below}else if(_.seg.otherFill===null){var P;q?_.primary===q.primary?P=q.seg.otherFill.above:P=q.seg.myFill.above:P=_.primary?y:p,_.seg.otherFill={above:P,below:P}}t&&t.status(_.seg,T?T.seg:!1,q?q.seg:!1),_.other.status=k.insert(od.node({ev:_}))}else{var R=_.status;if(R===null)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(m.exists(R.prev)&&m.exists(R.next)&&w(R.prev.ev,R.next.ev),t&&t.statusRemove(R.ev.seg),R.remove(),!_.primary){var N=_.seg.myFill;_.seg.myFill=_.seg.otherFill,_.seg.otherFill=N}x.push(_.seg)}i.getHead().remove()}return t&&t.done(),x}return e?{addRegion:function(p){for(var y,m=p[p.length-1],b=0;b{function P7e(e,r,t){var a=[],n=[];return e.forEach(function(i){var o=i.start,l=i.end;if(r.pointsSame(o,l)){console.warn("PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large");return}t&&t.chainStart(i);var s={index:0,matches_head:!1,matches_pt1:!1},u={index:0,matches_head:!1,matches_pt1:!1},f=s;function c(I,O,U){return f.index=I,f.matches_head=O,f.matches_pt1=U,f===s?(f=u,!1):(f=null,!0)}for(var v=0;v{function ld(e,r,t){var a=[];return e.forEach(function(n){var i=(n.myFill.above?8:0)+(n.myFill.below?4:0)+(n.otherFill&&n.otherFill.above?2:0)+(n.otherFill&&n.otherFill.below?1:0);r[i]!==0&&a.push({id:t?t.segmentId():-1,start:n.start,end:n.end,myFill:{above:r[i]===1,below:r[i]===2},otherFill:null})}),t&&t.selected(a),a}var R7e={union:function(e,r){return ld(e,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],r)},intersect:function(e,r){return ld(e,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],r)},difference:function(e,r){return ld(e,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],r)},differenceRev:function(e,r){return ld(e,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],r)},xor:function(e,r){return ld(e,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],r)}};pO.exports=R7e});var gO=z((i$e,yO)=>{var F7e={toPolygon:function(e,r){function t(i){if(i.length<=0)return e.segments({inverted:!1,regions:[]});function o(u){var f=u.slice(0,u.length-1);return e.segments({inverted:!1,regions:[f]})}for(var l=o(i[0]),s=1;s{var z7e=oO(),N7e=sO(),bO=vO(),I7e=dO(),sd=mO(),xO=gO(),Zi=!1,ud=N7e(),ai;ai={buildLog:function(e){return e===!0?Zi=z7e():e===!1&&(Zi=!1),Zi===!1?!1:Zi.list},epsilon:function(e){return ud.epsilon(e)},segments:function(e){var r=bO(!0,ud,Zi);return e.regions.forEach(r.addRegion),{segments:r.calculate(e.inverted),inverted:e.inverted}},combine:function(e,r){var t=bO(!1,ud,Zi);return{combined:t.calculate(e.segments,e.inverted,r.segments,r.inverted),inverted1:e.inverted,inverted2:r.inverted}},selectUnion:function(e){return{segments:sd.union(e.combined,Zi),inverted:e.inverted1||e.inverted2}},selectIntersect:function(e){return{segments:sd.intersect(e.combined,Zi),inverted:e.inverted1&&e.inverted2}},selectDifference:function(e){return{segments:sd.difference(e.combined,Zi),inverted:e.inverted1&&!e.inverted2}},selectDifferenceRev:function(e){return{segments:sd.differenceRev(e.combined,Zi),inverted:!e.inverted1&&e.inverted2}},selectXor:function(e){return{segments:sd.xor(e.combined,Zi),inverted:e.inverted1!==e.inverted2}},polygon:function(e){return{regions:I7e(e.segments,ud,Zi),inverted:e.inverted}},polygonFromGeoJSON:function(e){return xO.toPolygon(ai,e)},polygonToGeoJSON:function(e){return xO.fromPolygon(ai,ud,e)},union:function(e,r){return fd(e,r,ai.selectUnion)},intersect:function(e,r){return fd(e,r,ai.selectIntersect)},difference:function(e,r){return fd(e,r,ai.selectDifference)},differenceRev:function(e,r){return fd(e,r,ai.selectDifferenceRev)},xor:function(e,r){return fd(e,r,ai.selectXor)}};function fd(e,r,t){var a=ai.segments(e),n=ai.segments(r),i=ai.combine(a,n),o=t(i);return ai.polygon(o)}typeof window=="object"&&(window.PolyBool=ai);_O.exports=ai});var TO=z((l$e,AO)=>{AO.exports=function(r,t,a,n){var i=r[0],o=r[1],l=!1;a===void 0&&(a=0),n===void 0&&(n=t.length);for(var s=n-a,u=0,f=s-1;uo!=p>o&&i<(d-c)*(o-v)/(p-v)+c;y&&(l=!l)}return l}});var X7=z((s$e,MO)=>{"use strict";var W7=Tp().dot,Ay=(jt(),ze(Zt)).BADNUM,Ty=MO.exports={};Ty.tester=function(r){var t=r.slice(),a=t[0][0],n=a,i=t[0][1],o=i,l;for((t[t.length-1][0]!==t[0][0]||t[t.length-1][1]!==t[0][1])&&t.push(t[0]),l=1;ln||b===Ay||bo||y&&u(p))}function c(p,y){var m=p[0],b=p[1];if(m===Ay||mn||b===Ay||bo)return!1;var A=t.length,w=t[0][0],x=t[0][1],_=0,k,T,q,C,E;for(k=1;kMath.max(T,w)||b>Math.max(q,x)))if(bl||Math.abs(W7(c,u))>n)return!0;return!1};Ty.filter=function(r,t){var a=[r[0]],n=0,i=0;function o(s){r.push(s);var u=a.length,f=n;a.splice(i+1);for(var c=f+1;c1){var l=r.pop();o(l)}return{addPt:o,raw:r,filtered:a}}});var kO={};qt(kO,{BENDPX:()=>B7e,MINSELECT:()=>O7e,SELECTDELAY:()=>H7e,SELECTID:()=>U7e});var B7e,O7e,H7e,U7e,SO=St(()=>{"use strict";B7e=1.5,O7e=12,H7e=100,U7e="-select"});var ZO=z((u$e,XO)=>{"use strict";var qO=wO(),G7e=TO(),hd=Tr(),Y7e=Jr().dashStyle,cd=qr(),V7e=Un(),j7e=Ro().makeEventData,gd=df(),W7e=gd.freeMode,X7e=gd.rectMode,dd=gd.drawMode,K7=gd.openMode,Q7=gd.selectMode,LO=Vs(),CO=(ed(),ze(Qh)),FO=sy(),zO=Es().clearOutline,NO=Us(),Z7=NO.handleEllipse,Z7e=NO.readPaths,$7e=iy().newShapes,J7e=x7(),K7e=j7().activateLastSelection,ky=ke(),Q7e=ky.sorterAsc,IO=X7(),vd=zp(),$i=Aa().getFromId,ewe=Jm(),rwe=xy().redrawReglTraces,Sy=(SO(),ze(kO)),bl=Sy.MINSELECT,twe=IO.filter,ew=IO.tester,rw=ry(),DO=rw.p2r,awe=rw.axValue,nwe=rw.getTransform;function tw(e){return e.subplot!==void 0}function iwe(e,r,t,a,n){var i=!tw(a),o=W7e(n),l=X7e(n),s=K7(n),u=dd(n),f=Q7(n),c=n==="drawline",v=n==="drawcircle",d=c||v,p=a.gd,y=p._fullLayout,m=f&&y.newselection.mode==="immediate"&&i,b=y._zoomlayer,A=a.element.getBoundingClientRect(),w=a.plotinfo,x=nwe(w),_=r-A.left,k=t-A.top;y._calcInverseTransform(p);var T=ky.apply3DTransform(y._invTransform)(_,k);_=T[0],k=T[1];var q=y._invScaleX,C=y._invScaleY,E=_,P=k,R="M"+_+","+k,N=a.xaxes[0],I=a.yaxes[0],O=N._length,U=I._length,Y=e.altKey&&!(dd(n)&&s),G,V,W,j,J,te,ae;OO(e,p,a),o&&(G=twe([[_,k]],Sy.BENDPX));var se=b.selectAll("path.select-outline-"+w.id).data([1]),$=u?y.newshape:y.newselection;u&&(a.hasText=$.label.text||$.label.texttemplate);var fe=u&&!s?$.fillcolor:"rgba(0,0,0,0)",ie=$.line.color||(i?cd.contrast(p._fullLayout.plot_bgcolor):"#7f7f7f");se.enter().append("path").attr("class","select-outline select-outline-"+w.id).style({opacity:u?$.opacity/2:1,"stroke-dasharray":Y7e($.line.dash,$.line.width),"stroke-width":$.line.width+"px","shape-rendering":"crispEdges"}).call(cd.stroke,ie).call(cd.fill,fe).attr("fill-rule","evenodd").classed("cursor-move",!!u).attr("transform",x).attr("d",R+"Z");var ue=b.append("path").attr("class","zoombox-corners").style({fill:cd.background,stroke:cd.defaultLine,"stroke-width":1}).attr("transform",x).attr("d","M0,0Z");if(u&&a.hasText){var ce=b.select(".label-temp");ce.empty()&&(ce=b.append("g").classed("label-temp",!0).classed("select-outline",!0).style({opacity:.8}))}var oe=y._uid+Sy.SELECTID,be=[],Re=qy(p,a.xaxes,a.yaxes,a.subplot);m&&!e.shiftKey&&(a._clearSubplotSelections=function(){if(i){var Ce=N._id,Me=I._id;VO(p,Ce,Me,Re);for(var Le=(p.layout||{}).selections||[],De=[],Ie=!1,qe=0;qe=0){p._fullLayout._deactivateShape(p);return}if(!u){var Le=y.clickmode;vd.done(oe).then(function(){if(vd.clear(oe),Ce===2){for(se.remove(),J=0;J-1&&BO(Me,p,a.xaxes,a.yaxes,a.subplot,a,se),Le==="event"&&yd(p,void 0);V7e.click(p,Me,w.id)}).catch(ky.error)}},a.doneFn=function(){ue.remove(),vd.done(oe).then(function(){vd.clear(oe),!m&&j&&a.selectionDefs&&(j.subtract=Y,a.selectionDefs.push(j),a.mergedPolygons.length=0,[].push.apply(a.mergedPolygons,W)),(m||u)&&pd(a,m),a.doneFnCompleted&&a.doneFnCompleted(be),f&&yd(p,ae)}).catch(ky.error)}}function BO(e,r,t,a,n,i,o){var l=r._hoverdata,s=r._fullLayout,u=s.clickmode,f=u.indexOf("event")>-1,c=[],v,d,p,y,m,b,A,w,x,_;if(fwe(l)){OO(e,r,i),v=qy(r,t,a,n);var k=cwe(l,v),T=k.pointNumbers.length>0;if(T?vwe(v,k):hwe(v)&&(A=PO(k))){for(o&&o.remove(),_=0;_=0}function uwe(e){return e._fullLayout._activeSelectionIndex>=0}function pd(e,r){var t=e.dragmode,a=e.plotinfo,n=e.gd;swe(n)&&n._fullLayout._deactivateShape(n),uwe(n)&&n._fullLayout._deactivateSelection(n);var i=n._fullLayout,o=i._zoomlayer,l=dd(t),s=Q7(t);if(l||s){var u=o.selectAll(".select-outline-"+a.id);if(u&&n._fullLayout._outlining){var f;l&&(f=$7e(u,e)),f&&hd.call("_guiRelayout",n,{shapes:f});var c;s&&!tw(e)&&(c=J7e(u,e)),c&&(n._fullLayout._noEmitSelectedAtStart=!0,hd.call("_guiRelayout",n,{selections:c}).then(function(){r&&K7e(n)})),n._fullLayout._outlining=!1}}a.selection={},a.selection.selectionDefs=e.selectionDefs=[],a.selection.mergedPolygons=e.mergedPolygons=[]}function EO(e){return e._id}function qy(e,r,t,a){if(!e.calcdata)return[];var n=[],i=r.map(EO),o=t.map(EO),l,s,u;for(u=0;u0,i=n?a[0]:t;return r.selectedpoints?r.selectedpoints.indexOf(i)>-1:!1}function vwe(e,r){var t=[],a,n,i,o;for(o=0;o0&&t.push(a);if(t.length===1&&(i=t[0]===r.searchInfo,i&&(n=r.searchInfo.cd[0].trace,n.selectedpoints.length===r.pointNumbers.length))){for(o=0;o1||(r+=a.selectedpoints.length,r>1)))return!1;return r===1}function md(e,r,t){var a,n;for(a=0;a-1&&r;if(!o&&r){var Ce=RO(e,!0);if(Ce.length){var Me=Ce[0].xref,Le=Ce[0].yref;if(Me&&Le){var De=jO(Ce),Ie=WO([$i(e,Me,"x"),$i(e,Le,"y")]);Ie(be,De)}}e._fullLayout._noEmitSelectedAtStart?e._fullLayout._noEmitSelectedAtStart=!1:ye&&yd(e,be),v._reselect=!1}if(!o&&v._deselect){var qe=v._deselect;l=qe.xref,s=qe.yref,mwe(l,s,f)||VO(e,l,s,a),ye&&(be.points.length?yd(e,be):iw(e)),v._deselect=!1}return{eventData:be,selectionTesters:t}}function pwe(e){var r=e.calcdata;if(r)for(var t=0;t{"use strict";$O.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]});var bd={};qt(bd,{axisRefDescription:()=>_we});function _we(e,r,t){return[`If set to a ${e} axis id (e.g. *${e}* or *${e}2*),`,`the \`${e}\` position refers to a ${e} coordinate.`,`If set to *paper*, the \`${e}\` position refers to the distance from the`,`${r} of the plotting area in normalized coordinates where *0* (*1*) corresponds`,`to the ${r} (${t}). If set to a ${e} axis ID followed by *domain*`,"(separated by a space), the position behaves like for *paper*, but refers to the",`distance in fractions of the domain length from the ${r} of the domain of that`,`axis: e.g., *${e}2 domain* refers to the domain of the second ${e}`,`axis and a ${e} position of 0.5 refers to the point between the ${r}`,`and the ${t} of the domain of the second ${e} axis.`].join(" ")}var xd=St(()=>{"use strict"});var w0=z((v$e,QO)=>{"use strict";var JO=ow(),KO=Ca(),Ly=(Pa(),ze(Ea)),wwe=Ct().templatedArray,c$e=(xd(),ze(bd));QO.exports=wwe("annotation",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},text:{valType:"string",editType:"calc+arraydraw"},textangle:{valType:"angle",dflt:0,editType:"calc+arraydraw"},font:KO({editType:"calc+arraydraw",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},height:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},showarrow:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:JO.length,dflt:1,editType:"arraydraw"},startarrowhead:{valType:"integer",min:0,max:JO.length,dflt:1,editType:"arraydraw"},arrowside:{valType:"flaglist",flags:["end","start"],extras:["none"],dflt:"end",editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},startarrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},arrowwidth:{valType:"number",min:.1,editType:"calc+arraydraw"},standoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},startstandoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},ax:{valType:"any",editType:"calc+arraydraw"},ay:{valType:"any",editType:"calc+arraydraw"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",Ly.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",Ly.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",Ly.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},xshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},yref:{valType:"enumerated",values:["paper",Ly.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calc+arraydraw"},yshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:KO({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc"})});var _d={};qt(_d,{PTS_LINESONLY:()=>Awe,eventDataKeys:()=>Swe,maxScreensAway:()=>kwe,minTolerance:()=>Twe,toleranceGrowth:()=>Mwe});var Awe,Twe,Mwe,kwe,Swe,wd=St(()=>{"use strict";Awe=20,Twe=.2,Mwe=10,kwe=20,Swe=[]});var Cy=z((h$e,eH)=>{"use strict";eH.exports=function(r){return{valType:"color",editType:"style",anim:!0}}});var Ji=z((d$e,sH)=>{"use strict";var rH=Eo().axisHoverFormat,{hovertemplateAttrs:qwe,texttemplateAttrs:Lwe,templatefallbackAttrs:tH}=di(),aH=ol(),Cwe=Ca(),nH=Bi().dash,Dwe=Bi().pattern,Ewe=Jr(),Pwe=(wd(),ze(_d)),Ad=Mt().extendFlat,Rwe=Cy();function iH(e){return{valType:"any",dflt:0,editType:"calc"}}function oH(e){return{valType:"any",editType:"calc"}}function lH(e){return{valType:"enumerated",values:["start","middle","end"],dflt:"middle",editType:"calc"}}sH.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dx:{valType:"number",dflt:1,editType:"calc",anim:!0},y:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dy:{valType:"number",dflt:1,editType:"calc",anim:!0},xperiod:iH("x"),yperiod:iH("y"),xperiod0:oH("x0"),yperiod0:oH("y0"),xperiodalignment:lH("x"),yperiodalignment:lH("y"),xhoverformat:rH("x"),yhoverformat:rH("y"),offsetgroup:{valType:"string",dflt:"",editType:"calc"},alignmentgroup:{valType:"string",dflt:"",editType:"calc"},stackgroup:{valType:"string",dflt:"",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc"},groupnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},stackgaps:{valType:"enumerated",values:["infer zero","interpolate"],dflt:"infer zero",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},texttemplate:Lwe(),texttemplatefallback:tH({editType:"calc"}),hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"],editType:"calc"},hoveron:{valType:"flaglist",flags:["points","fills"],editType:"style"},hovertemplate:qwe({},{keys:Pwe.eventDataKeys}),hovertemplatefallback:tH(),line:{color:{valType:"color",editType:"style",anim:!0},width:{valType:"number",min:0,dflt:2,editType:"style",anim:!0},shape:{valType:"enumerated",values:["linear","spline","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},smoothing:{valType:"number",min:0,max:1.3,dflt:1,editType:"plot"},dash:Ad({},nH,{editType:"style"}),backoff:{valType:"number",min:0,dflt:"auto",arrayOk:!0,editType:"plot"},simplify:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},cliponaxis:{valType:"boolean",dflt:!0,editType:"plot"},fill:{valType:"enumerated",values:["none","tozeroy","tozerox","tonexty","tonextx","toself","tonext"],editType:"calc"},fillcolor:Rwe(!0),fillgradient:Ad({type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],dflt:"none",editType:"calc"},start:{valType:"number",editType:"calc"},stop:{valType:"number",editType:"calc"},colorscale:{valType:"colorscale",editType:"style"},editType:"calc"}),fillpattern:Dwe,marker:Ad({symbol:{valType:"enumerated",values:Ewe.symbolList,dflt:"circle",arrayOk:!0,editType:"style"},opacity:{valType:"number",min:0,max:1,arrayOk:!0,editType:"style",anim:!0},angle:{valType:"angle",dflt:0,arrayOk:!0,editType:"plot",anim:!1},angleref:{valType:"enumerated",values:["previous","up"],dflt:"up",editType:"plot",anim:!1},standoff:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"plot",anim:!0},size:{valType:"number",min:0,dflt:6,arrayOk:!0,editType:"calc",anim:!0},maxdisplayed:{valType:"number",min:0,dflt:0,editType:"plot"},sizeref:{valType:"number",dflt:1,editType:"calc"},sizemin:{valType:"number",min:0,dflt:0,editType:"calc"},sizemode:{valType:"enumerated",values:["diameter","area"],dflt:"diameter",editType:"calc"},line:Ad({width:{valType:"number",min:0,arrayOk:!0,editType:"style",anim:!0},dash:Ad({},nH,{arrayOk:!0}),editType:"calc"},aH("marker.line",{anim:!0})),gradient:{type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],arrayOk:!0,dflt:"none",editType:"calc"},color:{valType:"color",arrayOk:!0,editType:"calc"},editType:"calc"},editType:"calc"},aH("marker",{anim:!0})),selected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},unselected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"middle center",arrayOk:!0,editType:"calc"},textfont:Cwe({editType:"calc",colorEditType:"style",arrayOk:!0}),zorder:{valType:"integer",dflt:0,editType:"plot"}}});var lw=z((m$e,cH)=>{"use strict";var uH=w0(),fH=Ji().line,Fwe=Bi().dash,Dy=Mt().extendFlat,zwe=qo().overrideAll,Nwe=Ct().templatedArray,p$e=(xd(),ze(bd));cH.exports=zwe(Nwe("selection",{type:{valType:"enumerated",values:["rect","path"]},xref:Dy({},uH.xref,{}),yref:Dy({},uH.yref,{}),x0:{valType:"any"},x1:{valType:"any"},y0:{valType:"any"},y1:{valType:"any"},path:{valType:"string",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:.7,editType:"arraydraw"},line:{color:fH.color,width:Dy({},fH.width,{min:1,dflt:1}),dash:Dy({},Fwe,{dflt:"dot"})}}),"arraydraw","from-root")});var pH=z((y$e,dH)=>{"use strict";var vH=ke(),Ey=Yr(),Iwe=Po(),Bwe=lw(),hH=Vs();dH.exports=function(r,t){Iwe(r,t,{name:"selections",handleItemDefaults:Owe});for(var a=t.selections,n=0;n{"use strict";mH.exports=function(r,t,a){a("newselection.mode");var n=a("newselection.line.width");n&&(a("newselection.line.color"),a("newselection.line.dash")),a("activeselection.fillcolor"),a("activeselection.opacity")}});var Td=z((b$e,xH)=>{"use strict";var Hwe=Tr(),gH=ke(),bH=Aa();xH.exports=function(r){return function(a,n){var i=a[r];if(Array.isArray(i))for(var o=Hwe.subplotsRegistry.cartesian,l=o.idRegex,s=n._subplots,u=s.xaxis,f=s.yaxis,c=s.cartesian,v=n._has("cartesian"),d=0;d{"use strict";var _H=j7(),Md=ZO();wH.exports={moduleType:"component",name:"selections",layoutAttributes:lw(),supplyLayoutDefaults:pH(),supplyDrawNewSelectionDefaults:yH(),includeBasePlot:Td()("selections"),draw:_H.draw,drawOne:_H.drawOne,reselect:Md.reselect,prepSelect:Md.prepSelect,clearOutline:Md.clearOutline,clearSelectionsCache:Md.clearSelectionsCache,selectOnClick:Md.selectOnClick}});var UH=z((_$e,HH)=>{"use strict";var hw=Pr(),Ki=ke(),AH=Ki.numberFormat,Uwe=G6(),Py=Tr(),DH=Ki.strTranslate,Gwe=Fa(),uw=qr(),Ws=Jr(),Ywe=Un(),TH=Yr(),Vwe=Os(),jwe=Vi(),EH=df(),Ry=EH.selectingOrDrawing,Wwe=EH.freeMode,Xwe=(on(),ze(nn)).FROM_TL,Zwe=Jm(),$we=xy().redrawReglTraces,Jwe=ma(),fw=Aa().getFromId,Kwe=xl().prepSelect,Qwe=xl().clearOutline,e8e=xl().selectOnClick,sw=I7(),dw=(Pa(),ze(Ea)),MH=dw.MINDRAG,Gn=dw.MINZOOM,kH=!0;function r8e(e,r,t,a,n,i,o,l){var s=e._fullLayout._zoomlayer,u=o+l==="nsew",f=(o+l).length===1,c,v,d,p,y,m,b,A,w,x,_,k,T,q,C,E,P,R,N,I,O,U,Y;t+=r.yaxis._shift;function G(){if(c=r.xaxis,v=r.yaxis,w=c._length,x=v._length,b=c._offset,A=v._offset,d={},d[c._id]=c,p={},p[v._id]=v,o&&l)for(var me=r.overlays,Te=0;Te=0){Ue._fullLayout._deactivateShape(Ue);return}var $e=Ue._fullLayout.clickmode;if(vw(Ue),me===2&&!f&&er(),u)$e.indexOf("select")>-1&&e8e(Te,Ue,y,m,r.id,j),$e.indexOf("event")>-1&&Ywe.click(Ue,Te,r.id);else if(me===1&&f){var Oe=o?v:c,We=o==="s"||l==="w"?0:1,ar=Oe._name+".range["+We+"]",or=t8e(Oe,We),sr="left",Ee="middle";if(Oe.fixedrange)return;o?(Ee=o==="n"?"top":"bottom",Oe.side==="right"&&(sr="right")):l==="e"&&(sr="right"),Ue._context.showAxisRangeEntryBoxes&&hw.select(W).call(Gwe.makeEditable,{gd:Ue,immediate:!0,background:Ue._fullLayout.paper_bgcolor,text:String(or),fill:Oe.tickfont?Oe.tickfont.color:"#444",horizontalAlign:sr,verticalAlign:Ee}).on("edit",function(Ke){var Be=Oe.d2r(Ke);Be!==void 0&&Py.call("_guiRelayout",Ue,ar,Be)})}}jwe.init(j);var ae,se,$,fe,ie,ue,ce,oe,be,Re;function ye(me,Te,Ue){var $e=W.getBoundingClientRect();ae=Te-$e.left,se=Ue-$e.top,e._fullLayout._calcInverseTransform(e);var Oe=Ki.apply3DTransform(e._fullLayout._invTransform)(ae,se);ae=Oe[0],se=Oe[1],$={l:ae,r:ae,w:0,t:se,b:se,h:0},fe=e._hmpixcount?e._hmlumcount/e._hmpixcount:uw.luminosity(e._fullLayout.plot_bgcolor),ie="M0,0H"+w+"V"+x+"H0V0",ue=!1,ce="xy",Re=!1,oe=FH(s,fe,b,A,ie),be=zH(s,b,A)}function Ce(me,Te){if(e._transitioningWithDuration)return!1;var Ue=Math.max(0,Math.min(w,U*me+ae)),$e=Math.max(0,Math.min(x,Y*Te+se)),Oe=Math.abs(Ue-ae),We=Math.abs($e-se);$.l=Math.min(ae,Ue),$.r=Math.max(ae,Ue),$.t=Math.min(se,$e),$.b=Math.max(se,$e);function ar(){ce="",$.r=$.l,$.t=$.b,be.attr("d","M0,0Z")}if(_.isSubplotConstrained)Oe>Gn||We>Gn?(ce="xy",Oe/w>We/x?(We=Oe*x/w,se>$e?$.t=se-We:$.b=se+We):(Oe=We*w/x,ae>Ue?$.l=ae-Oe:$.r=ae+Oe),be.attr("d",Fy($))):ar();else if(k.isSubplotConstrained)if(Oe>Gn||We>Gn){ce="xy";var or=Math.min($.l/w,(x-$.b)/x),sr=Math.max($.r/w,(x-$.t)/x);$.l=or*w,$.r=sr*w,$.b=(1-or)*x,$.t=(1-sr)*x,be.attr("d",Fy($))}else ar();else!q||We0){var Ke;if(k.isSubplotConstrained||!T&&q.length===1){for(Ke=0;Ke1&&(ar.maxallowed!==void 0&&E===(ar.range[0]1&&(or.maxallowed!==void 0&&P===(or.range[0]=0?Math.min(e,.9):1/(1/Math.max(e,-.3)+3.222))}function n8e(e,r,t){return e?e==="nsew"?t?"":r==="pan"?"move":"crosshair":e.toLowerCase()+"-resize":"pointer"}function FH(e,r,t,a,n){return e.append("path").attr("class","zoombox").style({fill:r>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform",DH(t,a)).attr("d",n+"Z")}function zH(e,r,t){return e.append("path").attr("class","zoombox-corners").style({fill:uw.background,stroke:uw.defaultLine,"stroke-width":1,opacity:0}).attr("transform",DH(r,t)).attr("d","M0,0Z")}function NH(e,r,t,a,n,i){e.attr("d",a+"M"+t.l+","+t.t+"v"+t.h+"h"+t.w+"v-"+t.h+"h-"+t.w+"Z"),IH(e,r,n,i)}function IH(e,r,t,a){t||(e.transition().style("fill",a>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),r.transition().style("opacity",1).duration(200))}function vw(e){hw.select(e).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function BH(e){kH&&e.data&&e._context.showTips&&(Ki.notifier(Ki._(e,"Double-click to zoom back out"),"long",e),kH=!1)}function i8e(e,r){return"M"+(e.l-.5)+","+(r-Gn-.5)+"h-3v"+(2*Gn+1)+"h3ZM"+(e.r+.5)+","+(r-Gn-.5)+"h3v"+(2*Gn+1)+"h-3Z"}function o8e(e,r){return"M"+(r-Gn-.5)+","+(e.t-.5)+"v-3h"+(2*Gn+1)+"v3ZM"+(r-Gn-.5)+","+(e.b+.5)+"v3h"+(2*Gn+1)+"v-3Z"}function Fy(e){var r=Math.floor(Math.min(e.b-e.t,e.r-e.l,Gn)/2);return"M"+(e.l-3.5)+","+(e.t-.5+r)+"h3v"+-r+"h"+r+"v-3h-"+(r+3)+"ZM"+(e.r+3.5)+","+(e.t-.5+r)+"h-3v"+-r+"h"+-r+"v-3h"+(r+3)+"ZM"+(e.r+3.5)+","+(e.b+.5-r)+"h-3v"+r+"h"+-r+"v3h"+(r+3)+"ZM"+(e.l-3.5)+","+(e.b+.5-r)+"h3v"+r+"h"+r+"v3h-"+(r+3)+"Z"}function LH(e,r,t,a,n){for(var i=!1,o={},l={},s,u,f,c,v=(n||{}).xaHash,d=(n||{}).yaHash,p=0;p{"use strict";var l8e=Pr(),zy=Un(),s8e=Vi(),u8e=Os(),No=UH().makeDragBox,Ua=(Pa(),ze(Ea)).DRAGGERSIZE;Ny.initInteractions=function(r){var t=r._fullLayout;if(r._context.staticPlot){l8e.select(r).selectAll(".drag").remove();return}if(!(!t._has("cartesian")&&!t._has("splom"))){var a=Object.keys(t._plots||{}).sort(function(i,o){if((t._plots[i].mainplot&&!0)===(t._plots[o].mainplot&&!0)){var l=i.split("y"),s=o.split("y");return l[0]===s[0]?Number(l[1]||1)-Number(s[1]||1):Number(l[0]||1)-Number(s[0]||1)}return t._plots[i].mainplot?1:-1});a.forEach(function(i){var o=t._plots[i],l=o.xaxis,s=o.yaxis;if(!o.mainplot){var u=No(r,o,l._offset,s._offset,l._length,s._length,"ns","ew");u.onmousemove=function(v){r._fullLayout._rehover=function(){r._fullLayout._hoversubplot===i&&r._fullLayout._plots[i]&&zy.hover(r,v,i)},zy.hover(r,v,i),r._fullLayout._lasthover=u,r._fullLayout._hoversubplot=i},u.onmouseout=function(v){r._dragging||(r._fullLayout._hoversubplot=null,s8e.unhover(r,v))},r._context.showAxisDragHandles&&(No(r,o,l._offset-Ua,s._offset-Ua,Ua,Ua,"n","w"),No(r,o,l._offset+l._length,s._offset-Ua,Ua,Ua,"n","e"),No(r,o,l._offset-Ua,s._offset+s._length,Ua,Ua,"s","w"),No(r,o,l._offset+l._length,s._offset+s._length,Ua,Ua,"s","e"))}if(r._context.showAxisDragHandles){if(i===l._mainSubplot){var f=l._mainLinePosition;l.side==="top"&&(f-=Ua),No(r,o,l._offset+l._length*.1,f,l._length*.8,Ua,"","ew"),No(r,o,l._offset,f,l._length*.1,Ua,"","w"),No(r,o,l._offset+l._length*.9,f,l._length*.1,Ua,"","e")}if(i===s._mainSubplot){var c=s._mainLinePosition;s.side!=="right"&&(c-=Ua),No(r,o,c,s._offset+s._length*.1,Ua,s._length*.8,"ns",""),No(r,o,c,s._offset+s._length*.9,Ua,s._length*.1,"s",""),No(r,o,c,s._offset,Ua,s._length*.1,"n","")}}});var n=t._hoverlayer.node();n.onmousemove=function(i){i.target=r._fullLayout._lasthover,zy.hover(r,i,t._hoversubplot)},n.onclick=function(i){i.target=r._fullLayout._lasthover,zy.click(r,i)},n.onmousedown=function(i){r._fullLayout._lasthover.onmousedown(i)},Ny.updateFx(r)}};Ny.updateFx=function(e){var r=e._fullLayout,t=r.dragmode==="pan"?"move":"crosshair";u8e(r._draggers,t)}});var VH=z((A$e,YH)=>{"use strict";var GH=Tr();YH.exports=function(r){for(var t=GH.layoutArrayContainers,a=GH.layoutArrayRegexes,n=r.split("[")[0],i,o,l=0;l{"use strict";var f8e=Du(),mw=Ap(),kd=_s(),c8e=f4().sorterAsc,yw=Tr();Sd.containerArrayMatch=VH();var v8e=Sd.isAddVal=function(r){return r==="add"||f8e(r)},jH=Sd.isRemoveVal=function(r){return r===null||r==="remove"};Sd.applyContainerArrayChanges=function(r,t,a,n,i){var o=t.astr,l=yw.getComponentMethod(o,"supplyLayoutDefaults"),s=yw.getComponentMethod(o,"draw"),u=yw.getComponentMethod(o,"drawOne"),f=n.replot||n.recalc||l===mw||s===mw,c=r.layout,v=r._fullLayout;if(a[""]){Object.keys(a).length>1&&kd.warn("Full array edits are incompatible with other edits",o);var d=a[""][""];if(jH(d))t.set(null);else if(Array.isArray(d))t.set(d);else return kd.warn("Unrecognized full array edit value",o,d),!0;return f?!1:(l(c,v),s(r),!0)}var p=Object.keys(a).map(Number).sort(c8e),y=t.get(),m=y||[],b=i(v,o).get(),A=[],w=-1,x=m.length,_,k,T,q,C,E,P,R;for(_=0;_m.length-(P?0:1)){kd.warn("index out of range",o,T);continue}if(E!==void 0)C.length>1&&kd.warn("Insertion & removal are incompatible with edits to the same index.",o,T),jH(E)?A.push(T):P?(E==="add"&&(E={}),m.splice(T,0,E),b&&b.splice(T,0,{})):kd.warn("Unrecognized full object edit value",o,T,E),w===-1&&(w=T);else for(k=0;k=0;_--)m.splice(A[_],1),b&&b.splice(A[_],1);if(m.length?y||t.set(m):t.set(null),f)return!1;if(l(c,v),u!==mw){var N;if(w===-1)N=p;else{for(x=Math.max(m.length,x),N=[],_=0;_=w));_++)N.push(T);for(_=w;_{"use strict";var JH=Br(),KH=Tr(),Dn=ke(),qd=ma(),QH=Aa(),Ld=QH.cleanId,h8e=QH.getFromTrace,gw=KH.traceIs,d8e=["x","y","z"];Qi.clearPromiseQueue=function(e){Array.isArray(e._promises)&&e._promises.length>0&&Dn.log("Clearing previous rejected promises from queue."),e._promises=[]};Qi.cleanLayout=function(e){var r,t;e||(e={}),e.xaxis1&&(e.xaxis||(e.xaxis=e.xaxis1),delete e.xaxis1),e.yaxis1&&(e.yaxis||(e.yaxis=e.yaxis1),delete e.yaxis1),e.scene1&&(e.scene||(e.scene=e.scene1),delete e.scene1);var a=(qd.subplotsRegistry.cartesian||{}).attrRegex,n=(qd.subplotsRegistry.polar||{}).attrRegex,i=(qd.subplotsRegistry.ternary||{}).attrRegex,o=(qd.subplotsRegistry.gl3d||{}).attrRegex,l=Object.keys(e);for(r=0;r3?(m.x=1.02,m.xanchor="left"):m.x<-2&&(m.x=-.02,m.xanchor="right"),m.y>3?(m.y=1.02,m.yanchor="bottom"):m.y<-2&&(m.y=-.02,m.yanchor="top")),e.dragmode==="rotate"&&(e.dragmode="orbit"),e.template&&e.template.layout&&Qi.cleanLayout(e.template.layout),e};function A0(e,r,t=!1){var a=e[r],n=r.charAt(0);t&&Array.isArray(a)||a&&a!=="paper"&&(e[r]=Ld(a,n,!0))}Qi.cleanData=function(e){for(var r=0;r0)return e.slice(0,r)}Qi.hasParent=function(e,r){for(var t=$H(r);t;){if(t in e)return!0;t=$H(t)}return!1};Qi.clearAxisTypes=function(e,r,t){for(var a=0;a{let t=(...a)=>a.every(n=>Dn.isPlainObject(n))||a.every(n=>Array.isArray(n));if([e,r].every(a=>Array.isArray(a))){if(e.length!==r.length)return!1;for(let a=0;aDn.isPlainObject(a))){if(Object.keys(e).length!==Object.keys(r).length)return!1;for(let a in e){if(a.startsWith("_"))continue;let n=e[a],i=r[a];if(n!==i&&!(t(n,i)?bw(n,i):!1))return!1}return!0}return!1};Qi.collectionsAreEqual=bw});var Tw=z($r=>{"use strict";var Uy=Pr(),y8e=Br(),g8e=M4(),ir=ke(),Rt=ir.nestedProperty,_w=Ch(),Yn=GP(),eo=Tr(),Zy=Xc(),Cr=ma(),En=Yr(),b8e=U6(),x8e=Gi(),Oy=Jr(),_8e=qr(),w8e=pw().initInteractions,A8e=(Vl(),ze(Yl)),T8e=xl().clearOutline,iU=xs().dfltConfig,By=WH(),xa=eU(),mt=xy(),Xs=qo(),M8e=(Pa(),ze(Ea)).AX_NAME_PATTERN,xw=0,rU=5;function k8e(e,r,t,a){var n;if(e=ir.getGraphDiv(e),_w.init(e),ir.isPlainObject(r)){var i=r;r=i.data,t=i.layout,a=i.config,n=i.frames}var o=_w.triggerHandler(e,"plotly_beforeplot",[r,t,a]);if(o===!1)return Promise.reject();!r&&!t&&!ir.isPlotDiv(e)&&ir.warn("Calling _doPlot as if redrawing but this container doesn't yet have a plot.",e);function l(){if(n)return $r.addFrames(e,n)}lU(e,a),t||(t={}),Uy.select(e).classed("js-plotly-plot",!0),Oy.makeTester(),Array.isArray(e._promises)||(e._promises=[]);var s=(e.data||[]).length===0&&Array.isArray(r);Array.isArray(r)&&(xa.cleanData(r),s?e.data=r:e.data.push.apply(e.data,r),e.empty=!1),(!e.layout||s)&&(e.layout=xa.cleanLayout(t)),Cr.supplyDefaults(e);var u=e._fullLayout,f=u._has("cartesian");u._replotting=!0,(s||u._shouldCreateBgLayer)&&($8e(e),u._shouldCreateBgLayer&&delete u._shouldCreateBgLayer),Oy.initGradients(e),Oy.initPatterns(e),s&&En.saveShowSpikeInitial(e);var c=!e.calcdata||e.calcdata.length!==(e._fullData||[]).length;c&&Cr.doCalcdata(e);for(var v=0;v{ir.isHidden(e)||Cr.resize(e)};if(e._context.fillFrame||typeof ResizeObserver=="undefined")window.addEventListener("resize",q),e._clearResponsive=()=>window.removeEventListener("resize",q);else{let C=e.offsetWidth,E=e.offsetHeight,P=new ResizeObserver(()=>{let R=e.offsetWidth,N=e.offsetHeight,I=Math.abs(R-C)>1||Math.abs(N-E)>1;C=R,E=N,I&&R&&N&&q()});P.observe(e),e._clearResponsive=()=>P.disconnect()}}}else ir.clearResponsive(e);let d=document.fonts?[...document.fonts].filter(q=>q.status!=="loaded"):[];var p=ir.extendFlat({},u._size),y=0;function m(){for(var q=u._basePlotModules,C=0;C["loaded","loading"].includes(n.status));if(!t.length)return;let a={};e._fontLoadToken=a,yield Promise.all(t.map(n=>n.loaded.catch(()=>{}))),e._fontLoadToken===a&&(delete e._fontLoadToken,Oy.savedBBoxes={},$r._doPlot(e))})}function Dd(e){var r=e._fullLayout;r._redrawFromAutoMarginCount?r._redrawFromAutoMarginCount--:e.emit("plotly_afterplot")}function q8e(e){return ir.extendFlat(iU,e)}function oU(e,r){try{e._fullLayout._paper.style("background",r)}catch(t){ir.error(t)}}function L8e(e,r){var t=_8e.combine(r,"white");oU(e,t)}function lU(e,r){if(!e._context){e._context=ir.extendDeep({},iU);var t=Uy.select("base");e._context._baseUrl=t.size()&&t.attr("href")?window.location.href.split("#")[0]:""}var a=e._context,n,i,o;if(r){for(i=Object.keys(r),n=0;n=e.data.length||n<-e.data.length)throw new Error(t+" must be valid indices for gd.data.");if(r.indexOf(n,a+1)>-1||n>=0&&r.indexOf(-e.data.length+n)>-1||n<0&&r.indexOf(e.data.length+n)>-1)throw new Error("each index in "+t+" must be unique.")}}function sU(e,r,t){if(!Array.isArray(e.data))throw new Error("gd.data must be an array.");if(typeof r=="undefined")throw new Error("currentIndices is a required argument.");if(Array.isArray(r)||(r=[r]),Yy(e,r,"currentIndices"),typeof t!="undefined"&&!Array.isArray(t)&&(t=[t]),typeof t!="undefined"&&Yy(e,t,"newIndices"),typeof t!="undefined"&&r.length!==t.length)throw new Error("current and new indices must be of equal length.")}function E8e(e,r,t){var a,n;if(!Array.isArray(e.data))throw new Error("gd.data must be an array.");if(typeof r=="undefined")throw new Error("traces must be defined.");for(Array.isArray(r)||(r=[r]),a=0;a=0&&f=0&&f0&&typeof q.parts[P]!="string";)P--;var R=q.parts[P],N=q.parts[P-1]+"."+R,I=q.parts.slice(0,P).join("."),O=Rt(e.layout,I).get(),U=Rt(a,I).get(),Y=q.get();if(C!==void 0){b[T]=C,A[T]=R==="reverse"?C:Jl(Y);var G=Zy.getLayoutValObject(a,q.parts);if(G&&G.impliedEdits&&C!==null)for(var V in G.impliedEdits)w(ir.relativeAttr(T,V),G.impliedEdits[V]);if(["width","height"].indexOf(T)!==-1)if(C){w("autosize",null);var W=T==="height"?"width":"height";w(W,a[W])}else a[T]=e._initialAutoSize[T];else if(T==="autosize")w("width",C?null:a.width),w("height",C?null:a.height);else if(N.match(yU))k(N),Rt(a,I+"._inputRange").set(null);else if(N.match(gU)){k(N),Rt(a,I+"._inputRange").set(null);var j=Rt(a,I).get();j._inputDomain&&(j._input.domain=j._inputDomain.slice())}else N.match(z8e)&&Rt(a,I+"._inputDomain").set(null);if(R==="type"){_=O;var J=U.type==="linear"&&C==="log",te=U.type==="log"&&C==="linear";if(J||te){if(!_||!_.range)w(I+".autorange",!0);else if(U.autorange)J&&(_.range=_.range[1]>_.range[0]?[1,2]:[2,1]);else{var ae=_.range[0],se=_.range[1];J?(ae<=0&&se<=0&&w(I+".autorange",!0),ae<=0?ae=se/1e6:se<=0&&(se=ae/1e6),w(I+".range[0]",Math.log(ae)/Math.LN10),w(I+".range[1]",Math.log(se)/Math.LN10)):(w(I+".range[0]",Math.pow(10,ae)),w(I+".range[1]",Math.pow(10,se)))}Array.isArray(a._subplots.polar)&&a._subplots.polar.length&&a[q.parts[0]]&&q.parts[1]==="radialaxis"&&delete a[q.parts[0]]._subplot.viewInitial["radialaxis.range"],eo.getComponentMethod("annotations","convertCoords")(e,U,C,w),eo.getComponentMethod("images","convertCoords")(e,U,C,w)}else w(I+".autorange",!0),w(I+".range",null);Rt(a,I+"._inputRange").set(null)}else if(R.match(M8e)){var $=Rt(a,T).get(),fe=(C||{}).type;(!fe||fe==="-")&&(fe="linear"),eo.getComponentMethod("annotations","convertCoords")(e,$,fe,w),eo.getComponentMethod("images","convertCoords")(e,$,fe,w)}var ie=By.containerArrayMatch(T);if(ie){f=ie.array,c=ie.index;var ue=ie.property,ce=G||{editType:"calc"};c!==""&&ue===""&&(By.isAddVal(C)?A[T]=null:By.isRemoveVal(C)?A[T]=(Rt(t,f).get()||[])[c]:ir.warn("unrecognized full object value",r)),Xs.update(m,ce),u[f]||(u[f]={});var oe=u[f][c];oe||(oe=u[f][c]={}),oe[ue]=C,delete r[T]}else R==="reverse"?(O.range?O.range.reverse():(w(I+".autorange",!0),O.range=[1,0]),U.autorange?m.calc=!0:m.plot=!0):(T==="dragmode"&&(C===!1&&Y!==!1||C!==!1&&Y===!1)||a._has("scatter-like")&&a._has("regl")&&T==="dragmode"&&(C==="lasso"||C==="select")&&!(Y==="lasso"||Y==="select")?m.plot=!0:G?Xs.update(m,G):m.calc=!0,q.set(C))}}for(f in u){var be=By.applyContainerArrayChanges(e,i(t,f),u[f],m,i);be||(m.plot=!0)}for(var Re in x){_=En.getFromId(e,Re);var ye=_&&_._constraintGroup;if(ye){m.calc=!0;for(var Ce in ye)x[Ce]||(En.getFromId(e,Ce)._constraintShrinkable=!0)}}(xU(e)||r.height||r.width)&&(m.plot=!0);var Me=a.shapes;for(c=0;c1;)if(a.pop(),t=Rt(r,a.join(".")+".uirevision").get(),t!==void 0)return t;return r.uirevision}function B8e(e,r){for(var t=0;t[I,e._ev.listeners(I)]);i=$r.newPlot(e,r,t,a).then(()=>{for(let[I,O]of N)O.forEach(U=>e.on(I,U));return $r.react(e,r,t,a)})}else{e.data=r||[],xa.cleanData(e.data),e.layout=t||{},xa.cleanLayout(e.layout),H8e(e.data,e.layout,l,s),Cr.supplyDefaults(e,{skipUpdateCalc:!0});var c=e._fullData,v=e._fullLayout,d=v.datarevision===void 0,p=v.transition,y=Y8e(e,s,v,d,p),m=y.newDataRevision,b=G8e(e,l,c,d,p,m);if(xU(e)&&(y.layoutReplot=!0),b.calc||y.calc){e.calcdata=void 0;for(var A=Object.getOwnPropertyNames(v),w=0;w(f||e.emit("plotly_react",{config:a,data:r,layout:t}),e))}function G8e(e,r,t,a,n,i){var o=r.length===t.length;if(!n&&!o)return{fullReplot:!0,calc:!0};var l=Xs.traceFlags();l.arrays={},l.nChanges=0,l.nChangesAnim=0;var s,u;function f(d){var p=Zy.getTraceValObject(u,d);return!u._module.animatable&&p.anim&&(p.anim=!1),p}var c={getValObject:f,flags:l,immutable:a,transition:n,newDataRevision:i,gd:e},v={};for(s=0;s=n.length?n[0]:n[u]:n}function l(u){return Array.isArray(i)?u>=i.length?i[0]:i[u]:i}function s(u,f){var c=0;return function(){if(u&&++c===f)return u()}}return new Promise(function(u,f){function c(){if(a._frameQueue.length!==0){for(;a._frameQueue.length;){var R=a._frameQueue.pop();R.onInterrupt&&R.onInterrupt()}e.emit("plotly_animationinterrupted",[])}}function v(R){if(R.length!==0){for(var N=0;Na._timeToNext&&p()};R()}var m=0;function b(R){return Array.isArray(n)?m>=n.length?R.transitionOpts=n[m]:R.transitionOpts=n[0]:R.transitionOpts=n,m++,R}var A,w,x=[],_=r==null,k=Array.isArray(r),T=!_&&!k&&ir.isPlainObject(r);if(T)x.push({type:"object",data:b(ir.extendFlat({},r))});else if(_||["string","number"].indexOf(typeof r)!==-1)for(A=0;A0&&EE)&&P.push(w);x=P}}x.length>0?v(x):(e.emit("plotly_animated"),u())})}function j8e(e,r,t){if(e=ir.getGraphDiv(e),r==null)return Promise.resolve();if(!ir.isPlotDiv(e))throw new Error("This element is not a Plotly plot: "+e+". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/");var a,n,i,o,l=e._transitionData._frames,s=e._transitionData._frameHash;if(!Array.isArray(r))throw new Error("addFrames failure: frameList must be an Array of frame definitions"+r);var u=l.length+r.length*2,f=[],c={};for(a=r.length-1;a>=0;a--)if(ir.isPlainObject(r[a])){var v=r[a].name,d=(s[v]||c[v]||{}).name,p=r[a].name,y=s[d]||c[d];d&&p&&typeof p=="number"&&y&&xwq.index?-1:T.index=0;a--){if(n=f[a].frame,typeof n.name=="number"&&ir.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!n.name)for(;s[n.name="frame "+e._transitionData._counter++];);if(s[n.name]){for(i=0;i=0;t--)a=r[t],i.push({type:"delete",index:a}),o.unshift({type:"insert",index:a,value:n[a]});var l=Cr.modifyFrames,s=Cr.modifyFrames,u=[e,o],f=[e,i];return Yn&&Yn.add(e,l,u,s,f),Cr.modifyFrames(e,i)}function X8e(e){e=ir.getGraphDiv(e);var r=e._fullLayout||{},t=e._fullData||[];return Cr.cleanPlot([],{},t,r),Cr.purge(e),_w.purge(e),r._container&&r._container.remove(),delete e._context,e}function Z8e(e){var r=e._fullLayout,t=e.getBoundingClientRect();if(!ir.equalDomRects(t,r._lastBBox)){var a=r._invTransform=ir.inverseTransformMatrix(ir.getFullTransformMatrix(e));r._invScaleX=Math.sqrt(a[0][0]*a[0][0]+a[0][1]*a[0][1]+a[0][2]*a[0][2]),r._invScaleY=Math.sqrt(a[1][0]*a[1][0]+a[1][1]*a[1][1]+a[1][2]*a[1][2]),r._lastBBox=t}}function $8e(e){var r=Uy.select(e),t=e._fullLayout;if(t._calcInverseTransform=Z8e,t._calcInverseTransform(e),t._container=r.selectAll(".plot-container").data([0]),t._container.enter().insert("div",":first-child").classed("plot-container",!0).classed("plotly",!0).style({width:"100%",height:"100%"}),t._paperdiv=t._container.selectAll(".svg-container").data([0]),t._paperdiv.enter().append("div").classed("user-select-none",!0).classed("svg-container",!0).style("position","relative"),t._glcontainer=t._paperdiv.selectAll(".gl-container").data([{}]),t._glcontainer.enter().append("div").classed("gl-container",!0),t._paperdiv.selectAll(".main-svg").remove(),t._paperdiv.select(".modebar-container").remove(),t._paper=t._paperdiv.insert("svg",":first-child").classed("main-svg",!0),t._toppaper=t._paperdiv.append("svg").classed("main-svg",!0),t._modebardiv=t._paperdiv.append("div"),delete t._modeBar,t._hoverpaper=t._paperdiv.append("svg").classed("main-svg",!0),!t._uid){var a={};Uy.selectAll("defs").each(function(){this.id&&(a[this.id.split("-")[1]]=1)}),t._uid=ir.randstr(a)}t._paperdiv.selectAll(".main-svg").attr(A8e.svgAttrs),t._defs=t._paper.append("defs").attr("id","defs-"+t._uid),t._clips=t._defs.append("g").classed("clips",!0),t._topdefs=t._toppaper.append("defs").attr("id","topdefs-"+t._uid),t._topclips=t._topdefs.append("g").classed("clips",!0),t._bgLayer=t._paper.append("g").classed("bglayer",!0),t._draggers=t._paper.append("g").classed("draglayer",!0);var n=t._paper.append("g").classed("layer-below",!0);t._imageLowerLayer=n.append("g").classed("imagelayer",!0),t._shapeLowerLayer=n.append("g").classed("shapelayer",!0),t._cartesianlayer=t._paper.append("g").classed("cartesianlayer",!0),t._polarlayer=t._paper.append("g").classed("polarlayer",!0),t._smithlayer=t._paper.append("g").classed("smithlayer",!0),t._ternarylayer=t._paper.append("g").classed("ternarylayer",!0),t._geolayer=t._paper.append("g").classed("geolayer",!0),t._funnelarealayer=t._paper.append("g").classed("funnelarealayer",!0),t._pielayer=t._paper.append("g").classed("pielayer",!0),t._iciclelayer=t._paper.append("g").classed("iciclelayer",!0),t._treemaplayer=t._paper.append("g").classed("treemaplayer",!0),t._sunburstlayer=t._paper.append("g").classed("sunburstlayer",!0),t._indicatorlayer=t._toppaper.append("g").classed("indicatorlayer",!0),t._glimages=t._paper.append("g").classed("glimages",!0);var i=t._toppaper.append("g").classed("layer-above",!0);t._imageUpperLayer=i.append("g").classed("imagelayer",!0),t._shapeUpperLayer=i.append("g").classed("shapelayer",!0),t._selectionLayer=t._toppaper.append("g").classed("selectionlayer",!0),t._infolayer=t._toppaper.append("g").classed("infolayer",!0),t._menulayer=t._toppaper.append("g").classed("menulayer",!0),t._zoomlayer=t._toppaper.append("g").classed("zoomlayer",!0),t._hoverlayer=t._hoverpaper.append("g").classed("hoverlayer",!0),t._modebardiv.classed("modebar-container",!0).style("position","absolute").style("top","0px").style("right","0px"),e.emit("plotly_framework")}$r.animate=V8e;$r.addFrames=j8e;$r.deleteFrames=W8e;$r.addTraces=hU;$r.deleteTraces=dU;$r.extendTraces=cU;$r.moveTraces=ww;$r.prependTraces=vU;$r.newPlot=D8e;$r._doPlot=k8e;$r.purge=X8e;$r.react=U8e;$r.redraw=C8e;$r.relayout=Cd;$r.restyle=Vy;$r.setPlotConfig=q8e;$r.update=Wy;$r._guiRelayout=Aw(Cd);$r._guiRestyle=Aw(Vy);$r._guiUpdate=Aw(Wy);$r._storeDirectGUIEdit=F8e});var Kl=z(ro=>{"use strict";var J8e=Tr();ro.getDelay=function(e){return e._has&&(e._has("gl3d")||e._has("map"))?500:0};ro.getRedrawFunc=function(e){return function(){J8e.getComponentMethod("colorbar","draw")(e)}};ro.encodeSVG=function(e){return"data:image/svg+xml,"+encodeURIComponent(e)};ro.encodeJSON=function(e){return"data:application/json,"+encodeURIComponent(e)};var _U=window.URL||window.webkitURL;ro.createObjectURL=function(e){return _U.createObjectURL(e)};ro.revokeObjectURL=function(e){return _U.revokeObjectURL(e)};ro.createBlob=function(e,r){if(r==="svg")return new window.Blob([e],{type:"image/svg+xml;charset=utf-8"});if(r==="full-json")return new window.Blob([e],{type:"application/json;charset=utf-8"});var t=K8e(window.atob(e));return new window.Blob([t],{type:"image/"+r})};ro.octetStream=function(e){document.location.href="data:application/octet-stream"+e};ro.getPlotTitle=function(e){var a,n,i,o;var r=e._fullLayout;if(r){var t=(a=r.title)==null?void 0:a.text;return t===((n=r._dfltTitle)==null?void 0:n.plot)?void 0:t}return(o=(i=e.layout)==null?void 0:i.title)==null?void 0:o.text};ro.getPlotSubtitle=function(e){var a,n,i,o,l,s;var r=e._fullLayout;if(r){var t=(n=(a=r.title)==null?void 0:a.subtitle)==null?void 0:n.text;return t===((i=r._dfltTitle)==null?void 0:i.subtitle)?void 0:t}return(s=(l=(o=e.layout)==null?void 0:o.title)==null?void 0:l.subtitle)==null?void 0:s.text};function K8e(e){for(var r=e.length,t=new ArrayBuffer(r),a=new Uint8Array(t),n=0;n{"use strict";var kw=Pr(),L$e=ke(),Q8e=Jr(),e9e=qr(),C$e=(Vl(),ze(Yl)),Mw=/"/g,xf="TOBESTRIPPED",r9e=new RegExp(`("${xf})|(${xf}")|("${xf})|(${xf}")`,"g"),t9e=["&","&","&",""",""",""","'","'","'"],a9e=["<","<","<"],n9e=[">",">",">"];function i9e(e){let r=kw.select("body").append("div").style({display:"none"}).html(""),t=e.replace(/(&[^;]*;)/gi,a=>{let n=a.toLowerCase();return t9e.includes(n)?a:a9e.includes(n)?"<":n9e.includes(n)?">":a.includes("<")||a.includes(">")?"":r.html(a).text()});return r.remove(),t}function o9e(e){return e.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&")}wU.exports=function(r,t,a){var n=r._fullLayout,i=n._paper,o=n._toppaper,l=n.width,s=n.height,u;i.insert("rect",":first-child").call(Q8e.setRect,0,0,l,s).call(e9e.fill,n.paper_bgcolor);var f=n._basePlotModules||[];for(u=0;u{"use strict";var l9e=ke(),s9e=Wu().EventEmitter,Ed=Kl();function u9e(e){var r=e.emitter||new s9e,t=new Promise(function(a,n){var i=window.Image,o=e.svg,l=e.format||"png",s=e.canvas,u=e.scale||1,f=e.width||300,c=e.height||150,v=u*f,d=u*c,p=s.getContext("2d",{willReadFrequently:!0}),y=new i,m,b;l==="svg"||l9e.isSafari()?b=Ed.encodeSVG(o):(m=Ed.createBlob(o,"svg"),b=Ed.createObjectURL(m)),s.width=v,s.height=d,y.onload=function(){var A;switch(m=null,Ed.revokeObjectURL(b),l!=="svg"&&p.drawImage(y,0,0,v,d),l){case"jpeg":A=s.toDataURL("image/jpeg");break;case"png":A=s.toDataURL("image/png");break;case"webp":A=s.toDataURL("image/webp");break;case"svg":A=b;break;default:var w="Image format is not jpeg, png, svg or webp.";if(n(new Error(w)),!e.promise)return r.emit("error",w)}a(A),e.promise||r.emit("success",A)},y.onerror=function(A){if(m=null,Ed.revokeObjectURL(b),n(A),!e.promise)return r.emit("error",A)},y.src=b});return e.promise?t:r}AU.exports=u9e});var qw=z((P$e,kU)=>{"use strict";var TU=Br(),MU=Tw(),f9e=ma(),_l=ke(),Pd=Kl(),c9e=Jy(),v9e=Ky(),h9e=Jv().version,Sw=(H_(),ze(O_)).default;function d9e(e,r){r=r||{};var t,a,n,i;_l.isPlainObject(e)?(t=e.data||[],a=e.layout||{},n=e.config||{},i={}):(e=_l.getGraphDiv(e),t=_l.extendDeep([],e.data),a=_l.extendDeep({},e.layout),n=e._context,i=e._fullLayout||{});function o(k){return!(k in r)||_l.validate(r[k],Sw[k])}if(!o("width")&&r.width!==null||!o("height")&&r.height!==null)throw new Error("Height and width should be pixel values.");if(!o("format"))throw new Error("Export format is not "+_l.join2(Sw.format.values,", "," or ")+".");var l={};function s(k,T){return _l.coerce(r,l,Sw,k,T)}var u=s("format"),f=s("width"),c=s("height"),v=s("scale"),d=s("setBackground"),p=s("imageDataOnly"),y=document.createElement("div");y.style.position="absolute",y.style.left="-5000px",document.body.appendChild(y);var m=_l.extendFlat({},a);f?m.width=f:r.width===null&&TU(i.width)&&(m.width=i.width),c?m.height=c:r.height===null&&TU(i.height)&&(m.height=i.height);var b=_l.extendFlat({},n,{_exportedPlot:!0,staticPlot:!0,setBackground:d}),A=Pd.getRedrawFunc(y);function w(){return new Promise(function(k){setTimeout(k,Pd.getDelay(y._fullLayout))})}function x(){return new Promise(function(k,T){var q=c9e(y,u,v),C=y._fullLayout.width,E=y._fullLayout.height;function P(){MU.purge(y),document.body.removeChild(y)}if(u==="full-json"){var R=f9e.graphJson(y,!1,"object",!0,!0);return R.version=h9e,R=JSON.stringify(R),P(),k(p?R:Pd.encodeJSON(R))}if(P(),u==="svg")return k(p?q:Pd.encodeSVG(q));var N=document.createElement("canvas");N.id=_l.randstr(),v9e({format:u,width:C,height:E,scale:v,canvas:N,svg:q,promise:!0}).then(k).catch(T)})}function _(k){return p?k.replace(Pd.IMAGE_URL_PREFIX,""):k}return new Promise(function(k,T){MU.newPlot(y,t,m,b).then(A).then(w).then(x).then(function(q){k(_(q))}).catch(function(q){T(q)})})}kU.exports=d9e});var LU=z((R$e,qU)=>{"use strict";var to=ke(),p9e=ma(),m9e=Xc(),y9e=xs().dfltConfig,Io=to.isPlainObject,wf=Array.isArray,Lw=to.isArrayOrTypedArray;qU.exports=function(r,t){r===void 0&&(r=[]),t===void 0&&(t={});var a=m9e.get(),n=[],i={_context:to.extendFlat({},y9e)},o,l;wf(r)?(i.data=to.extendDeep([],r),o=r):(i.data=[],o=[],n.push(Ga("array","data"))),Io(t)?(i.layout=to.extendDeep({},t),l=t):(i.layout={},l={},arguments.length>1&&n.push(Ga("object","layout"))),p9e.supplyDefaults(i);for(var s=i._fullData,u=o.length,f=0;fc.length&&a.push(Ga("unused",n,u.concat(c.length)));var b=c.length,A=Array.isArray(m);A&&(b=Math.min(b,m.length));var w,x,_,k,T;if(v.dimensions===2)for(x=0;xc[x].length&&a.push(Ga("unused",n,u.concat(x,c[x].length)));var q=c[x].length;for(w=0;w<(A?Math.min(q,m[x].length):q);w++)_=A?m[x][w]:m,k=f[x][w],T=c[x][w],to.validate(k,_)?T!==k&&T!==+k&&a.push(Ga("dynamic",n,u.concat(x,w),k,T)):a.push(Ga("value",n,u.concat(x,w),k))}else a.push(Ga("array",n,u.concat(x),f[x]));else for(x=0;x{"use strict";var T9e=ke(),eg=Kl();function M9e(e,r,t){var a=document.createElement("a"),n="download"in a,i=new Promise(function(o,l){var s,u;if(n)return s=eg.createBlob(e,t),u=eg.createObjectURL(s),a.href=u,a.download=r,document.body.appendChild(a),a.click(),document.body.removeChild(a),eg.revokeObjectURL(u),s=null,o(r);if(T9e.isSafari()){var f=t==="svg"?",":";base64,";return eg.octetStream(f+encodeURIComponent(e)),o(r)}l(new Error("download error"))});return i}CU.exports=M9e});var Cw=z((z$e,FU)=>{"use strict";var rg=ke(),EU=Fa(),k9e=qw(),S9e=DU(),PU=Kl(),RU=40;function q9e(e,r){var t;return rg.isPlainObject(e)||(t=rg.getGraphDiv(e)),r=r||{},r.format=r.format||"png",r.width=r.width||null,r.height=r.height||null,r.imageDataOnly=!0,new Promise(function(a,n){t&&t._snapshotInProgress&&n(new Error("Image capture already in progress.")),t&&(t._snapshotInProgress=!0);var i=k9e(e,r),o=r.filename||e.fn;if(!o){let s=PU.getPlotTitle(e);if(s&&!EU.matchTex(s))o=rg.slugify(s,RU);else{let u=PU.getPlotSubtitle(e);u&&!EU.matchTex(u)&&(o=rg.slugify(u,RU))}}var l=o||"plot-image";l+="."+r.format.replace("-","."),i.then(function(s){return t&&(t._snapshotInProgress=!1),S9e(s,l,r.format)}).then(function(s){a(s)}).catch(function(s){t&&(t._snapshotInProgress=!1),n(s)})})}FU.exports=q9e});var OU=z(Dw=>{"use strict";var ni=ke(),ii=ni.isPlainObject,zU=Xc(),NU=ma(),L9e=On(),IU=Ct(),BU=xs().dfltConfig;Dw.makeTemplate=function(e){e=ni.isPlainObject(e)?e:ni.getGraphDiv(e),e=ni.extendDeep({_context:BU},{data:e.data,layout:e.layout}),NU.supplyDefaults(e);var r=e.data||[],t=e.layout||{};t._basePlotModules=e._fullLayout._basePlotModules,t._modules=e._fullLayout._modules;var a={data:{},layout:{}};r.forEach(function(d){var p={};Rd(d,p,D9e.bind(null,d));var y=ni.coerce(d,{},L9e,"type"),m=a.data[y];m||(m=a.data[y]=[]),m.push(p)}),Rd(t,a.layout,C9e.bind(null,t)),delete a.layout.template;var n=t.template;if(ii(n)){var i=n.layout,o,l,s,u,f,c;ii(i)&&tg(i,a.layout);var v=n.data;if(ii(v)){for(l in a.data)if(s=v[l],Array.isArray(s)){for(f=a.data[l],c=f.length,u=s.length,o=0;ob?o.push({code:"unused",traceType:d,templateCount:m,dataCount:b}):b>m&&o.push({code:"reused",traceType:d,templateCount:m,dataCount:b})}}function A(w,x){for(var _ in w)if(_.charAt(0)!=="_"){var k=w[_],T=ao(w,_,x);ii(k)?(Array.isArray(w)&&k._template===!1&&k.templateitemname&&o.push({code:"missing",path:T,templateitemname:k.templateitemname}),A(k,T)):Array.isArray(k)&&E9e(k)&&A(k,T)}}if(A({data:s,layout:l},""),o.length)return o.map(P9e)};function E9e(e){for(var r=0;r{"use strict";var Na=Tw();Gt._doPlot=Na._doPlot;Gt.newPlot=Na.newPlot;Gt.restyle=Na.restyle;Gt.relayout=Na.relayout;Gt.redraw=Na.redraw;Gt.update=Na.update;Gt._guiRestyle=Na._guiRestyle;Gt._guiRelayout=Na._guiRelayout;Gt._guiUpdate=Na._guiUpdate;Gt._storeDirectGUIEdit=Na._storeDirectGUIEdit;Gt.react=Na.react;Gt.extendTraces=Na.extendTraces;Gt.prependTraces=Na.prependTraces;Gt.addTraces=Na.addTraces;Gt.deleteTraces=Na.deleteTraces;Gt.moveTraces=Na.moveTraces;Gt.purge=Na.purge;Gt.addFrames=Na.addFrames;Gt.deleteFrames=Na.deleteFrames;Gt.animate=Na.animate;Gt.setPlotConfig=Na.setPlotConfig;var R9e=wh().getGraphDiv,F9e=hy().eraseActiveShape;Gt.deleteActiveShape=function(e){return F9e(R9e(e))};Gt.toImage=qw();Gt.validate=LU();Gt.downloadImage=Cw();var HU=OU();Gt.makeTemplate=HU.makeTemplate;Gt.validateTemplate=HU.validateTemplate});var Pw=z((B$e,GU)=>{"use strict";var Ew=ke(),z9e=Tr();GU.exports=function(r,t,a,n){var i=n("x"),o=n("y"),l,s=z9e.getComponentMethod("calendars","handleTraceDefaults");if(s(r,t,["x","y"],a),i){var u=Ew.minRowLength(i);o?l=Math.min(u,Ew.minRowLength(o)):(l=u,n("y0"),n("dy"))}else{if(!o)return 0;l=Ew.minRowLength(o),n("x0"),n("dx")}return t._length=l,l}});var T0=z((O$e,jU)=>{"use strict";var YU=ke().dateTick0,N9e=(jt(),ze(Zt)),I9e=N9e.ONEWEEK;function VU(e,r){return e%I9e===0?YU(r,1):YU(r,0)}jU.exports=function(r,t,a,n,i){if(i||(i={x:!0,y:!0}),i.x){var o=n("xperiod");o&&(n("xperiod0",VU(o,t.xcalendar)),n("xperiodalignment"))}if(i.y){var l=n("yperiod");l&&(n("yperiod0",VU(l,t.ycalendar)),n("yperiodalignment"))}}});var ZU=z((H$e,XU)=>{"use strict";var WU=["orientation","groupnorm","stackgaps"];XU.exports=function(r,t,a,n){var i=a._scatterStackOpts,o=n("stackgroup");if(o){var l=t.xaxis+t.yaxis,s=i[l];s||(s=i[l]={});var u=s[o],f=!1;u?u.traces.push(t):(u=s[o]={traceIndices:[],traces:[t]},f=!0);for(var c={orientation:t.x&&!t.y?"h":"v"},v=0;v{"use strict";var $U=qr(),JU=yi().hasColorscale,KU=jl(),B9e=ri();QU.exports=function(r,t,a,n,i,o={}){var l=B9e.isBubble(r),s=(r.line||{}).color,u;if(s&&(a=s),i("marker.symbol"),i("marker.opacity",l?.7:1),i("marker.size"),o.noAngle||(i("marker.angle"),o.noAngleRef||i("marker.angleref"),o.noStandOff||i("marker.standoff")),i("marker.color",a),JU(r,"marker")&&KU(r,t,n,i,{prefix:"marker.",cLetter:"c"}),o.noSelect||(i("selected.marker.color"),i("unselected.marker.color"),i("selected.marker.size"),i("unselected.marker.size")),o.noLine||(s&&!Array.isArray(s)&&t.marker.color!==s?u=s:l?u=$U.background:u=$U.defaultLine,i("marker.line.color",u),JU(r,"marker.line")&&KU(r,t,n,i,{prefix:"marker.line.",cLetter:"c"}),i("marker.line.width",l?1:0),o.noLineDash||i("marker.line.dash")),l&&(i("marker.sizeref"),i("marker.sizemin"),i("marker.sizemode")),o.gradient){var f=i("marker.gradient.type");f!=="none"&&i("marker.gradient.color")}}});var Fw=z((G$e,eG)=>{"use strict";var O9e=ke().isArrayOrTypedArray,H9e=yi().hasColorscale,U9e=jl();eG.exports=function(r,t,a,n,i,o){o||(o={});var l=(r.marker||{}).color;if(l&&l._inputArray&&(l=l._inputArray),i("line.color",a),H9e(r,"line"))U9e(r,t,n,i,{prefix:"line.",cLetter:"c"});else{var s=(O9e(l)?!1:l)||a;i("line.color",s)}i("line.width"),o.noDash||i("line.dash"),o.backoff&&i("line.backoff")}});var zw=z((Y$e,rG)=>{"use strict";rG.exports=function(r,t,a){var n=a("line.shape");n==="spline"&&a("line.smoothing")}});var Nw=z((V$e,tG)=>{"use strict";var G9e=ke();tG.exports=function(e,r,t,a,n){n=n||{},a("textposition"),G9e.coerceFont(a,"textfont",n.font||t.font,n),n.noSelect||(a("selected.textfont.color"),a("unselected.textfont.color"))}});var Iw=z((j$e,nG)=>{"use strict";var ng=qr(),aG=ke().isArrayOrTypedArray;function Y9e(e){for(var r=ng.interpolate(e[0][1],e[1][1],.5),t=2;t{"use strict";var iG=ke(),V9e=Tr(),j9e=Ji(),W9e=(wd(),ze(_d)),M0=ri(),X9e=Pw(),Z9e=T0(),$9e=ZU(),J9e=Rw(),K9e=Fw(),oG=zw(),Q9e=Nw(),eAe=Iw(),rAe=ke().coercePattern;lG.exports=function(r,t,a,n){function i(d,p){return iG.coerce(r,t,j9e,d,p)}var o=X9e(r,t,n,i);if(o||(t.visible=!1),!!t.visible){Z9e(r,t,n,i),i("xhoverformat"),i("yhoverformat"),i("zorder");var l=$9e(r,t,n,i);n.scattermode==="group"&&t.orientation===void 0&&i("orientation","v");var s=!l&&o{"use strict";var tAe=bf().getAxisGroup;uG.exports=function(r,t,a,n,i){var o=t.orientation,l=t[{v:"x",h:"y"}[o]+"axis"],s=tAe(a,l)+o,u=a._alignmentOpts||{},f=n("alignmentgroup"),c=u[s];c||(c=u[s]={});var v=c[f];v?v.traces.push(t):v=c[f]={traces:[t],alignmentIndex:Object.keys(c).length,offsetGroups:{}};var d=n("offsetgroup")||"",p=v.offsetGroups,y=p[d];t._offsetIndex=0,(i!=="group"||d)&&(y||(y=p[d]={offsetIndex:Object.keys(p).length}),t._offsetIndex=y.offsetIndex)}});var cG=z((Z$e,fG)=>{"use strict";var aAe=ke(),nAe=Fd(),iAe=Ji();fG.exports=function(r,t){var a,n,i,o=t.scattermode;function l(v){return aAe.coerce(n._input,n,iAe,v)}if(t.scattermode==="group")for(i=0;i=0;f--){var c=r[f];if(c.type==="scatter"&&c.xaxis===s.xaxis&&c.yaxis===s.yaxis){c.opacity=void 0;break}}}}}});var hG=z(($$e,vG)=>{"use strict";var oAe=ke(),lAe=Xp();vG.exports=function(e,r){function t(n,i){return oAe.coerce(e,r,lAe,n,i)}var a=r.barmode==="group";r.scattermode==="group"&&t("scattergap",a?r.bargap:.2)}});var k0=z((J$e,pG)=>{"use strict";var sAe=Br(),dG=ke(),uAe=dG.dateTime2ms,ig=dG.incrementMonth,fAe=(jt(),ze(Zt)),cAe=fAe.ONEAVGMONTH;pG.exports=function(r,t,a,n){if(t.type!=="date")return{vals:n};var i=r[a+"periodalignment"];if(!i)return{vals:n};var o=r[a+"period"],l;if(sAe(o)){if(o=+o,o<=0)return{vals:n}}else if(typeof o=="string"&&o.charAt(0)==="M"){var s=+o.substring(1);if(s>0&&Math.round(s)===s)l=s;else return{vals:n}}for(var u=t.calendar,f=i==="start",c=i==="end",v=r[a+"period0"],d=uAe(v,u)||0,p=[],y=[],m=[],b=n.length,A=0;Aw;)k=ig(k,-l,u);for(;k<=w;)k=ig(k,l,u);_=ig(k,-l,u)}else{for(x=Math.round((w-d)/o),k=d+x*o;k>w;)k-=o;for(;k<=w;)k+=o;_=k-o}p[A]=f?_:c?k:(_+k)/2,y[A]=_,m[A]=k}return{vals:p,starts:y,ends:m}}});var Hw=z((K$e,yG)=>{"use strict";var Bw=yi().hasColorscale,Ow=Kc(),mG=ri();yG.exports=function(r,t){mG.hasLines(t)&&Bw(t,"line")&&Ow(r,t,{vals:t.line.color,containerStr:"line",cLetter:"c"}),mG.hasMarkers(t)&&(Bw(t,"marker")&&Ow(r,t,{vals:t.marker.color,containerStr:"marker",cLetter:"c"}),Bw(t,"marker.line")&&Ow(r,t,{vals:t.marker.line.color,containerStr:"marker.line",cLetter:"c"}))}});var og=z((Q$e,gG)=>{"use strict";var ra=ke();gG.exports=function(r,t){for(var a=0;a{"use strict";var bG=ke();xG.exports=function(r,t){bG.isArrayOrTypedArray(t.selectedpoints)&&bG.tagSelected(r,t)}});var sg=z((rJe,SG)=>{"use strict";var _G=Br(),Gw=ke(),zd=Yr(),wG=k0(),Uw=(jt(),ze(Zt)).BADNUM,Yw=ri(),vAe=Hw(),hAe=og(),dAe=lg();function pAe(e,r){var t=e._fullLayout,a=r._xA=zd.getFromId(e,r.xaxis||"x","x"),n=r._yA=zd.getFromId(e,r.yaxis||"y","y"),i=a.makeCalcdata(r,"x"),o=n.makeCalcdata(r,"y"),l=wG(r,a,"x",i),s=wG(r,n,"y",o),u=l.vals,f=s.vals,c=r._length,v=new Array(c),d=r.ids,p=Vw(r,t,a,n),y=!1,m,b,A,w,x,_;MG(t,r);var k="x",T="y",q;if(p)Gw.pushUnique(p.traceIndices,r.index),m=p.orientation==="v",m?(T="s",q="x"):(k="s",q="y"),x=p.stackgaps==="interpolate";else{var C=TG(r,c);AG(e,r,a,n,u,f,C)}var E=!!r.xperiodalignment,P=!!r.yperiodalignment;for(b=0;bb&&v[w].gap;)w--;for(_=v[w].s,A=v.length-1;A>w;A--)v[A].s=_;for(;b{"use strict";qG.exports=ug;var mAe=ke().distinctVals;function ug(e,r){this.traces=e,this.sepNegVal=r.sepNegVal,this.overlapNoMerge=r.overlapNoMerge;for(var t=1/0,a=r.posAxis._id.charAt(0),n=[],i=0;iyAe,eventDataKeys:()=>gAe});var yAe,gAe,Id=St(()=>{"use strict";yAe=3,gAe=["value","label"]});var cg=z((aJe,PG)=>{"use strict";var no=Br(),{isArrayOrTypedArray:Ql}=ke(),{BADNUM:S0}=(jt(),ze(Zt)),bAe=Tr(),Bd=Yr(),{getAxisGroup:xAe}=bf(),fg=LG(),{TEXTPAD:_Ae}=(Id(),ze(Nd)),{LINE_SPACING:wAe}=(on(),ze(nn)),{BR_TAG_ALL:AAe}=Fa();function TAe(e,r){for(var t=r.xaxis,a=r.yaxis,n=e._fullLayout,i=e._fullData,o=e.calcdata,l=[],s=[],u=0;us+o||!no(l))}for(var f=0;fa(i))):a(e.text);let n=e.outsidetextfont.size*wAe*t+_Ae;return{ppadplus:r.some(i=>i.s<0)?n:0,ppadminus:r.some(i=>i.s>=0)?n:0}}return{ppadplus:void 0,ppadminus:void 0}}function RAe(e,r,t,a){for(var n=q0(a),i=0;i{"use strict";var RG=sg(),FG=cg().setGroupPositions;function zAe(e,r){for(var t=r.xaxis,a=r.yaxis,n=e._fullLayout,i=e._fullData,o=e.calcdata,l=[],s=[],u=0;uC[f]&&f{"use strict";var IAe=Jr(),HG=(jt(),ze(Zt)),Od=HG.BADNUM,UG=HG.LOG_CLIP,IG=UG+.5,BG=UG-.5,vg=ke(),BAe=vg.segmentsIntersect,OG=vg.constrain,Kw=(wd(),ze(_d));GG.exports=function(r,t){var a=t.trace||{},n=t.xaxis,i=t.yaxis,o=n.type==="log",l=i.type==="log",s=n._length,u=i._length,f=t.backoff,c=a.marker,v=t.connectGaps,d=t.baseTolerance,p=t.shape,y=p==="linear",m=a.fill&&a.fill!=="none",b=[],A=Kw.minTolerance,w=r.length,x=new Array(w),_=0,k,T,q,C,E,P,R,N,I,O,U,Y,G,V,W,j;function J(Ee){var Ke=r[Ee];if(!Ke)return!1;var Be=t.linearized?n.l2p(Ke.x):n.c2p(Ke.x),mr=t.linearized?i.l2p(Ke.y):i.c2p(Ke.y);if(Be===Od){if(o&&(Be=n.c2p(Ke.x,!0)),Be===Od)return!1;l&&mr===Od&&(Be*=Math.abs(n._m*u*(n._m>0?IG:BG)/(i._m*s*(i._m>0?IG:BG)))),Be*=1e3}if(mr===Od){if(l&&(mr=i.c2p(Ke.y,!0)),mr===Od)return!1;mr*=1e3}return[Be,mr]}function te(Ee,Ke,Be,mr){var yr=Be-Ee,ur=mr-Ke,gr=.5-Ee,ne=.5-Ke,ge=yr*yr+ur*ur,Ne=yr*gr+ur*ne;if(Ne>0&&Ne1||Math.abs(gr.y-Be[0][1])>1)&&(gr=[gr.x,gr.y],mr&&fe(gr,Ee)ce||Ee[1]be)return[OG(Ee[0],ue,ce),OG(Ee[1],oe,be)]}function Je(Ee,Ke){if(Ee[0]===Ke[0]&&(Ee[0]===ue||Ee[0]===ce)||Ee[1]===Ke[1]&&(Ee[1]===oe||Ee[1]===be))return!0}function Xe(Ee,Ke){var Be=[],mr=Ze(Ee),yr=Ze(Ke);return mr&&yr&&Je(mr,yr)||(mr&&Be.push(mr),yr&&Be.push(yr)),Be}function Se(Ee,Ke,Be){return function(mr,yr){var ur=Ze(mr),gr=Ze(yr),ne=[];if(ur&&gr&&Je(ur,gr))return ne;ur&&ne.push(ur),gr&&ne.push(gr);var ge=2*vg.constrain((mr[Ee]+yr[Ee])/2,Ke,Be)-((ur||mr)[Ee]+(gr||yr)[Ee]);if(ge){var Ne;ur&&gr?Ne=ge>0==ur[Ee]>gr[Ee]?ur:gr:Ne=ur||gr,Ne[Ee]+=ge}return ne}}var Fe;p==="linear"||p==="spline"?Fe=qe:p==="hv"||p==="vh"?Fe=Xe:p==="hvh"?Fe=Se(0,ue,ce):p==="vhv"&&(Fe=Se(1,oe,be));function er(Ee,Ke){var Be=Ke[0]-Ee[0],mr=(Ke[1]-Ee[1])/Be,yr=(Ee[1]*Ke[0]-Ke[1]*Ee[0])/Be;return yr>0?[mr>0?ue:ce,be]:[mr>0?ce:ue,oe]}function re(Ee){var Ke=Ee[0],Be=Ee[1],mr=Ke===x[_-1][0],yr=Be===x[_-1][1];if(!(mr&&yr))if(_>1){var ur=Ke===x[_-2][0],gr=Be===x[_-2][1];mr&&(Ke===ue||Ke===ce)&&ur?gr?_--:x[_-1]=Ee:yr&&(Be===oe||Be===be)&&gr?ur?_--:x[_-1]=Ee:x[_++]=Ee}else x[_++]=Ee}function xe(Ee){x[_-1][0]!==Ee[0]&&x[_-1][1]!==Ee[1]&&re([Me,Le]),re(Ee),De=null,Me=Le=0}var Ye=vg.isArrayOrTypedArray(c);function vr(Ee){if(Ee&&f&&(Ee.i=k,Ee.d=r,Ee.trace=a,Ee.marker=Ye?c[Ee.i]:c,Ee.backoff=f),ae=Ee[0]/s,se=Ee[1]/u,ye=Ee[0]ce?ce:0,Ce=Ee[1]be?be:0,ye||Ce){if(!_)x[_++]=[ye||Ee[0],Ce||Ee[1]];else if(De){var Ke=Fe(De,Ee);Ke.length>1&&(xe(Ke[0]),x[_++]=Ke[1])}else Ie=Fe(x[_-1],Ee)[0],x[_++]=Ie;var Be=x[_-1];ye&&Ce&&(Be[0]!==ye||Be[1]!==Ce)?(De&&(Me!==ye&&Le!==Ce?re(Me&&Le?er(De,Ee):[Me||ye,Le||Ce]):Me&&Le&&re([Me,Le])),re([ye,Ce])):Me-ye&&Le-Ce&&re([ye||Me,Ce||Le]),De=Ee,Me=ye,Le=Ce}else De&&xe(Fe(De,Ee)[0]),x[_++]=Ee}for(k=0;k$(P,Pe))break;q=P,G=I[0]*N[0]+I[1]*N[1],G>U?(U=G,C=P,R=!1):G=r.length||!P)break;vr(P),T=P}}De&&re([Me||De[0],Le||De[1]]),b.push(x.slice(0,_))}var me=p.slice(p.length-1);if(f&&me!=="h"&&me!=="v"){for(var Te=!1,Ue=-1,$e=[],Oe=0;Oe{"use strict";var YG={tonextx:1,tonexty:1,tonext:1};VG.exports=function(r,t,a){var n,i,o,l,s,u={},f=!1,c=-1,v=0,d=-1;for(i=0;i=0?s=d:(s=d=v,v++),s{"use strict";var Bo=Pr(),OAe=Tr(),Hd=ke(),L0=Hd.ensureSingle,XG=Hd.identity,sa=Jr(),C0=ri(),HAe=Qw(),UAe=jG(),hg=X7().tester;ZG.exports=function(r,t,a,n,i,o){var l,s,u=!i,f=!!i&&i.duration>0,c=UAe(r,t,a);if(l=n.selectAll("g.trace").data(c,function(d){return d[0].trace.uid}),l.enter().append("g").attr("class",function(d){return"trace scatter trace"+d[0].trace.uid}).style("stroke-miterlimit",2),l.order(),GAe(r,l,t),f){o&&(s=o());var v=Bo.transition().duration(i.duration).ease(i.easing).each("end",function(){s&&s()}).each("interrupt",function(){s&&s()});v.each(function(){n.selectAll("g.trace").each(function(d,p){WG(r,p,t,d,c,this,i)})})}else l.each(function(d,p){WG(r,p,t,d,c,this,i)});u&&l.exit().remove(),n.selectAll("path:not([d])").remove()};function GAe(e,r,t){r.each(function(a){var n=L0(Bo.select(this),"g","fills");sa.setClipUrl(n,t.layerClipId,e);var i=a[0].trace;i._ownFill=null,i._nextFill=null;var o=[];i._ownfill&&o.push("_ownFill"),i._nexttrace&&o.push("_nextFill");var l=n.selectAll("g").data(o,XG);l.enter().append("g"),l.exit().remove(),l.order().each(function(s){i[s]=L0(Bo.select(this),"path","js-fill")})})}function WG(e,r,t,a,n,i,o){var l=e._context.staticPlot,s;YAe(e,r,t,a,n);var u=!!o&&o.duration>0;function f(Se){return u?Se.transition():Se}var c=t.xaxis,v=t.yaxis,d=a[0].trace,p=d.line,y=Bo.select(i),m=L0(y,"g","errorbars"),b=L0(y,"g","lines"),A=L0(y,"g","points"),w=L0(y,"g","text");if(OAe.getComponentMethod("errorbars","plot")(e,m,t,o),d.visible!==!0)return;f(y).style("opacity",d.opacity);var x,_,k=d.fill.charAt(d.fill.length-1);k!=="x"&&k!=="y"&&(k="");var T,q;k==="y"?(T=1,q=v.c2p(0,!0)):k==="x"&&(T=0,q=c.c2p(0,!0)),a[0][t.isRangePlot?"nodeRangePlot3":"node3"]=y;var C="",E=[],P=d._prevtrace,R=null,N=null;P&&(C=P._prevRevpath||"",_=P._nextFill,E=P._ownPolygons,R=P._fillsegments,N=P._fillElement);var I,O,U="",Y="",G,V,W,j,J,te,ae=[];d._polygons=[];var se=[],$=[],fe=Hd.noop;if(x=d._ownFill,C0.hasLines(d)||d.fill!=="none"){_&&_.datum(a),["hv","vh","hvh","vhv"].indexOf(p.shape)!==-1?(G=sa.steps(p.shape),V=sa.steps(p.shape.split("").reverse().join(""))):p.shape==="spline"?G=V=function(Se){var Fe=Se[Se.length-1];return Se.length>1&&Se[0][0]===Fe[0]&&Se[0][1]===Fe[1]?sa.smoothclosed(Se.slice(1),p.smoothing):sa.smoothopen(Se,p.smoothing)}:G=V=function(Se){return"M"+Se.join("L")},W=function(Se){return V(Se.reverse())},$=HAe(a,{xaxis:c,yaxis:v,trace:d,connectGaps:d.connectgaps,baseTolerance:Math.max(p.width||1,3)/4,shape:p.shape,backoff:p.backoff,simplify:p.simplify,fill:d.fill}),se=new Array($.length);var ie=0;for(s=0;s<$.length;s++){var ue,ce=$[s];!ue||!k?(ue=ce.slice(),se[ie]=ue,ie++):ue.push.apply(ue,ce)}d._fillElement=null,d._fillExclusionElement=N,d._fillsegments=se.slice(0,ie),se=d._fillsegments,$.length&&(j=$[0][0].slice(),J=$[$.length-1],te=J[J.length-1].slice()),fe=function(Se){return function(Fe){if(I=G(Fe),O=W(Fe),U?k?(U+="L"+I.slice(1),Y=O+("L"+Y.slice(1))):(U+="Z"+I,Y=O+"Z"+Y):(U=I,Y=O),C0.hasLines(d)){var er=Bo.select(this);if(er.datum(a),Se)f(er.style("opacity",0).attr("d",I).call(sa.lineGroupStyle)).style("opacity",1);else{var re=f(er);re.attr("d",I),sa.singleLineStyle(a,re)}}}}}var oe=b.selectAll(".js-line").data($);f(oe.exit()).style("opacity",0).remove(),oe.each(fe(!1)),oe.enter().append("path").classed("js-line",!0).style("vector-effect",l?"none":"non-scaling-stroke").call(sa.lineGroupStyle).each(fe(!0)),sa.setClipUrl(oe,t.layerClipId,e);function be(Se){f(Se).attr("d","M0,0Z")}var Re=function(){var Se=new Array(se.length);for(s=0;s=l[0]&&y.x<=l[1]&&y.y>=s[0]&&y.y<=s[1]}),v=Math.ceil(c.length/f),d=0;n.forEach(function(y,m){var b=y[0].trace;C0.hasMarkers(b)&&b.marker.maxdisplayed>0&&m{"use strict";$G.exports={container:"marker",min:"cmin",max:"cmax"}});var r8=z((uJe,JG)=>{"use strict";var dg=Yr();JG.exports=function(r,t,a){var n={},i={_fullLayout:a},o=dg.getFromTrace(i,t,"x"),l=dg.getFromTrace(i,t,"y"),s=r.orig_x;s===void 0&&(s=r.x);var u=r.orig_y;return u===void 0&&(u=r.y),n.xLabel=dg.tickText(o,o.c2l(s),!0).text,n.yLabel=dg.tickText(l,l.c2l(u),!0).text,n}});var Af=z((fJe,KG)=>{"use strict";var t8=Pr(),D0=Jr(),VAe=Tr();function jAe(e){var r=t8.select(e).selectAll("g.trace.scatter");r.style("opacity",function(t){return t[0].trace.opacity}),r.selectAll("g.points").each(function(t){var a=t8.select(this),n=t.trace||t[0].trace;a8(a,n,e)}),r.selectAll("g.text").each(function(t){var a=t8.select(this),n=t.trace||t[0].trace;n8(a,n,e)}),r.selectAll("g.trace path.js-line").call(D0.lineGroupStyle),r.selectAll("g.trace path.js-fill").call(D0.fillGroupStyle,e,!1),VAe.getComponentMethod("errorbars","style")(r)}function a8(e,r,t){D0.pointStyle(e.selectAll("path.point"),r,t)}function n8(e,r,t){D0.textPointStyle(e.selectAll("text"),r,t)}function WAe(e,r,t){var a=r[0].trace;a.selectedpoints?(D0.selectedPointStyle(t.selectAll("path.point"),a),D0.selectedTextStyle(t.selectAll("text"),a)):(a8(t,a,e),n8(t,a,e))}KG.exports={style:jAe,stylePoints:a8,styleText:n8,styleOnSelect:WAe}});var eY=z((cJe,QG)=>{"use strict";var E0=qr(),XAe=ri();QG.exports=function(r,t){var a,n;if(r.mode==="lines")return a=r.line.color,a&&E0.opacity(a)?a:r.fillcolor;if(r.mode==="none")return r.fill?r.fillcolor:"";var i=t.mcc||t.mc||(r.marker||{}).color,o=t.mlcc||((r.marker||{}).line||{}).color;return n=i&&E0.opacity(i)?i:o&&E0.opacity(o)&&(t.mlw||((r.marker||{}).line||{}).width)?o:"",n?E0.opacity(n)<.3?E0.addOpacity(n,.3):n:(a=(r.line||{}).color,a&&E0.opacity(a)&&XAe.hasLines(r)&&r.line.width?a:r.fillcolor)}});var o8=z((vJe,tY)=>{"use strict";var pg=ke(),rY=Un(),ZAe=Tr(),$Ae=eY(),i8=qr(),JAe=pg.fillText;tY.exports=function(r,t,a,n){var i=r.cd,o=i[0].trace,l=r.xa,s=r.ya,u=l.c2p(t),f=s.c2p(a),c=[u,f],v=o.hoveron||"",d=o.mode.indexOf("markers")!==-1?3:.5,p=!!o.xperiodalignment,y=!!o.yperiodalignment;if(v.indexOf("points")!==-1){var m=function(Y){if(p){var G=l.c2p(Y.xStart),V=l.c2p(Y.xEnd);return u>=Math.min(G,V)&&u<=Math.max(G,V)?0:1/0}var W=Math.max(3,Y.mrc||0),j=1-1/W,J=Math.abs(l.c2p(Y.x)-u);return J=Math.min(G,V)&&f<=Math.max(G,V)?0:1/0}var W=Math.max(3,Y.mrc||0),j=1-1/W,J=Math.abs(s.c2p(Y.y)-f);return Jae!=be>=ae&&(ue=fe[$-1][0],ce=fe[$][0],be-oe&&(ie=ue+(ce-ue)*(ae-oe)/(be-oe),W=Math.min(W,ie),j=Math.max(j,ie)));return W=Math.max(W,0),j=Math.min(j,l._length),{x0:W,x1:j,y0:ae,y1:ae}}if(v.indexOf("fills")!==-1&&o._fillElement){var I=R(o._fillElement)&&!R(o._fillExclusionElement);if(I){var O=N(o._polygons);O===null&&(O={x0:c[0],x1:c[0],y0:c[1],y1:c[1]});var U=i8.defaultLine;return i8.opacity(o.fillcolor)?U=o.fillcolor:i8.opacity((o.line||{}).color)&&(U=o.line.color),pg.extendFlat(r,{distance:r.maxHoverDistance,x0:O.x0,x1:O.x1,y0:O.y0,y1:O.y1,color:U,hovertemplate:!1}),delete r.index,o.text&&!pg.isArrayOrTypedArray(o.text)?r.text=String(o.text):r.text=o.name,[r]}}}});var l8=z((hJe,nY)=>{"use strict";var aY=ri();nY.exports=function(r,t){var a=r.cd,n=r.xaxis,i=r.yaxis,o=[],l=a[0].trace,s,u,f,c,v=l.mode&&!aY.hasMarkers(l)&&!aY.hasText(l);if(v)return[];if(t===!1)for(s=0;s{"use strict";iY.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}});var fY=z((pJe,uY)=>{"use strict";var mg=Tr().traceIs,s8=Am();uY.exports=function(r,t,a,n){a("autotypenumbers",n.autotypenumbersDflt);var i=a("type",(n.splomStash||{}).type);i==="-"&&(KAe(t,n.data),t.type==="-"?t.type="linear":r.type=t.type)};function KAe(e,r){if(e.type==="-"){var t=e._id,a=t.charAt(0),n;t.indexOf("scene")!==-1&&(t=a);var i=QAe(r,t,a);if(i){if(i.type==="histogram"&&a==={v:"y",h:"x"}[i.orientation||"v"]){e.type="linear";return}var o=a+"calendar",l=i[o],s={noMultiCategory:!mg(i,"cartesian")||mg(i,"noMultiCategory")};if(i.type==="box"&&i._hasPreCompStats&&a==={h:"x",v:"y"}[i.orientation||"v"]&&(s.noMultiCategory=!0),s.autotypenumbers=e.autotypenumbers,sY(i,a)){var u=lY(i),f=[];for(n=0;n0&&(n["_"+t+"axes"]||{})[r])return n;if((n[t+"axis"]||t)===r){if(sY(n,t))return n;if((n[t]||[]).length||n[t+"0"])return n}}}function lY(e){return{v:"x",h:"y"}[e.orientation||"v"]}function sY(e,r){var t=lY(e),a=mg(e,"box-violin");return a&&r===t&&e[t]===void 0&&e[t+"0"]===void 0}});var vY=z((mJe,cY)=>{"use strict";var eTe=Zn().isTypedArraySpec;function rTe(e,r){var t=r.dataAttr||e._id.charAt(0),a={},n,i,o;if(r.axData)n=r.axData;else for(n=[],i=0;i0||eTe(i),l;o&&(l="array");var s=a("categoryorder",l),u;s==="array"&&(u=a("categoryarray")),!o&&s==="array"&&(s=t.categoryorder="trace"),s==="trace"?t._initialCategories=[]:s==="array"?t._initialCategories=u.slice():(u=rTe(t,n).sort(),s==="category ascending"?t._initialCategories=u:s==="category descending"&&(t._initialCategories=u.reverse()))}}});var u8=z((yJe,dY)=>{"use strict";var hY=qr(),tTe=Ii(),aTe=ke();dY.exports=function(r,t,a,n){n=n||{};var i=n.dfltColor;function o(q,C){return aTe.coerce2(r,t,n.attributes,q,C)}var l=o("linecolor",i),s=o("linewidth"),u=a("showline",n.showLine||!!l||!!s);u||(delete t.linecolor,delete t.linewidth);var f=hY.mix(i,n.bgColor,n.blend||tTe.lightFraction),c=o("gridcolor",f),v=o("gridwidth"),d=o("griddash"),p=a("showgrid",n.showGrid||!!c||!!v||!!d);if(p||(delete t.gridcolor,delete t.gridwidth,delete t.griddash),n.hasMinor){var y=hY.mix(t.gridcolor,n.bgColor,67),m=o("minor.gridcolor",y),b=o("minor.gridwidth",t.gridwidth||1),A=o("minor.griddash",t.griddash||"solid"),w=a("minor.showgrid",!!m||!!b||!!A);w||(delete t.minor.gridcolor,delete t.minor.gridwidth,delete t.minor.griddash)}if(!n.noZeroLine){var x=o("zerolinelayer"),_=o("zerolinecolor",i),k=o("zerolinewidth"),T=a("zeroline",n.showGrid||!!_||!!k);T||(delete t.zerolinelayer,delete t.zerolinecolor,delete t.zerolinewidth)}}});var c8=z((gJe,xY)=>{"use strict";var pY=Br(),nTe=Tr(),Gd=ke(),iTe=Ct(),oTe=Po(),f8=Gi(),mY=nm(),yY=im(),lTe=lm(),sTe=sm(),uTe=vY(),fTe=u8(),cTe=U6(),gY=i0(),yg=(Pa(),ze(Ea)).WEEKDAY_PATTERN,vTe=(Pa(),ze(Ea)).HOUR_PATTERN;xY.exports=function(r,t,a,n,i){var o=n.letter,l=n.font||{},s=n.splomStash||{},u=a("visible",!n.visibleDflt),f=t._template||{},c=t.type||f.type||"-",v;if(c==="date"){var d=nTe.getComponentMethod("calendars","handleDefaults");d(r,t,"calendar",n.calendar),n.noTicklabelmode||(v=a("ticklabelmode"))}!n.noTicklabelindex&&(c==="date"||c==="linear")&&a("ticklabelindex");var p="";(!n.noTicklabelposition||c==="multicategory")&&(p=Gd.coerce(r,t,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:v==="period"?["outside","inside"]:o==="x"?["outside","inside","outside left","inside left","outside right","inside right"]:["outside","inside","outside top","inside top","outside bottom","inside bottom"]}},"ticklabelposition")),n.noTicklabeloverflow||a("ticklabeloverflow",p.indexOf("inside")!==-1?"hide past domain":c==="category"||c==="multicategory"?"allow":"hide past div"),gY(t,i),cTe(r,t,a,n),uTe(r,t,a,n),n.noHover||(c!=="category"&&a("hoverformat"),n.noUnifiedhovertitle||a("unifiedhovertitle.text"));var y=a("color"),m=y!==f8.color.dflt?y:l.color,b=s.label||i._dfltTitle[o];if(sTe(r,t,a,c,n),!u)return t;a("title.text",b),Gd.coerceFont(a,"title.font",l,{overrideDflt:{size:Gd.bigFont(l.size),color:m}}),mY(r,t,a,c);var A=n.hasMinor;if(A&&(iTe.newContainer(t,"minor"),mY(r,t,a,c,{isMinor:!0})),lTe(r,t,a,c,n),yY(r,t,a,n),A){var w=n.isMinor;n.isMinor=!0,yY(r,t,a,n),n.isMinor=w}fTe(r,t,a,{dfltColor:y,bgColor:n.bgColor,showGrid:n.showGrid,hasMinor:A,attributes:f8}),A&&t.ticklabelindex==null&&!t.minor.ticks&&!t.minor.showgrid&&delete t.minor,(t.showline||t.ticks)&&a("mirror");var x=c==="multicategory";if(!n.noTickson&&(c==="category"||x)&&(t.ticks||t.showgrid)&&(x?(a("tickson","boundaries"),delete t.ticklabelposition):a("tickson")),x){var _=a("showdividers");_&&(a("dividercolor"),a("dividerwidth"))}if(c==="date")if(oTe(r,t,{name:"rangebreaks",inclusionAttr:"enabled",handleItemDefaults:hTe}),!t.rangebreaks.length)delete t.rangebreaks;else{for(var k=0;k=2){var o="",l,s;if(i.length===2){for(l=0;l<2;l++)if(s=bY(i[l]),s){o=yg;break}}var u=a("pattern",o);if(u===yg)for(l=0;l<2;l++)s=bY(i[l]),s&&(r.bounds[l]=i[l]=s-1);if(u)for(l=0;l<2;l++)switch(s=i[l],u){case yg:if(!pY(s)){r.enabled=!1;return}if(s=+s,s!==Math.floor(s)||s<0||s>=7){r.enabled=!1;return}r.bounds[l]=i[l]=s;break;case vTe:if(!pY(s)){r.enabled=!1;return}if(s=+s,s<0||s>24){r.enabled=!1;return}r.bounds[l]=i[l]=s;break}if(t.autorange===!1){var f=t.range;if(f[0]f[1]){r.enabled=!1;return}}else if(i[0]>f[0]&&i[1]{"use strict";var pTe=Br(),gg=ke();_Y.exports=function(r,t,a,n){var i=n.counterAxes||[],o=n.overlayableAxes||[],l=n.letter,s=n.grid,u=n.overlayingDomain,f,c,v,d,p,y;s&&(c=s._domains[l][s._axisMap[t._id]],f=s._anchors[t._id],c&&(v=s[l+"side"].split(" ")[0],d=s.domain[l][v==="right"||v==="top"?1:0])),c=c||[0,1],f=f||(pTe(r.position)?"free":i[0]||"free"),v=v||(l==="x"?"bottom":"left"),d=d||0,p=0,y=!1;var m=gg.coerce(r,t,{anchor:{valType:"enumerated",values:["free"].concat(i),dflt:f}},"anchor"),b=gg.coerce(r,t,{side:{valType:"enumerated",values:l==="x"?["bottom","top"]:["left","right"],dflt:v}},"side");if(m==="free"){if(l==="y"){var A=a("autoshift");A&&(d=b==="left"?u[0]:u[1],y=t.automargin?t.automargin:!0,p=b==="left"?-3:3),a("shift",p)}a("position",d)}a("automargin",y);var w=!1;if(o.length&&(w=gg.coerce(r,t,{overlaying:{valType:"enumerated",values:[!1].concat(o),dflt:!1}},"overlaying")),!w){var x=a("domain",c);x[0]>x[1]-1/4096&&(t.domain=c),gg.noneOrAll(r.domain,t.domain,c),t.tickmode==="sync"&&(t.tickmode="auto")}return a("layer"),t}});var CY=z((xJe,LY)=>{"use strict";var Tf=ke(),wY=qr(),mTe=Ro().isUnifiedHover,yTe=m7(),AY=Ct(),gTe=Ic(),TY=Gi(),bTe=fY(),MY=c8(),xTe=bf(),kY=v8(),d8=Aa(),wl=d8.id2name,SY=d8.name2id,_Te=(Pa(),ze(Ea)).AX_ID_PATTERN,qY=Tr(),bg=qY.traceIs,h8=qY.getComponentMethod;function xg(e,r,t){Array.isArray(e[r])?e[r].push(t):e[r]=[t]}LY.exports=function(r,t,a){var n=t.autotypenumbers,i={},o={},l={},s={},u={},f={},c={},v={},d={},p={},y,m;for(y=0;y{"use strict";var wTe=Pr(),DY=Tr(),_g=ke(),Mi=Jr(),wg=Yr();EY.exports=function(r,t,a,n){var i=r._fullLayout;if(t.length===0){wg.redrawComponents(r);return}function o(m){var b=m.xaxis,A=m.yaxis;i._defs.select("#"+m.clipId+"> rect").call(Mi.setTranslate,0,0).call(Mi.setScale,1,1),m.plot.call(Mi.setTranslate,b._offset,A._offset).call(Mi.setScale,1,1);var w=m.plot.selectAll(".scatterlayer .trace");w.selectAll(".point").call(Mi.setPointGroupScale,1,1),w.selectAll(".textpoint").call(Mi.setTextPointsScale,1,1),w.call(Mi.hideOutsideRangePoints,m)}function l(m,b){var A=m.plotinfo,w=A.xaxis,x=A.yaxis,_=w._length,k=x._length,T=!!m.xr1,q=!!m.yr1,C=[];if(T){var E=_g.simpleMap(m.xr0,w.r2l),P=_g.simpleMap(m.xr1,w.r2l),R=E[1]-E[0],N=P[1]-P[0];C[0]=(E[0]*(1-b)+b*P[0]-E[0])/(E[1]-E[0])*_,C[2]=_*(1-b+b*N/R),w.range[0]=w.l2r(E[0]*(1-b)+b*P[0]),w.range[1]=w.l2r(E[1]*(1-b)+b*P[1])}else C[0]=0,C[2]=_;if(q){var I=_g.simpleMap(m.yr0,x.r2l),O=_g.simpleMap(m.yr1,x.r2l),U=I[1]-I[0],Y=O[1]-O[0];C[1]=(I[1]*(1-b)+b*O[1]-I[1])/(I[0]-I[1])*k,C[3]=k*(1-b+b*Y/U),x.range[0]=w.l2r(I[0]*(1-b)+b*O[0]),x.range[1]=x.l2r(I[1]*(1-b)+b*O[1])}else C[1]=0,C[3]=k;wg.drawOne(r,w,{skipTitle:!0}),wg.drawOne(r,x,{skipTitle:!0}),wg.redrawComponents(r,[w._id,x._id]);var G=T?_/C[2]:1,V=q?k/C[3]:1,W=T?C[0]:0,j=q?C[1]:0,J=T?C[0]/C[2]*_:0,te=q?C[1]/C[3]*k:0,ae=w._offset-J,se=x._offset-te;A.clipRect.call(Mi.setTranslate,W,j).call(Mi.setScale,1/G,1/V),A.plot.call(Mi.setTranslate,ae,se).call(Mi.setScale,G,V),Mi.setPointGroupScale(A.zoomScalePts,1/G,1/V),Mi.setTextPointsScale(A.zoomScaleTxt,1/G,1/V)}var s;n&&(s=n());function u(){for(var m={},b=0;ba.duration?(u(),d=window.cancelAnimationFrame(y)):d=window.requestAnimationFrame(y)}return c=Date.now(),d=window.requestAnimationFrame(y),Promise.resolve()}});var io=z(yn=>{"use strict";var Tg=Pr(),RY=Tr(),Mf=ke(),ATe=ma(),TTe=Jr(),FY=Jp().getModuleCalcData,Zs=Aa(),Oo=(Pa(),ze(Ea)),MTe=(Vl(),ze(Yl)),at=Mf.ensureSingle;function Ag(e,r,t){return Mf.ensureSingle(e,r,t,function(a){a.datum(t)})}var kf=Oo.zindexSeparator;yn.name="cartesian";yn.attr=["xaxis","yaxis"];yn.idRoot=["x","y"];yn.idRegex=Oo.idRegex;yn.attrRegex=Oo.attrRegex;yn.attributes=oY();yn.layoutAttributes=Gi();yn.supplyLayoutDefaults=CY();yn.transitionAxes=PY();yn.finalizeSubplots=function(e,r){var t=r._subplots,a=t.xaxis,n=t.yaxis,i=t.cartesian,o=i,l={},s={},u,f,c;for(u=0;u0){var d=v.id;if(d.indexOf(kf)!==-1)continue;d+=kf+(u+1),v=Mf.extendFlat({},v,{id:d,plot:n._cartesianlayer.selectAll(".subplot").select("."+d)})}for(var p=[],y,m=0;m1&&(_+=kf+x),w.push(l+_),o=0;o1,c=r.mainplotinfo;if(!r.mainplot||f)if(u)r.xlines=at(a,"path","xlines-above"),r.ylines=at(a,"path","ylines-above"),r.xaxislayer=at(a,"g","xaxislayer-above"),r.yaxislayer=at(a,"g","yaxislayer-above");else{if(!o){var v=at(a,"g","layer-subplot");r.shapelayer=at(v,"g","shapelayer"),r.imagelayer=at(v,"g","imagelayer"),c&&f?(r.minorGridlayer=c.minorGridlayer,r.gridlayer=c.gridlayer,r.zerolinelayer=c.zerolinelayer):(r.minorGridlayer=at(a,"g","minor-gridlayer"),r.gridlayer=at(a,"g","gridlayer"),r.zerolinelayer=at(a,"g","zerolinelayer"));var d=at(a,"g","layer-between");r.shapelayerBetween=at(d,"g","shapelayer"),r.imagelayerBetween=at(d,"g","imagelayer"),at(a,"path","xlines-below"),at(a,"path","ylines-below"),r.overlinesBelow=at(a,"g","overlines-below"),at(a,"g","xaxislayer-below"),at(a,"g","yaxislayer-below"),r.overaxesBelow=at(a,"g","overaxes-below")}r.overplot=at(a,"g","overplot"),r.plot=at(r.overplot,"g",n),c&&f?r.zerolinelayerAbove=c.zerolinelayerAbove:r.zerolinelayerAbove=at(a,"g","zerolinelayer-above"),o||(r.xlines=at(a,"path","xlines-above"),r.ylines=at(a,"path","ylines-above"),r.overlinesAbove=at(a,"g","overlines-above"),at(a,"g","xaxislayer-above"),at(a,"g","yaxislayer-above"),r.overaxesAbove=at(a,"g","overaxes-above"),r.xlines=a.select(".xlines-"+l),r.ylines=a.select(".ylines-"+s),r.xaxislayer=a.select(".xaxislayer-"+l),r.yaxislayer=a.select(".yaxislayer-"+s))}else{var p=c.plotgroup,y=n+"-x",m=n+"-y";r.minorGridlayer=c.minorGridlayer,r.gridlayer=c.gridlayer,r.zerolinelayer=c.zerolinelayer,r.zerolinelayerAbove=c.zerolinelayerAbove,at(c.overlinesBelow,"path",y),at(c.overlinesBelow,"path",m),at(c.overaxesBelow,"g",y),at(c.overaxesBelow,"g",m),r.plot=at(c.overplot,"g",n),at(c.overlinesAbove,"path",y),at(c.overlinesAbove,"path",m),at(c.overaxesAbove,"g",y),at(c.overaxesAbove,"g",m),r.xlines=p.select(".overlines-"+l).select("."+y),r.ylines=p.select(".overlines-"+s).select("."+m),r.xaxislayer=p.select(".overaxes-"+l).select("."+y),r.yaxislayer=p.select(".overaxes-"+s).select("."+m)}o||(u||(Ag(r.minorGridlayer,"g",r.xaxis._id),Ag(r.minorGridlayer,"g",r.yaxis._id),r.minorGridlayer.selectAll("g").map(function(b){return b[0]}).sort(Zs.idSort),Ag(r.gridlayer,"g",r.xaxis._id),Ag(r.gridlayer,"g",r.yaxis._id),r.gridlayer.selectAll("g").map(function(b){return b[0]}).sort(Zs.idSort)),r.xlines.style("fill","none").classed("crisp",!0),r.ylines.style("fill","none").classed("crisp",!0))}function IY(e,r){if(e){var t={};e.each(function(s){var u=s[0],f=Tg.select(this);f.remove(),BY(u,r),t[u]=!0});for(var a in r._plots)for(var n=r._plots[a],i=n.overlays||[],o=0;o{"use strict";var Mg=ri();OY.exports={hasLines:Mg.hasLines,hasMarkers:Mg.hasMarkers,hasText:Mg.hasText,isBubble:Mg.isBubble,attributes:Ji(),layoutAttributes:Xp(),supplyDefaults:sG(),crossTraceDefaults:cG(),supplyLayoutDefaults:hG(),calc:sg().calc,crossTraceCalc:NG(),arraysToCalcdata:og(),plot:e8(),colorbar:Ud(),formatLabels:r8(),style:Af().style,styleOnSelect:Af().styleOnSelect,hoverPoints:o8(),selectPoints:l8(),animatable:!0,moduleType:"trace",name:"scatter",basePlotModule:io(),categories:["cartesian","svg","symbols","errorBarsOK","showLegend","scatter-like","zoomScale"],meta:{}}});var YY=z((TJe,GY)=>{"use strict";var STe=Pr(),qTe=qr(),UY=ow(),p8=ke(),LTe=p8.strScale,CTe=p8.strRotate,DTe=p8.strTranslate;GY.exports=function(r,t,a){var n=r.node(),i=UY[a.arrowhead||0],o=UY[a.startarrowhead||0],l=(a.arrowwidth||1)*(a.arrowsize||1),s=(a.arrowwidth||1)*(a.startarrowsize||1),u=t.indexOf("start")>=0,f=t.indexOf("end")>=0,c=i.backoff*l+a.standoff,v=o.backoff*s+a.startstandoff,d,p,y,m;if(n.nodeName==="line"){d={x:+r.attr("x1"),y:+r.attr("y1")},p={x:+r.attr("x2"),y:+r.attr("y2")};var b=d.x-p.x,A=d.y-p.y;if(y=Math.atan2(A,b),m=y+Math.PI,c&&v&&c+v>Math.sqrt(b*b+A*A)){I();return}if(c){if(c*c>b*b+A*A){I();return}var w=c*Math.cos(y),x=c*Math.sin(y);p.x+=w,p.y+=x,r.attr({x2:p.x,y2:p.y})}if(v){if(v*v>b*b+A*A){I();return}var _=v*Math.cos(y),k=v*Math.sin(y);d.x-=_,d.y-=k,r.attr({x1:d.x,y1:d.y})}}else if(n.nodeName==="path"){var T=n.getTotalLength(),q="";if(T{"use strict";var VY=Pr(),m8=Tr(),ETe=ma(),Js=ke(),y8=Js.strTranslate,Vd=Yr(),Sf=qr(),es=Jr(),jY=Un(),g8=Fa(),b8=Os(),Yd=Vi(),PTe=Ct().arrayEditor,RTe=YY();ZY.exports={draw:FTe,drawOne:WY,drawRaw:XY};function FTe(e){var r=e._fullLayout;r._infolayer.selectAll(".annotation").remove();for(var t=0;t2/3?yr="right":yr="center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[yr]}for(var oe=!1,be=["x","y"],Re=0;Re1)&&(Me===Ce?(Pe=Le.r2fraction(r["a"+ye]),(Pe<0||Pe>1)&&(oe=!0)):oe=!0),Fe=Le._offset+Le.r2p(r[ye]),xe=.5}else{var me=vr==="domain";ye==="x"?(re=r[ye],Fe=me?Le._offset+Le._length*re:Fe=l.l+l.w*re):(re=1-r[ye],Fe=me?Le._offset+Le._length*re:Fe=l.t+l.h*re),xe=r.showarrow?.5:re}if(r.showarrow){Se.head=Fe;var Te=r["a"+ye];if(Ye=Ie*ce(.5,r.xanchor)-qe*ce(.5,r.yanchor),Me===Ce){var Ue=Vd.getRefType(Me);Ue==="domain"?(ye==="y"&&(Te=1-Te),Se.tail=Le._offset+Le._length*Te):Ue==="paper"?ye==="y"?(Te=1-Te,Se.tail=l.t+l.h*Te):Se.tail=l.l+l.w*Te:Se.tail=Le._offset+Le.r2p(Te),er=Ye}else Se.tail=Fe+Te,er=Ye+Te;Se.text=Se.tail+Ye;var $e=o[ye==="x"?"width":"height"];if(Ce==="paper"&&(Se.head=Js.constrain(Se.head,1,$e-1)),Me==="pixel"){var Oe=-Math.max(Se.tail-3,Se.text),We=Math.min(Se.tail+3,Se.text)-$e;Oe>0?(Se.tail+=Oe,Se.text+=Oe):We>0&&(Se.tail-=We,Se.text-=We)}Se.tail+=Xe,Se.head+=Xe}else Ye=Ze*ce(xe,Je),er=Ye,Se.text=Fe+Ye;Se.text+=Xe,Ye+=Xe,er+=Xe,r["_"+ye+"padplus"]=Ze/2+er,r["_"+ye+"padminus"]=Ze/2-er,r["_"+ye+"size"]=Ze,r["_"+ye+"shift"]=Ye}if(oe){T.remove();return}var ar=0,or=0;if(r.align!=="left"&&(ar=($-ae)*(r.align==="center"?.5:1)),r.valign!=="top"&&(or=(fe-se)*(r.valign==="middle"?.5:1)),J)j.select("svg").attr({x:E+ar-1,y:E+or}).call(es.setClipUrl,R?y:null,e);else{var sr=E+or-te.top,Ee=E+ar-te.left;U.call(g8.positionText,Ee,sr).call(es.setClipUrl,R?y:null,e)}N.select("rect").call(es.setRect,E,E,$,fe),P.call(es.setRect,q/2,q/2,ie-q,ue-q),T.call(es.setTranslate,Math.round(m.x.text-ie/2),Math.round(m.y.text-ue/2)),w.attr({transform:"rotate("+b+","+m.x.text+","+m.y.text+")"});var Ke=function(mr,yr){A.selectAll(".annotation-arrow-g").remove();var ur=m.x.head,gr=m.y.head,ne=m.x.tail+mr,ge=m.y.tail+yr,Ne=m.x.text+mr,He=m.y.text+yr,Kr=Js.rotationXYMatrix(b,Ne,He),Qr=Js.apply2DTransform(Kr),yt=Js.apply2DTransform2(Kr),gt=+P.attr("width"),Et=+P.attr("height"),aa=Ne-.5*gt,$a=aa+gt,na=He-.5*Et,Ja=na+Et,hn=[[aa,na,aa,Ja],[aa,Ja,$a,Ja],[$a,Ja,$a,na],[$a,na,aa,na]].map(yt);if(!hn.reduce(function(Pt,oa){return Pt^!!Js.segmentsIntersect(ur,gr,ur+1e6,gr+1e6,oa[0],oa[1],oa[2],oa[3])},!1)){hn.forEach(function(Pt){var oa=Js.segmentsIntersect(ne,ge,ur,gr,Pt[0],Pt[1],Pt[2],Pt[3]);oa&&(ne=oa.x,ge=oa.y)});var fa=r.arrowwidth,hr=r.arrowcolor,wt=r.arrowside,Vr=A.append("g").style({opacity:Sf.opacity(hr)}).classed("annotation-arrow-g",!0),ht=Vr.append("path").attr("d","M"+ne+","+ge+"L"+ur+","+gr).style("stroke-width",fa+"px").call(Sf.stroke,Sf.rgb(hr));if(RTe(ht,wt,r),s.annotationPosition&&ht.node().parentNode&&!a){var Nt=ur,kt=gr;if(r.standoff){var it=Math.sqrt(Math.pow(ur-ne,2)+Math.pow(gr-ge,2));Nt+=r.standoff*(ne-ur)/it,kt+=r.standoff*(ge-gr)/it}var ia=Vr.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).classed("cursor-move",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(ne-Nt)+","+(ge-kt),transform:y8(Nt,kt)}).style("stroke-width",fa+6+"px").call(Sf.stroke,"rgba(0,0,0,0)").call(Sf.fill,"rgba(0,0,0,0)"),zn,Xt;Yd.init({element:ia.node(),gd:e,prepFn:function(){var Pt=es.getTranslate(T);zn=Pt.x,Xt=Pt.y,n&&n.autorange&&v(n._name+".autorange",!0),i&&i.autorange&&v(i._name+".autorange",!0)},moveFn:function(Pt,oa){var la=Qr(zn,Xt),dt=la[0]+Pt,Ka=la[1]+oa;T.call(es.setTranslate,dt,Ka),d("x",$s(n,Pt,"x",l,r)),d("y",$s(i,oa,"y",l,r)),r.axref===r.xref&&d("ax",$s(n,Pt,"ax",l,r)),r.ayref===r.yref&&d("ay",$s(i,oa,"ay",l,r)),Vr.attr("transform",y8(Pt,oa)),w.attr({transform:"rotate("+b+","+dt+","+Ka+")"})},doneFn:function(){m8.call("_guiRelayout",e,p());var Pt=document.querySelector(".js-notes-box-panel");Pt&&Pt.redraw(Pt.selectedObj)}})}}};if(r.showarrow&&Ke(0,0),x){var Be;Yd.init({element:T.node(),gd:e,prepFn:function(){Be=w.attr("transform")},moveFn:function(mr,yr){var ur="pointer";if(r.showarrow)r.axref===r.xref?d("ax",$s(n,mr,"ax",l,r)):d("ax",r.ax+mr),r.ayref===r.yref?d("ay",$s(i,yr,"ay",l.w,r)):d("ay",r.ay+yr),Ke(mr,yr);else{if(a)return;var gr,ne;if(n)gr=$s(n,mr,"x",l,r);else{var ge=r._xsize/l.w,Ne=r.x+(r._xshift-r.xshift)/l.w-ge/2;gr=Yd.align(Ne+mr/l.w,ge,0,1,r.xanchor)}if(i)ne=$s(i,yr,"y",l,r);else{var He=r._ysize/l.h,Kr=r.y-(r._yshift+r.yshift)/l.h-He/2;ne=Yd.align(Kr-yr/l.h,He,0,1,r.yanchor)}d("x",gr),d("y",ne),(!n||!i)&&(ur=Yd.getCursor(n?.5:gr,i?.5:ne,r.xanchor,r.yanchor))}w.attr({transform:y8(mr,yr)+Be}),b8(T,ur)},clickFn:function(mr,yr){r.captureevents&&e.emit("plotly_clickannotation",k(yr))},doneFn:function(){b8(T),m8.call("_guiRelayout",e,p());var mr=document.querySelector(".js-notes-box-panel");mr&&mr.redraw(mr.selectedObj)}})}}s.annotationText?U.call(g8.makeEditable,{delegate:T,gd:e}).call(Y).on("edit",function(V){r.text=V,this.call(Y),d("text",V),n&&n.autorange&&v(n._name+".autorange",!0),i&&i.autorange&&v(i._name+".autorange",!0),m8.call("_guiRelayout",e,p())}):U.call(Y)}});var rV=z((kJe,eV)=>{"use strict";var $Y=ke(),zTe=Tr(),JY=Ct().arrayEditor;eV.exports={hasClickToShow:NTe,onClick:ITe};function NTe(e,r){var t=QY(e,r);return t.on.length>0||t.explicitOff.length>0}function ITe(e,r){var t=QY(e,r),a=t.on,n=t.off.concat(t.explicitOff),i={},o=e._fullLayout.annotations,l,s;if(a.length||n.length){for(l=0;l{"use strict";var x8=ke(),P0=qr();tV.exports=function(r,t,a,n){n("opacity");var i=n("bgcolor"),o=n("bordercolor"),l=P0.opacity(o);n("borderpad");var s=n("borderwidth"),u=n("showarrow");n("text",u?" ":a._dfltTitle.annotation),n("textangle"),x8.coerceFont(n,"font",a.font),n("width"),n("align");var f=n("height");if(f&&n("valign"),u){var c=n("arrowside"),v,d;c.indexOf("end")!==-1&&(v=n("arrowhead"),d=n("arrowsize")),c.indexOf("start")!==-1&&(n("startarrowhead",v),n("startarrowsize",d)),n("arrowcolor",l?t.bordercolor:P0.defaultLine),n("arrowwidth",(l&&s||1)*2),n("standoff"),n("startstandoff")}var p=n("hovertext"),y=a.hoverlabel||{};if(p){var m=n("hoverlabel.bgcolor",y.bgcolor||(P0.opacity(i)?P0.rgb(i):P0.defaultLine)),b=n("hoverlabel.bordercolor",y.bordercolor||P0.contrast(m)),A=x8.extendFlat({},y.font);A.color||(A.color=b),x8.coerceFont(n,"hoverlabel.font",A)}n("captureevents",!!p)}});var nV=z((qJe,aV)=>{"use strict";var w8=ke(),qf=Yr(),BTe=Po(),OTe=_8(),HTe=w0();aV.exports=function(r,t){BTe(r,t,{name:"annotations",handleItemDefaults:UTe})};function UTe(e,r,t){function a(w,x){return w8.coerce(e,r,HTe,w,x)}var n=a("visible"),i=a("clicktoshow");if(n||i){OTe(e,r,t,a);for(var o=r.showarrow,l=["x","y"],s=[-10,-30],u={_fullLayout:t},f=0;f<2;f++){var c=l[f],v=qf.coerceRef(e,r,u,c,"","paper");if(v!=="paper"){var d=qf.getFromId(u,v);d._annIndices.push(r._index)}if(qf.coercePosition(r,u,a,v,c,.5),o){var p="a"+c,y=qf.coerceRef(e,r,u,p,"pixel",["pixel","paper"]);y!=="pixel"&&y!==v&&(y=r[p]="pixel");var m=y==="pixel"?s[f]:.4;qf.coercePosition(r,u,a,y,p,m)}a(c+"anchor"),a(c+"shift")}if(w8.noneOrAll(e,r,["x","y"]),o&&w8.noneOrAll(e,r,["ax","ay"]),i){var b=a("xclick"),A=a("yclick");r._xclick=b===void 0?r.x:qf.cleanPosition(b,u,r.xref),r._yclick=A===void 0?r.y:qf.cleanPosition(A,u,r.yref)}}}});var lV=z((LJe,oV)=>{"use strict";var A8=ke(),Lf=Yr(),GTe=kg().draw;oV.exports=function(r){var t=r._fullLayout,a=A8.filterVisible(t.annotations);if(a.length&&r._fullData.length)return A8.syncOrAsync([GTe,YTe],r)};function YTe(e){var r=e._fullLayout;A8.filterVisible(r.annotations).forEach(function(t){var a=Lf.getFromId(e,t.xref),n=Lf.getFromId(e,t.yref),i=Lf.getRefType(t.xref),o=Lf.getRefType(t.yref);t._extremes={},i==="range"&&iV(t,a),o==="range"&&iV(t,n)})}function iV(e,r){var t=r._id,a=t.charAt(0),n=e[a],i=e["a"+a],o=e[a+"ref"],l=e["a"+a+"ref"],s=e["_"+a+"padplus"],u=e["_"+a+"padminus"],f={x:1,y:-1}[a]*e[a+"shift"],c=3*e.arrowsize*e.arrowwidth||0,v=c+f,d=c-f,p=3*e.startarrowsize*e.arrowwidth||0,y=p+f,m=p-f,b;if(l===o){var A=Lf.findExtremes(r,[r.r2c(n)],{ppadplus:v,ppadminus:d}),w=Lf.findExtremes(r,[r.r2c(i)],{ppadplus:Math.max(s,y),ppadminus:Math.max(u,m)});b={min:[A.min[0],w.min[0]],max:[A.max[0],w.max[0]]}}else y=i?y+i:y,m=i?m-i:m,b=Lf.findExtremes(r,[r.r2c(n)],{ppadplus:Math.max(s,v,y),ppadminus:Math.max(u,d,m)});e._extremes[t]=b}});var uV=z((CJe,sV)=>{"use strict";var VTe=Br(),jTe=V1();sV.exports=function(r,t,a,n){t=t||{};var i=a==="log"&&t.type==="linear",o=a==="linear"&&t.type==="log";if(!(i||o))return;var l=r._fullLayout.annotations,s=t._id.charAt(0),u,f;function c(d){var p=u[d],y=null;i?y=jTe(p,t.range):y=Math.pow(10,p),VTe(y)||(y=null),n(f+d,y)}for(var v=0;v{"use strict";var T8=kg(),fV=rV();cV.exports={moduleType:"component",name:"annotations",layoutAttributes:w0(),supplyLayoutDefaults:nV(),includeBasePlot:Td()("annotations"),calcAutorange:lV(),draw:T8.draw,drawOne:T8.drawOne,drawRaw:T8.drawRaw,hasClickToShow:fV.hasClickToShow,onClick:fV.onClick,convertCoords:uV()}});var Sg=z((EJe,hV)=>{"use strict";var Ft=w0(),WTe=qo().overrideAll,XTe=Ct().templatedArray;hV.exports=WTe(XTe("annotation",{visible:Ft.visible,x:{valType:"any"},y:{valType:"any"},z:{valType:"any"},ax:{valType:"number"},ay:{valType:"number"},xanchor:Ft.xanchor,xshift:Ft.xshift,yanchor:Ft.yanchor,yshift:Ft.yshift,text:Ft.text,textangle:Ft.textangle,font:Ft.font,width:Ft.width,height:Ft.height,opacity:Ft.opacity,align:Ft.align,valign:Ft.valign,bgcolor:Ft.bgcolor,bordercolor:Ft.bordercolor,borderpad:Ft.borderpad,borderwidth:Ft.borderwidth,showarrow:Ft.showarrow,arrowcolor:Ft.arrowcolor,arrowhead:Ft.arrowhead,startarrowhead:Ft.startarrowhead,arrowside:Ft.arrowside,arrowsize:Ft.arrowsize,startarrowsize:Ft.startarrowsize,arrowwidth:Ft.arrowwidth,standoff:Ft.standoff,startstandoff:Ft.startstandoff,hovertext:Ft.hovertext,hoverlabel:Ft.hoverlabel,captureevents:Ft.captureevents}),"calc","from-root")});var pV=z((PJe,dV)=>{"use strict";var M8=ke(),ZTe=Yr(),$Te=Po(),JTe=_8(),KTe=Sg();dV.exports=function(r,t,a){$Te(r,t,{name:"annotations",handleItemDefaults:QTe,fullLayout:a.fullLayout})};function QTe(e,r,t,a){function n(l,s){return M8.coerce(e,r,KTe,l,s)}function i(l){var s=l+"axis",u={_fullLayout:{}};return u._fullLayout[s]=t[s],ZTe.coercePosition(r,u,n,l,l,.5)}var o=n("visible");o&&(JTe(e,r,a.fullLayout,n),i("x"),i("y"),i("z"),M8.noneOrAll(e,r,["x","y","z"]),r.xref="x",r.yref="y",r.zref="z",n("xanchor"),n("yanchor"),n("xshift"),n("yshift"),r.showarrow&&(r.axref="pixel",r.ayref="pixel",n("ax",-10),n("ay",-30),M8.noneOrAll(e,r,["ax","ay"])))}});var bV=z((RJe,gV)=>{"use strict";var mV=ke(),yV=Yr();gV.exports=function(r){for(var t=r.fullSceneLayout,a=t.annotations,n=0;n{"use strict";function k8(e,r){var t=[0,0,0,0],a,n;for(a=0;a<4;++a)for(n=0;n<4;++n)t[n]+=e[4*a+n]*r[a];return t}function rMe(e,r){var t=k8(e.projection,k8(e.view,k8(e.model,[r[0],r[1],r[2],1])));return t}xV.exports=rMe});var AV=z((zJe,wV)=>{"use strict";var tMe=kg().drawRaw,aMe=_V(),nMe=["x","y","z"];wV.exports=function(r){for(var t=r.fullSceneLayout,a=r.dataScale,n=t.annotations,i=0;i1){l=!0;break}}l?r.fullLayout._infolayer.select(".annotation-"+r.id+'[data-index="'+i+'"]').remove():(o._pdata=aMe(r.glplot.cameraParams,[t.xaxis.r2l(o.x)*a[0],t.yaxis.r2l(o.y)*a[1],t.zaxis.r2l(o.z)*a[2]]),tMe(r.graphDiv,o,i,r.id,o._xa,o._ya))}}});var kV=z((NJe,MV)=>{"use strict";var iMe=Tr(),TV=ke();MV.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:Sg()}}},layoutAttributes:Sg(),handleDefaults:pV(),includeBasePlot:oMe,convert:bV(),draw:AV()};function oMe(e,r){var t=iMe.subplotsRegistry.gl3d;if(t)for(var a=t.attrRegex,n=Object.keys(e),i=0;i{"use strict";var IJe=(Pa(),ze(Ea)),SV=Ca(),qV=Ji().line,lMe=Bi().dash,Ho=Mt().extendFlat,sMe=Ct().templatedArray,BJe=(xd(),ze(bd)),R0=On(),LV=w0(),{shapeTexttemplateAttrs:uMe,templatefallbackAttrs:fMe}=di(),cMe=Sp();CV.exports=sMe("shape",{visible:Ho({},R0.visible,{editType:"calc+arraydraw"}),showlegend:{valType:"boolean",dflt:!1,editType:"calc+arraydraw"},legend:Ho({},R0.legend,{editType:"calc+arraydraw"}),legendgroup:Ho({},R0.legendgroup,{editType:"calc+arraydraw"}),legendgrouptitle:{text:Ho({},R0.legendgrouptitle.text,{editType:"calc+arraydraw"}),font:SV({editType:"calc+arraydraw"}),editType:"calc+arraydraw"},legendrank:Ho({},R0.legendrank,{editType:"calc+arraydraw"}),legendwidth:Ho({},R0.legendwidth,{editType:"calc+arraydraw"}),type:{valType:"enumerated",values:["circle","rect","path","line"],editType:"calc+arraydraw"},layer:{valType:"enumerated",values:["below","above","between"],dflt:"above",editType:"arraydraw"},xref:Ho({},LV.xref,{arrayOk:!0}),xsizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},xanchor:{valType:"any",editType:"calc+arraydraw"},x0:{valType:"any",editType:"calc+arraydraw"},x1:{valType:"any",editType:"calc+arraydraw"},x0shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},x1shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},yref:Ho({},LV.yref,{arrayOk:!0}),ysizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},yanchor:{valType:"any",editType:"calc+arraydraw"},y0:{valType:"any",editType:"calc+arraydraw"},y1:{valType:"any",editType:"calc+arraydraw"},y0shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},y1shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},path:{valType:"string",editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},line:{color:Ho({},qV.color,{editType:"arraydraw"}),width:Ho({},qV.width,{editType:"calc+arraydraw"}),dash:Ho({},lMe,{editType:"arraydraw"}),editType:"calc+arraydraw"},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd",editType:"arraydraw"},editable:{valType:"boolean",dflt:!1,editType:"calc+arraydraw"},label:{text:{valType:"string",dflt:"",editType:"arraydraw"},texttemplate:uMe({},{keys:Object.keys(cMe)}),texttemplatefallback:fMe({editType:"arraydraw"}),font:SV({editType:"calc+arraydraw",colorEditType:"arraydraw"}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right","start","middle","end"],editType:"arraydraw"},textangle:{valType:"angle",dflt:"auto",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],editType:"calc+arraydraw"},padding:{valType:"number",dflt:3,min:0,editType:"arraydraw"},editType:"arraydraw"},editType:"arraydraw"})});var EV=z((HJe,DV)=>{"use strict";var F0=ke(),ki=Yr(),vMe=Po(),hMe=S8(),jd=Vs();DV.exports=function(r,t){vMe(r,t,{name:"shapes",handleItemDefaults:pMe})};function dMe(e,r){return e?"bottom":r.indexOf("top")!==-1?"top":r.indexOf("bottom")!==-1?"bottom":"middle"}function pMe(e,r,t){function a(w,x){return F0.coerce(e,r,hMe,w,x)}r._isShape=!0;var n=a("visible");if(!n)return;var i=a("showlegend");a("legend"),a("legendgroup"),i&&(a("legendwidth"),a("legendgrouptitle.text"),F0.coerceFont(a,"legendgrouptitle.font"),a("legendrank"));var o=a("path"),l=o?"path":"rect",s=a("type",l),u=s!=="path";u&&delete r.path,a("editable"),a("layer"),a("opacity"),a("fillcolor"),a("fillrule");var f=a("line.width");f&&(a("line.color"),a("line.dash"));var c=a("xsizemode"),v=a("ysizemode");let d=[.25,.75],p=[0,10];["x","y"].forEach(w=>{var x=w+"anchor",_=w==="x"?c:v,k={_fullLayout:t},T,q,C,E;let P=w+"ref",R=e[P];if(Array.isArray(R)&&R.length>0){let N=jd.countDefiningCoords(s,o,w);E=ki.coerceRefArray(e,r,k,w,void 0,"paper",N),r["_"+w+"refArray"]=!0}else E=ki.coerceRef(e,r,k,w,void 0,"paper");if(Array.isArray(E))E.forEach(function(N){ki.getRefType(N)==="range"&&(T=ki.getFromId(k,N),T&&T._shapeIndices.indexOf(r._index)===-1&&T._shapeIndices.push(r._index))}),u&&[0,1].forEach(function(N){let I=E[N];ki.getRefType(I)==="range"?(T=ki.getFromId(k,I),q=jd.shapePositionToRange(T),C=jd.rangeToShapePosition(T),(T.type==="category"||T.type==="multicategory")&&a(w+N+"shift")):q=C=F0.identity;let U=w+N,Y=e[U];if(e[U]=q(e[U],!0),_==="pixel"?a(U,p[N]):ki.coercePosition(r,k,a,I,U,d[N]),r[U]=C(r[U]),e[U]=Y,N===0&&_==="pixel"){let G=e[x];e[x]=q(e[x],!0),ki.coercePosition(r,k,a,I,x,.25),r[x]=C(r[x]),e[x]=G}});else{if(ki.getRefType(E)==="range"?(T=ki.getFromId(k,E),T._shapeIndices.push(r._index),C=jd.rangeToShapePosition(T),q=jd.shapePositionToRange(T),u&&(T.type==="category"||T.type==="multicategory")&&(a(w+"0shift"),a(w+"1shift"))):q=C=F0.identity,u){let I=w+"0",O=w+"1",U=e[I],Y=e[O];e[I]=q(e[I],!0),e[O]=q(e[O],!0),_==="pixel"?(a(I,p[0]),a(O,p[1])):(ki.coercePosition(r,k,a,E,I,d[0]),ki.coercePosition(r,k,a,E,O,d[1])),r[I]=C(r[I]),r[O]=C(r[O]),e[I]=U,e[O]=Y}if(_==="pixel"){let I=e[x];e[x]=q(e[x],!0),ki.coercePosition(r,k,a,E,x,.25),r[x]=C(r[x]),e[x]=I}}}),u&&F0.noneOrAll(e,r,["x0","x1","y0","y1"]);var y=s==="line",m,b;if(u&&(m=a("label.texttemplate"),a("label.texttemplatefallback")),m||(b=a("label.text")),b||m){a("label.textangle");var A=a("label.textposition",y?"middle":"middle center");a("label.xanchor"),a("label.yanchor",dMe(y,A)),a("label.padding"),F0.coerceFont(a,"label.font",t.font)}}});var FV=z((UJe,RV)=>{"use strict";var mMe=qr(),PV=ke();function yMe(e,r){return e?"bottom":r.indexOf("top")!==-1?"top":r.indexOf("bottom")!==-1?"bottom":"middle"}RV.exports=function(r,t,a){a("newshape.visible"),a("newshape.name"),a("newshape.showlegend"),a("newshape.legend"),a("newshape.legendwidth"),a("newshape.legendgroup"),a("newshape.legendgrouptitle.text"),PV.coerceFont(a,"newshape.legendgrouptitle.font"),a("newshape.legendrank"),a("newshape.drawdirection"),a("newshape.layer"),a("newshape.fillcolor"),a("newshape.fillrule"),a("newshape.opacity");var n=a("newshape.line.width");if(n){var i=(r||{}).plot_bgcolor||"#FFF";a("newshape.line.color",mMe.contrast(i)),a("newshape.line.dash")}var o=r.dragmode==="drawline",l=a("newshape.label.text"),s=a("newshape.label.texttemplate");if(a("newshape.label.texttemplatefallback"),l||s){a("newshape.label.textangle");var u=a("newshape.label.textposition",o?"middle":"middle center");a("newshape.label.xanchor"),a("newshape.label.yanchor",yMe(o,u)),a("newshape.label.padding"),PV.coerceFont(a,"newshape.label.font",t.font)}a("activeshape.fillcolor"),a("activeshape.opacity")}});var UV=z((GJe,HV)=>{"use strict";var q8=ke(),oo=Yr(),Al=(ed(),ze(Qh)),L8=Vs();HV.exports=function(r){var t=r._fullLayout,a=q8.filterVisible(t.shapes);if(!(!a.length||!r._fullData.length))for(var n=0;n{o=oo.getFromId(r,c),i._extremes[o._id]=oo.findExtremes(o,v,NV(i))})}else i.xref!=="paper"&&s!=="domain"&&(o=oo.getFromId(r,i.xref),l=BV(o,i,Al.paramIsX),l&&(i._extremes[o._id]=oo.findExtremes(o,l,NV(i))));if(u==="array"){let f=zV(r,i,"y");Object.entries(f).forEach(([c,v])=>{o=oo.getFromId(r,c),i._extremes[o._id]=oo.findExtremes(o,v,IV(i))})}else i.yref!=="paper"&&u!=="domain"&&(o=oo.getFromId(r,i.yref),l=BV(o,i,Al.paramIsY),l&&(i._extremes[o._id]=oo.findExtremes(o,l,IV(i))))}};function zV(e,r,t){let a=r[t+"ref"],n=t==="x"?Al.paramIsX:Al.paramIsY;function i(c,v){c==="paper"||oo.getRefType(c)==="domain"||(o[c]||(o[c]=[]),o[c].push(v))}let o={};if(r.type==="path"&&r.path){let c=r.path.match(Al.segmentRE)||[];for(var l=0,s=0;sp&&(i(a[l],y[p]),l++)}}else i(a[0],r[t+"0"]),i(a[1],r[t+"1"]);let u={};for(let c in o){let v=oo.getFromId(e,c);if(v){var f=v.type==="category"||v.type==="multicategory"?v.r2c:v.d2c;v.type==="date"&&(f=L8.decodeDate(f)),u[v._id]=o[c].map(f)}}return u}function NV(e){return OV(e.line.width,e.xsizemode,e.x0,e.x1,e.path,!1)}function IV(e){return OV(e.line.width,e.ysizemode,e.y0,e.y1,e.path,!0)}function OV(e,r,t,a,n,i){var o=e/2,l=i;if(r==="pixel"){var s=n?L8.extractPathCoords(n,i?Al.paramIsY:Al.paramIsX):[t,a],u=q8.aggNums(Math.max,null,s),f=q8.aggNums(Math.min,null,s),c=f<0?Math.abs(f)+o:o,v=u>0?u+o:o;return{ppad:o,ppadplus:l?c:v,ppadminus:l?v:c}}else return{ppad:o}}function BV(e,r,t){var a=e._id.charAt(0)==="x"?"x":"y",n=e.type==="category"||e.type==="multicategory",i,o,l=0,s=0,u=n?e.r2c:e.d2c,f=r[a+"sizemode"]==="scaled";if(f?(i=r[a+"0"],o=r[a+"1"],n&&(l=r[a+"0shift"],s=r[a+"1shift"])):(i=r[a+"anchor"],o=r[a+"anchor"]),i!==void 0)return[u(i)+l,u(o)+s];if(r.path){var c=1/0,v=-1/0,d=r.path.match(Al.segmentRE),p,y,m,b,A;for(e.type==="date"&&(u=L8.decodeDate(u)),p=0;pv&&(v=A)));if(v>=c)return[c,v]}}});var VV=z((YJe,YV)=>{"use strict";var GV=hy();YV.exports={moduleType:"component",name:"shapes",layoutAttributes:S8(),supplyLayoutDefaults:EV(),supplyDrawNewShapeDefaults:FV(),includeBasePlot:Td()("shapes"),calcAutorange:UV(),draw:GV.draw,drawOne:GV.drawOne}});var C8=z((jJe,WV)=>{"use strict";var jV=(Pa(),ze(Ea)),gMe=Ct().templatedArray,VJe=(xd(),ze(bd));WV.exports=gMe("image",{visible:{valType:"boolean",dflt:!0,editType:"arraydraw"},source:{valType:"string",editType:"arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},sizex:{valType:"number",dflt:0,editType:"arraydraw"},sizey:{valType:"number",dflt:0,editType:"arraydraw"},sizing:{valType:"enumerated",values:["fill","contain","stretch"],dflt:"contain",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},x:{valType:"any",dflt:0,editType:"arraydraw"},y:{valType:"any",dflt:0,editType:"arraydraw"},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left",editType:"arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"top",editType:"arraydraw"},xref:{valType:"enumerated",values:["paper",jV.idRegex.x.toString()],dflt:"paper",editType:"arraydraw"},yref:{valType:"enumerated",values:["paper",jV.idRegex.y.toString()],dflt:"paper",editType:"arraydraw"},editType:"arraydraw"})});var ZV=z((WJe,XV)=>{"use strict";var bMe=ke(),D8=Yr(),xMe=Po(),_Me=C8(),wMe="images";XV.exports=function(r,t){var a={name:wMe,handleItemDefaults:AMe};xMe(r,t,a)};function AMe(e,r,t){function a(v,d){return bMe.coerce(e,r,_Me,v,d)}var n=a("source"),i=a("visible",!!n);if(!i)return r;a("layer"),a("xanchor"),a("yanchor"),a("sizex"),a("sizey"),a("sizing"),a("opacity");for(var o={_fullLayout:t},l=["x","y"],s=0;s<2;s++){var u=l[s],f=D8.coerceRef(e,r,o,u,"paper",void 0);if(f!=="paper"){var c=D8.getFromId(o,f);c._imgIndices.push(r._index)}D8.coercePosition(r,o,a,f,u,0)}return r}});var QV=z((XJe,KV)=>{"use strict";var $V=Pr(),TMe=Jr(),z0=Yr(),JV=Aa(),MMe=(Vl(),ze(Yl));KV.exports=function(r){var t=r._fullLayout,a=[],n={},i=[],o,l;for(l=0;l{"use strict";var ej=Br(),kMe=V1();rj.exports=function(r,t,a,n){t=t||{};var i=a==="log"&&t.type==="linear",o=a==="linear"&&t.type==="log";if(i||o){for(var l=r._fullLayout.images,s=t._id.charAt(0),u,f,c=0;c{"use strict";aj.exports={moduleType:"component",name:"images",layoutAttributes:C8(),supplyLayoutDefaults:ZV(),includeBasePlot:Td()("images"),draw:QV(),convertCoords:tj()}});var qg={};qt(qg,{activeColor:()=>JMe,arrowOffsetX:()=>XMe,arrowPadX:()=>GMe,arrowSymbol:()=>QMe,autoMarginIdRoot:()=>IMe,blankHeaderOpts:()=>BMe,buttonClassName:()=>RMe,containerClassName:()=>qMe,dropdownButtonClassName:()=>PMe,dropdownButtonGroupClassName:()=>EMe,gapButton:()=>$Me,gapButtonHeader:()=>ZMe,headerArrowClassName:()=>DMe,headerClassName:()=>CMe,headerGroupClassName:()=>LMe,hoverColor:()=>KMe,itemRectClassName:()=>FMe,itemTextClassName:()=>zMe,menuIndexAttrName:()=>NMe,minHeight:()=>HMe,minWidth:()=>OMe,name:()=>SMe,rx:()=>YMe,ry:()=>VMe,textOffsetX:()=>jMe,textOffsetY:()=>WMe,textPadX:()=>UMe});var SMe,qMe,LMe,CMe,DMe,EMe,PMe,RMe,FMe,zMe,NMe,IMe,BMe,OMe,HMe,UMe,GMe,YMe,VMe,jMe,WMe,XMe,ZMe,$Me,JMe,KMe,QMe,Lg=St(()=>{"use strict";SMe="updatemenus",qMe="updatemenu-container",LMe="updatemenu-header-group",CMe="updatemenu-header",DMe="updatemenu-header-arrow",EMe="updatemenu-dropdown-button-group",PMe="updatemenu-dropdown-button",RMe="updatemenu-button",FMe="updatemenu-item-rect",zMe="updatemenu-item-text",NMe="updatemenu-active-index",IMe="updatemenu-",BMe={label:" "},OMe=30,HMe=30,UMe=24,GMe=16,YMe=2,VMe=2,jMe=12,WMe=3,XMe=4,ZMe=5,$Me=2,JMe="#F4FAFF",KMe="#F4FAFF",QMe={left:"\u25C4",right:"\u25BA",up:"\u25B2",down:"\u25BC"}});var E8=z((JJe,oj)=>{"use strict";var eke=Ca(),rke=Ii(),tke=Mt().extendFlat,ake=qo().overrideAll,nke=qp(),ij=Ct().templatedArray,ike=ij("button",{visible:{valType:"boolean"},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},args2:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}});oj.exports=ake(ij("updatemenu",{_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:ike,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:tke(nke({editType:"arraydraw"}),{}),font:eke({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:rke.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}}),"arraydraw","from-root")});var fj=z((KJe,uj)=>{"use strict";var Cg=ke(),lj=Po(),sj=E8(),oke=(Lg(),ze(qg)),lke=oke.name,ske=sj.buttons;uj.exports=function(r,t){var a={name:lke,handleItemDefaults:uke};lj(r,t,a)};function uke(e,r,t){function a(o,l){return Cg.coerce(e,r,sj,o,l)}var n=lj(e,r,{name:"buttons",handleItemDefaults:fke}),i=a("visible",n.length>0);i&&(a("active"),a("direction"),a("type"),a("showactive"),a("x"),a("y"),Cg.noneOrAll(e,r,["x","y"]),a("xanchor"),a("yanchor"),a("pad.t"),a("pad.r"),a("pad.b"),a("pad.l"),Cg.coerceFont(a,"font",t.font),a("bgcolor",t.paper_bgcolor),a("bordercolor"),a("borderwidth"))}function fke(e,r){function t(n,i){return Cg.coerce(e,r,ske,n,i)}var a=t("visible",e.method==="skip"||Array.isArray(e.args));a&&(t("method"),t("args"),t("args2"),t("label"),t("execute"))}});var hj=z((QJe,vj)=>{"use strict";vj.exports=$t;var Uo=Pr(),cj=qr(),N0=Jr(),Dg=ke();function $t(e,r,t){this.gd=e,this.container=r,this.id=t,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll("rect.scrollbox-bg").data([0]),this.bg.exit().on(".drag",null).on("wheel",null).remove(),this.bg.enter().append("rect").classed("scrollbox-bg",!0).style("pointer-events","all").attr({opacity:0,x:0,y:0,width:0,height:0})}$t.barWidth=2;$t.barLength=20;$t.barRadius=2;$t.barPad=1;$t.barColor="#808BA4";$t.prototype.enable=function(r,t,a){var n=this.gd._fullLayout,i=n.width,o=n.height;this.position=r;var l=this.position.l,s=this.position.w,u=this.position.t,f=this.position.h,c=this.position.direction,v=c==="down",d=c==="left",p=c==="right",y=c==="up",m=s,b=f,A,w,x,_;!v&&!d&&!p&&!y&&(this.position.direction="down",v=!0);var k=v||y;k?(A=l,w=A+m,v?(x=u,_=Math.min(x+b,o),b=_-x):(_=u+b,x=Math.max(_-b,0),b=_-x)):(x=u,_=x+b,d?(w=l+m,A=Math.max(w-m,0),m=w-A):(A=l,w=Math.min(A+m,i),m=w-A)),this._box={l:A,t:x,w:m,h:b};var T=s>m,q=$t.barLength+2*$t.barPad,C=$t.barWidth+2*$t.barPad,E=l,P=u+f;P+C>o&&(P=o-C);var R=this.container.selectAll("rect.scrollbar-horizontal").data(T?[0]:[]);R.exit().on(".drag",null).remove(),R.enter().append("rect").classed("scrollbar-horizontal",!0).call(cj.fill,$t.barColor),T?(this.hbar=R.attr({rx:$t.barRadius,ry:$t.barRadius,x:E,y:P,width:q,height:C}),this._hbarXMin=E+q/2,this._hbarTranslateMax=m-q):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var N=f>b,I=$t.barWidth+2*$t.barPad,O=$t.barLength+2*$t.barPad,U=l+s,Y=u;U+I>i&&(U=i-I);var G=this.container.selectAll("rect.scrollbar-vertical").data(N?[0]:[]);G.exit().on(".drag",null).remove(),G.enter().append("rect").classed("scrollbar-vertical",!0).call(cj.fill,$t.barColor),N?(this.vbar=G.attr({rx:$t.barRadius,ry:$t.barRadius,x:U,y:Y,width:I,height:O}),this._vbarYMin=Y+O/2,this._vbarTranslateMax=b-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var V=this.id,W=A-.5,j=N?w+I+.5:w+.5,J=x-.5,te=T?_+C+.5:_+.5,ae=n._topdefs.selectAll("#"+V).data(T||N?[0]:[]);if(ae.exit().remove(),ae.enter().append("clipPath").attr("id",V).append("rect"),T||N?(this._clipRect=ae.select("rect").attr({x:Math.floor(W),y:Math.floor(J),width:Math.ceil(j)-Math.floor(W),height:Math.ceil(te)-Math.floor(J)}),this.container.call(N0.setClipUrl,V,this.gd),this.bg.attr({x:l,y:u,width:s,height:f})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(N0.setClipUrl,null),delete this._clipRect),T||N){var se=Uo.behavior.drag().on("dragstart",function(){Uo.event.sourceEvent.preventDefault()}).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(se);var $=Uo.behavior.drag().on("dragstart",function(){Uo.event.sourceEvent.preventDefault(),Uo.event.sourceEvent.stopPropagation()}).on("drag",this._onBarDrag.bind(this));T&&this.hbar.on(".drag",null).call($),N&&this.vbar.on(".drag",null).call($)}this.setTranslate(t,a)};$t.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(N0.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)};$t.prototype._onBoxDrag=function(){var r=this.translateX,t=this.translateY;this.hbar&&(r-=Uo.event.dx),this.vbar&&(t-=Uo.event.dy),this.setTranslate(r,t)};$t.prototype._onBoxWheel=function(){var r=this.translateX,t=this.translateY;this.hbar&&(r+=Uo.event.deltaY),this.vbar&&(t+=Uo.event.deltaY),this.setTranslate(r,t)};$t.prototype._onBarDrag=function(){var r=this.translateX,t=this.translateY;if(this.hbar){var a=r+this._hbarXMin,n=a+this._hbarTranslateMax,i=Dg.constrain(Uo.event.x,a,n),o=(i-a)/(n-a),l=this.position.w-this._box.w;r=o*l}if(this.vbar){var s=t+this._vbarYMin,u=s+this._vbarTranslateMax,f=Dg.constrain(Uo.event.y,s,u),c=(f-s)/(u-s),v=this.position.h-this._box.h;t=c*v}this.setTranslate(r,t)};$t.prototype.setTranslate=function(r,t){var a=this.position.w-this._box.w,n=this.position.h-this._box.h;if(r=Dg.constrain(r||0,0,a),t=Dg.constrain(t||0,0,n),this.translateX=r,this.translateY=t,this.container.call(N0.setTranslate,this._box.l-this.position.l-r,this._box.t-this.position.t-t),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+r-.5),y:Math.floor(this.position.t+t-.5)}),this.hbar){var i=r/a;this.hbar.call(N0.setTranslate,r+i*this._hbarTranslateMax,t)}if(this.vbar){var o=t/n;this.vbar.call(N0.setTranslate,r,t+o*this._vbarTranslateMax)}}});var Aj=z((eKe,wj)=>{"use strict";var I0=Pr(),Wd=ma(),Xd=qr(),B0=Jr(),Si=ke(),Eg=Fa(),cke=Ct().arrayEditor,pj=(on(),ze(nn)).LINE_SPACING,Lr=(Lg(),ze(qg)),vke=hj();wj.exports=function(r){var t=r._fullLayout,a=Si.filterVisible(t[Lr.name]);function n(v){Wd.autoMargin(r,xj(v))}var i=t._menulayer.selectAll("g."+Lr.containerClassName).data(a.length>0?[0]:[]);if(i.enter().append("g").classed(Lr.containerClassName,!0).style("cursor","pointer"),i.exit().each(function(){I0.select(this).selectAll("g."+Lr.headerGroupClassName).each(n)}).remove(),a.length!==0){var o=i.selectAll("g."+Lr.headerGroupClassName).data(a,hke);o.enter().append("g").classed(Lr.headerGroupClassName,!0);for(var l=Si.ensureSingle(i,"g",Lr.dropdownButtonGroupClassName,function(v){v.style("pointer-events","all")}),s=0;s{"use strict";var xke=(Lg(),ze(qg));Tj.exports={moduleType:"component",name:xke.name,layoutAttributes:E8(),supplyLayoutDefaults:fj(),draw:Aj()}});var $d={};qt($d,{arrowOffsetX:()=>Oke,autoMarginIdRoot:()=>zke,containerClassName:()=>wke,currentValueClass:()=>Pke,currentValueInset:()=>hSe,currentValuePadding:()=>vSe,gripBgActiveColor:()=>tSe,gripBgColor:()=>rSe,gripBorder:()=>Kke,gripBorderColor:()=>eSe,gripBorderWidth:()=>Qke,gripHeight:()=>Jke,gripRadius:()=>Zke,gripRectClass:()=>Ske,gripWidth:()=>$ke,groupClassName:()=>Ake,inputAreaClass:()=>Tke,inputProxyClass:()=>Lke,labelClass:()=>Eke,labelGroupClass:()=>Dke,labelOffset:()=>nSe,labelPadding:()=>aSe,labelsClass:()=>Cke,menuIndexAttrName:()=>Fke,minHeight:()=>Ike,minWidth:()=>Nke,minorTickColor:()=>fSe,minorTickLength:()=>cSe,minorTickOffset:()=>uSe,name:()=>_ke,railBgColor:()=>jke,railBorder:()=>Gke,railBorderColor:()=>Vke,railBorderWidth:()=>Yke,railHeight:()=>Rke,railInset:()=>Wke,railRadius:()=>Hke,railRectClass:()=>Mke,railTouchRectClass:()=>kke,railWidth:()=>Uke,stepInset:()=>Xke,textPadX:()=>Bke,tickColor:()=>oSe,tickLength:()=>sSe,tickOffset:()=>lSe,tickRectClass:()=>qke,tickWidth:()=>iSe});var _ke,wke,Ake,Tke,Mke,kke,Ske,qke,Lke,Cke,Dke,Eke,Pke,Rke,Fke,zke,Nke,Ike,Bke,Oke,Hke,Uke,Gke,Yke,Vke,jke,Wke,Xke,Zke,$ke,Jke,Kke,Qke,eSe,rSe,tSe,aSe,nSe,iSe,oSe,lSe,sSe,uSe,fSe,cSe,vSe,hSe,Jd=St(()=>{"use strict";_ke="sliders",wke="slider-container",Ake="slider-group",Tke="slider-input-area",Mke="slider-rail-rect",kke="slider-rail-touch-rect",Ske="slider-grip-rect",qke="slider-tick-rect",Lke="slider-input-proxy",Cke="slider-labels",Dke="slider-label-group",Eke="slider-label",Pke="slider-current-value",Rke=5,Fke="slider-active-index",zke="slider-",Nke=30,Ike=30,Bke=40,Oke=4,Hke=2,Uke=5,Gke=4,Yke=1,Vke="#bec8d9",jke="#f8fafc",Wke=8,Xke=10,Zke=10,$ke=20,Jke=20,Kke=20,Qke=1,eSe="#bec8d9",rSe="#f6f8fa",tSe="#dbdde0",aSe=8,nSe=0,iSe=1,oSe="#333",lSe=25,sSe=7,uSe=25,fSe="#333",cSe=4,vSe=8,hSe=0});var z8=z((tKe,qj)=>{"use strict";var kj=Ca(),dSe=qp(),pSe=Mt().extendDeepAll,mSe=qo().overrideAll,ySe=Ah(),Sj=Ct().templatedArray,Cf=(Jd(),ze($d)),gSe=Sj("step",{visible:{valType:"boolean",dflt:!0},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string"},value:{valType:"string"},execute:{valType:"boolean",dflt:!0}});qj.exports=mSe(Sj("slider",{visible:{valType:"boolean",dflt:!0},active:{valType:"number",min:0,dflt:0},steps:gSe,lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",min:-2,max:3,dflt:0},pad:pSe(dSe({editType:"arraydraw"}),{},{t:{dflt:20}}),xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left"},y:{valType:"number",min:-2,max:3,dflt:0},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},transition:{duration:{valType:"number",min:0,dflt:150},easing:{valType:"enumerated",values:ySe.transition.easing.values,dflt:"cubic-in-out"}},currentvalue:{visible:{valType:"boolean",dflt:!0},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},offset:{valType:"number",dflt:10},prefix:{valType:"string"},suffix:{valType:"string"},font:kj({})},font:kj({}),activebgcolor:{valType:"color",dflt:Cf.gripBgActiveColor},bgcolor:{valType:"color",dflt:Cf.railBgColor},bordercolor:{valType:"color",dflt:Cf.railBorderColor},borderwidth:{valType:"number",min:0,dflt:Cf.railBorderWidth},ticklen:{valType:"number",min:0,dflt:Cf.tickLength},tickcolor:{valType:"color",dflt:Cf.tickColor},tickwidth:{valType:"number",min:0,dflt:1},minorticklen:{valType:"number",min:0,dflt:Cf.minorTickLength}}),"arraydraw","from-root")});var Ej=z((aKe,Dj)=>{"use strict";var O0=ke(),Lj=Po(),Cj=z8(),bSe=(Jd(),ze($d)),xSe=bSe.name,_Se=Cj.steps;Dj.exports=function(r,t){Lj(r,t,{name:xSe,handleItemDefaults:wSe})};function wSe(e,r,t){function a(c,v){return O0.coerce(e,r,Cj,c,v)}for(var n=Lj(e,r,{name:"steps",handleItemDefaults:ASe}),i=0,o=0;o{"use strict";var Go=Pr(),Pg=ma(),Ks=qr(),Yo=Jr(),qi=ke(),TSe=qi.strTranslate,Kd=Fa(),MSe=Ct().arrayEditor,Hr=(Jd(),ze($d)),B8=(on(),ze(nn)),Fj=B8.LINE_SPACING,N8=B8.FROM_TL,I8=B8.FROM_BR;Hj.exports=function(r){var t=r._context.staticPlot,a=r._fullLayout,n=kSe(a,r),i=a._infolayer.selectAll("g."+Hr.containerClassName).data(n.length>0?[0]:[]);i.enter().append("g").classed(Hr.containerClassName,!0).style("cursor",t?null:"ew-resize");function o(f){f._commandObserver&&(f._commandObserver.remove(),delete f._commandObserver),Pg.autoMargin(r,zj(f))}if(i.exit().each(function(){Go.select(this).selectAll("g."+Hr.groupClassName).each(o)}).remove(),n.length!==0){var l=i.selectAll("g."+Hr.groupClassName).data(n,SSe);l.enter().append("g").classed(Hr.groupClassName,!0),l.exit().each(o).remove();for(var s=0;s0&&(l=l.transition().duration(r.transition.duration).ease(r.transition.easing)),l.attr("transform",TSe(o-Hr.gripWidth*.5,r._dims.currentValueTotalHeight))}}function O8(e,r){var t=e._dims;return t.inputAreaStart+Hr.stepInset+(t.inputAreaLength-2*Hr.stepInset)*Math.min(1,Math.max(0,r))}function Rj(e,r){var t=e._dims;return Math.min(1,Math.max(0,(r-Hr.stepInset-t.inputAreaStart)/(t.inputAreaLength-2*Hr.stepInset-2*t.inputAreaStart)))}function RSe(e,r,t){var a=t._dims,n=qi.ensureSingle(e,"rect",Hr.railTouchRectClass,function(i){i.call(Bj,r,e,t).style("pointer-events","all")});n.attr({width:a.inputAreaLength,height:Math.max(a.inputAreaWidth,Hr.tickOffset+t.ticklen+a.labelHeight)}).call(Ks.fill,t.bgcolor).attr("opacity",0),Yo.setTranslate(n,0,a.currentValueTotalHeight)}function FSe(e,r){var t=r._dims,a=t.inputAreaLength-Hr.railInset*2,n=qi.ensureSingle(e,"rect",Hr.railRectClass);n.attr({width:a,height:Hr.railWidth,rx:Hr.railRadius,ry:Hr.railRadius,"shape-rendering":"crispEdges"}).call(Ks.stroke,r.bordercolor).call(Ks.fill,r.bgcolor).style("stroke-width",r.borderwidth+"px"),Yo.setTranslate(n,Hr.railInset,(t.inputAreaWidth-Hr.railWidth)*.5+t.currentValueTotalHeight)}});var Yj=z((iKe,Gj)=>{"use strict";var zSe=(Jd(),ze($d));Gj.exports={moduleType:"component",name:zSe.name,layoutAttributes:z8(),supplyLayoutDefaults:Ej(),draw:Uj()}});var Fg=z((oKe,jj)=>{"use strict";var Vj=Ii();jj.exports={bgcolor:{valType:"color",dflt:Vj.background,editType:"plot"},bordercolor:{valType:"color",dflt:Vj.defaultLine,editType:"plot"},borderwidth:{valType:"integer",dflt:0,min:0,editType:"plot"},autorange:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},range:{valType:"info_array",items:[{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}}],editType:"calc",impliedEdits:{autorange:!1}},thickness:{valType:"number",dflt:.15,min:0,max:1,editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"}});var H8=z((lKe,Wj)=>{"use strict";Wj.exports={_isSubplotObj:!0,rangemode:{valType:"enumerated",values:["auto","fixed","match"],dflt:"match",editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},editType:"calc"}});var zg={};qt(zg,{bgClassName:()=>BSe,containerClassName:()=>ISe,extraPad:()=>sqe,grabAreaCursor:()=>aqe,grabAreaFill:()=>tqe,grabAreaMaxClassName:()=>XSe,grabAreaMinClassName:()=>VSe,grabAreaWidth:()=>nqe,grabberMaxClassName:()=>WSe,grabberMinClassName:()=>YSe,handleMaxClassName:()=>ZSe,handleMinClassName:()=>jSe,handleRadius:()=>oqe,handleStrokeWidth:()=>lqe,handleWidth:()=>iqe,maskColor:()=>KSe,maskMaxClassName:()=>USe,maskMaxOppAxisClassName:()=>JSe,maskMinClassName:()=>HSe,maskMinOppAxisClassName:()=>$Se,maskOppAxisColor:()=>QSe,name:()=>NSe,rangePlotClassName:()=>OSe,slideBoxClassName:()=>GSe,slideBoxCursor:()=>rqe,slideBoxFill:()=>eqe});var NSe,ISe,BSe,OSe,HSe,USe,GSe,YSe,VSe,jSe,WSe,XSe,ZSe,$Se,JSe,KSe,QSe,eqe,rqe,tqe,aqe,nqe,iqe,oqe,lqe,sqe,Ng=St(()=>{"use strict";NSe="rangeslider",ISe="rangeslider-container",BSe="rangeslider-bg",OSe="rangeslider-rangeplot",HSe="rangeslider-mask-min",USe="rangeslider-mask-max",GSe="rangeslider-slidebox",YSe="rangeslider-grabber-min",VSe="rangeslider-grabarea-min",jSe="rangeslider-handle-min",WSe="rangeslider-grabber-max",XSe="rangeslider-grabarea-max",ZSe="rangeslider-handle-max",$Se="rangeslider-mask-min-opp-axis",JSe="rangeslider-mask-max-opp-axis",KSe="rgba(0,0,0,0.4)",QSe="rgba(0,0,0,0.2)",eqe="transparent",rqe="ew-resize",tqe="transparent",aqe="col-resize",nqe=10,iqe=4,oqe=1,lqe=1,sqe=15});var $j=z(Bg=>{"use strict";var uqe=Aa(),fqe=Fa(),Xj=(Ng(),ze(zg)),cqe=(on(),ze(nn)).LINE_SPACING,Ig=Xj.name;function Zj(e){var r=e&&e[Ig];return r&&r.visible}Bg.isVisible=Zj;Bg.makeData=function(e){for(var r=uqe.list({_fullLayout:e},"x",!0),t=e.margin,a=[],n=0;n{"use strict";var Og=ke(),Jj=Ct(),Kj=Aa(),vqe=Fg(),hqe=H8();Qj.exports=function(r,t,a){var n=r[a],i=t[a];if(!(n.rangeslider||t._requestRangeslider[i._id]))return;Og.isPlainObject(n.rangeslider)||(n.rangeslider={});var o=n.rangeslider,l=Jj.newContainer(i,"rangeslider");function s(_,k){return Og.coerce(o,l,vqe,_,k)}var u,f;function c(_,k){return Og.coerce(u,f,hqe,_,k)}var v=s("visible");if(v){s("bgcolor",t.plot_bgcolor),s("bordercolor"),s("borderwidth"),s("thickness"),s("autorange",!i.isValidRange(o.range)),s("range");var d=t._subplots;if(d)for(var p=d.cartesian.filter(function(_){return _.slice(0,Math.max(0,_.indexOf("y")))===Kj.name2id(a)}).map(function(_){return _.slice(_.indexOf("y"),_.length)}),y=Og.simpleMap(p,Kj.id2name),m=0;m{"use strict";var dqe=Aa().list,pqe=Bh().getAutoRange,mqe=(Ng(),ze(zg));rW.exports=function(r){for(var t=dqe(r,"x",!0),a=0;a{"use strict";var Hg=Pr(),yqe=Tr(),gqe=ma(),ua=ke(),Ug=ua.strTranslate,nW=Jr(),Qs=qr(),bqe=n0(),xqe=io(),U8=Aa(),_qe=Vi(),wqe=Os(),Wr=(Ng(),ze(zg));iW.exports=function(e){for(var r=e._fullLayout,t=r._rangeSliderData,a=0;a=G.max)U=P[Y+1];else if(O=G.pmax)U=P[Y+1];else if(O0?e.touches[0].clientX:0}function Aqe(e,r,t,a){if(r._context.staticPlot)return;var n=e.select("rect."+Wr.slideBoxClassName).node(),i=e.select("rect."+Wr.grabAreaMinClassName).node(),o=e.select("rect."+Wr.grabAreaMaxClassName).node();function l(){var s=Hg.event,u=s.target,f=aW(s),c=f-e.node().getBoundingClientRect().left,v=a.d2p(t._rl[0]),d=a.d2p(t._rl[1]),p=_qe.coverSlip();this.addEventListener("touchmove",y),this.addEventListener("touchend",m),p.addEventListener("mousemove",y),p.addEventListener("mouseup",m);function y(b){var A=aW(b),w=+A-f,x,_,k;switch(u){case n:if(k="ew-resize",v+w>t._length||d+w<0)return;x=v+w,_=d+w;break;case i:if(k="col-resize",v+w>t._length)return;x=v+w,_=d;break;case o:if(k="col-resize",d+w<0)return;x=v,_=d+w;break;default:k="ew-resize",x=c,_=c+w;break}if(_{"use strict";var Pqe=ke(),Rqe=Fg(),Fqe=H8(),G8=$j();lW.exports={moduleType:"component",name:"rangeslider",schema:{subplots:{xaxis:{rangeslider:Pqe.extendFlat({},Rqe,{yaxis:Fqe})}}},layoutAttributes:Fg(),handleDefaults:eW(),calcAutorange:tW(),draw:oW(),isVisible:G8.isVisible,makeData:G8.makeData,autoMarginOpts:G8.autoMarginOpts}});var Gg=z((hKe,fW)=>{"use strict";var zqe=Ca(),uW=Ii(),Nqe=Ct().templatedArray,Iqe=Nqe("button",{visible:{valType:"boolean",dflt:!0,editType:"plot"},step:{valType:"enumerated",values:["month","year","day","hour","minute","second","all"],dflt:"month",editType:"plot"},stepmode:{valType:"enumerated",values:["backward","todate"],dflt:"backward",editType:"plot"},count:{valType:"number",min:0,dflt:1,editType:"plot"},label:{valType:"string",editType:"plot"},editType:"plot"});fW.exports={visible:{valType:"boolean",editType:"plot"},buttons:Iqe,x:{valType:"number",min:-2,max:3,editType:"plot"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"plot"},y:{valType:"number",min:-2,max:3,editType:"plot"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"bottom",editType:"plot"},font:zqe({editType:"plot"}),bgcolor:{valType:"color",dflt:uW.lightLine,editType:"plot"},activecolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:uW.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"}});var Y8={};qt(Y8,{darkAmount:()=>Yqe,lightAmount:()=>Gqe,minButtonWidth:()=>Oqe,rx:()=>Hqe,ry:()=>Uqe,yPad:()=>Bqe});var Bqe,Oqe,Hqe,Uqe,Gqe,Yqe,V8=St(()=>{"use strict";Bqe=.02,Oqe=30,Hqe=3,Uqe=3,Gqe=25,Yqe=10});var hW=z((dKe,vW)=>{"use strict";var Yg=ke(),Vqe=qr(),jqe=Ct(),Wqe=Po(),cW=Gg(),j8=(V8(),ze(Y8));vW.exports=function(r,t,a,n,i){var o=r.rangeselector||{},l=jqe.newContainer(t,"rangeselector");function s(d,p){return Yg.coerce(o,l,cW,d,p)}var u=Wqe(o,l,{name:"buttons",handleItemDefaults:Xqe,calendar:i}),f=s("visible",u.length>0);if(f){var c=Zqe(t,a,n);s("x",c[0]),s("y",c[1]),Yg.noneOrAll(r,t,["x","y"]),s("xanchor"),s("yanchor"),Yg.coerceFont(s,"font",a.font);var v=s("bgcolor");s("activecolor",Vqe.contrast(v,j8.lightAmount,j8.darkAmount)),s("bordercolor"),s("borderwidth")}};function Xqe(e,r,t,a){var n=a.calendar;function i(s,u){return Yg.coerce(e,r,cW.buttons,s,u)}var o=i("visible");if(o){var l=i("step");l!=="all"&&(n&&n!=="gregorian"&&(l==="month"||l==="year")?r.stepmode="backward":i("stepmode"),i("count")),i("label")}}function Zqe(e,r,t){for(var a=t.filter(function(l){return r[l].anchor===e._id}),n=0,i=0;i{"use strict";var $qe=u5(),Jqe=ke().titleCase;dW.exports=function(r,t){var a=r._name,n={};if(t.step==="all")n[a+".autorange"]=!0;else{var i=Kqe(r,t);n[a+".range[0]"]=i[0],n[a+".range[1]"]=i[1]}return n};function Kqe(e,r){var t=e.range,a=new Date(e.r2l(t[1])),n=r.step,i=$qe["utc"+Jqe(n)],o=r.count,l;switch(r.stepmode){case"backward":l=e.l2r(+i.offset(a,-o));break;case"todate":var s=i.offset(a,-o);l=e.l2r(+i.ceil(s));break}var u=t[1];return[l,u]}});var AW=z((mKe,wW)=>{"use strict";var jg=Pr(),Qqe=Tr(),eLe=ma(),mW=qr(),_W=Jr(),rs=ke(),yW=rs.strTranslate,Vg=Fa(),rLe=Aa(),Z8=(on(),ze(nn)),gW=Z8.LINE_SPACING,bW=Z8.FROM_TL,xW=Z8.FROM_BR,X8=(V8(),ze(Y8)),tLe=pW();wW.exports=function(r){var t=r._fullLayout,a=t._infolayer.selectAll(".rangeselector").data(aLe(r),nLe);a.enter().append("g").classed("rangeselector",!0),a.exit().remove(),a.style({cursor:"pointer","pointer-events":"all"}),a.each(function(n){var i=jg.select(this),o=n,l=o.rangeselector,s=i.selectAll("g.button").data(rs.filterVisible(l.buttons));s.enter().append("g").classed("button",!0),s.exit().remove(),s.each(function(u){var f=jg.select(this),c=tLe(o,u);u._isActive=iLe(o,u,c),f.call(W8,l,u),f.call(lLe,l,u,r),f.on("click",function(){r._dragged||Qqe.call("_guiRelayout",r,c)}),f.on("mouseover",function(){u._isHovered=!0,f.call(W8,l,u)}),f.on("mouseout",function(){u._isHovered=!1,f.call(W8,l,u)})}),uLe(r,s,l,o._name,i)})};function aLe(e){for(var r=rLe.list(e,"x",!0),t=[],a=0;a{"use strict";TW.exports={moduleType:"component",name:"rangeselector",schema:{subplots:{xaxis:{rangeselector:Gg()}}},layoutAttributes:Gg(),handleDefaults:hW(),draw:AW()}});var H0=z($8=>{"use strict";var kW=Mt().extendFlat;$8.attributes=function(e,r){e=e||{},r=r||{};var t={valType:"info_array",editType:e.editType,items:[{valType:"number",min:0,max:1,editType:e.editType},{valType:"number",min:0,max:1,editType:e.editType}],dflt:[0,1]},a=e.name?e.name+" ":"",n=e.trace?"trace":"subplot",i=r.description?" "+r.description:"",o={x:kW({},t,{}),y:kW({},t,{}),editType:e.editType};return e.noGridCell||(o.row={valType:"integer",min:0,dflt:0,editType:e.editType},o.column={valType:"integer",min:0,dflt:0,editType:e.editType}),o};$8.defaults=function(e,r,t,a){var n=a&&a.x||[0,1],i=a&&a.y||[0,1],o=r.grid;if(o){var l=t("domain.column");l!==void 0&&(l{"use strict";var fLe=ke(),cLe=(Fc(),ze(_h)).counter,vLe=H0().attributes,SW=(Pa(),ze(Ea)).idRegex,hLe=Ct(),J8={rows:{valType:"integer",min:1,editType:"plot"},roworder:{valType:"enumerated",values:["top to bottom","bottom to top"],dflt:"top to bottom",editType:"plot"},columns:{valType:"integer",min:1,editType:"plot"},subplots:{valType:"info_array",freeLength:!0,dimensions:2,items:{valType:"enumerated",values:[cLe("xy").toString(),""],editType:"plot"},editType:"plot"},xaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[SW.x.toString(),""],editType:"plot"},editType:"plot"},yaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[SW.y.toString(),""],editType:"plot"},editType:"plot"},pattern:{valType:"enumerated",values:["independent","coupled"],dflt:"coupled",editType:"plot"},xgap:{valType:"number",min:0,max:1,editType:"plot"},ygap:{valType:"number",min:0,max:1,editType:"plot"},domain:vLe({name:"grid",editType:"plot",noGridCell:!0},{}),xside:{valType:"enumerated",values:["bottom","bottom plot","top plot","top"],dflt:"bottom plot",editType:"plot"},yside:{valType:"enumerated",values:["left","left plot","right plot","right"],dflt:"left plot",editType:"plot"},editType:"plot"};function Wg(e,r,t){var a=r[t+"axes"],n=Object.keys((e._splomAxes||{})[t]||{});if(Array.isArray(a))return a;if(n.length)return n}function dLe(e,r){var t=e.grid||{},a=Wg(r,t,"x"),n=Wg(r,t,"y");if(!e.grid&&!a&&!n)return;var i=Array.isArray(t.subplots)&&Array.isArray(t.subplots[0]),o=Array.isArray(a),l=Array.isArray(n),s=o&&a!==t.xaxes&&l&&n!==t.yaxes,u,f;i?(u=t.subplots.length,f=t.subplots[0].length):(l&&(u=n.length),o&&(f=a.length));var c=hLe.newContainer(r,"grid");function v(k,T){return fLe.coerce(t,c,J8,k,T)}var d=v("rows",u),p=v("columns",f);if(!(d*p>1)){delete r.grid;return}if(!i&&!o&&!l){var y=v("pattern")==="independent";y&&(i=!0)}c._hasSubplotGrid=i;var m=v("roworder"),b=m==="top to bottom",A=i?.2:.1,w=i?.3:.1,x,_;s&&r._splomGridDflt&&(x=r._splomGridDflt.xside,_=r._splomGridDflt.yside),c._domains={x:qW("x",v,A,x,p),y:qW("y",v,w,_,d,b)}}function qW(e,r,t,a,n,i){var o=r(e+"gap",t),l=r("domain."+e);r(e+"side",a);for(var s=new Array(n),u=l[0],f=(l[1]-u)/(n-o),c=f*(1-o),v=0;v{"use strict";EW.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc"}});var FW=z((_Ke,RW)=>{"use strict";var PW=Br(),mLe=Tr(),yLe=ke(),gLe=Ct(),bLe=K8();RW.exports=function(e,r,t,a){var n="error_"+a.axis,i=gLe.newContainer(r,n),o=e[n]||{};function l(p,y){return yLe.coerce(o,i,bLe,p,y)}var s=o.array!==void 0||o.value!==void 0||o.type==="sqrt",u=l("visible",s);if(u!==!1){var f=l("type","array"in o?"data":"percent"),c=!0;f!=="sqrt"&&(c=l("symmetric",!((f==="data"?"arrayminus":"valueminus")in o))),f==="data"?(l("array"),l("traceref"),c||(l("arrayminus"),l("tracerefminus"))):(f==="percent"||f==="constant")&&(l("value"),c||l("valueminus"));var v="copy_"+a.inherit+"style";if(a.inherit){var d=r["error_"+a.inherit];(d||{}).visible&&l(v,!(o.color||PW(o.thickness)||PW(o.width)))}(!a.inherit||!i[v])&&(l("color",t),l("thickness"),l("width",mLe.traceIs(r,"gl3d")?0:4))}}});var Q8=z((wKe,NW)=>{"use strict";NW.exports=function(r){var t=r.type,a=r.symmetric;if(t==="data"){var n=r.array||[];if(a)return function(u,f){var c=+n[f];return[c,c]};var i=r.arrayminus||[];return function(u,f){var c=+n[f],v=+i[f];return!isNaN(c)||!isNaN(v)?[v||0,c||0]:[NaN,NaN]}}else{var o=zW(t,r.value),l=zW(t,r.valueminus);return a||r.valueminus===void 0?function(u){var f=o(u);return[f,f]}:function(u){return[l(u),o(u)]}}};function zW(e,r){if(e==="percent")return function(t){return Math.abs(t*r/100)};if(e==="constant")return function(){return Math.abs(r)};if(e==="sqrt")return function(t){return Math.sqrt(Math.abs(t))}}});var OW=z((AKe,BW)=>{"use strict";var e9=Br(),xLe=Tr(),r9=Yr(),_Le=ke(),wLe=Q8();BW.exports=function(r){for(var t=r.calcdata,a=0;a{"use strict";var HW=Pr(),eu=Br(),ALe=Jr(),TLe=ri();UW.exports=function(r,t,a,n){var i,o=a.xaxis,l=a.yaxis,s=n&&n.duration>0,u=r._context.staticPlot;t.each(function(f){var c=f[0].trace,v=c.error_x||{},d=c.error_y||{},p;c.ids&&(p=function(A){return A.id});var y=TLe.hasMarkers(c)&&c.marker.maxdisplayed>0;!d.visible&&!v.visible&&(f=[]);var m=HW.select(this).selectAll("g.errorbar").data(f,p);if(m.exit().remove(),!!f.length){v.visible||m.selectAll("path.xerror").remove(),d.visible||m.selectAll("path.yerror").remove(),m.style("opacity",1);var b=m.enter().append("g").classed("errorbar",!0);s&&b.style("opacity",0).transition().duration(n.duration).style("opacity",1),ALe.setClipUrl(m,a.layerClipId,r),m.each(function(A){var w=HW.select(this),x=MLe(A,o,l);if(!(y&&!A.vis)){var _,k=w.select("path.yerror");if(d.visible&&eu(x.x)&&eu(x.yh)&&eu(x.ys)){var T=d.width;_="M"+(x.x-T)+","+x.yh+"h"+2*T+"m-"+T+",0V"+x.ys,x.noYS||(_+="m-"+T+",0h"+2*T),i=!k.size(),i?k=w.append("path").style("vector-effect",u?"none":"non-scaling-stroke").classed("yerror",!0):s&&(k=k.transition().duration(n.duration).ease(n.easing)),k.attr("d",_)}else k.remove();var q=w.select("path.xerror");if(v.visible&&eu(x.y)&&eu(x.xh)&&eu(x.xs)){var C=(v.copy_ystyle?d:v).width;_="M"+x.xh+","+(x.y-C)+"v"+2*C+"m0,-"+C+"H"+x.xs,x.noXS||(_+="m0,-"+C+"v"+2*C),i=!q.size(),i?q=w.append("path").style("vector-effect",u?"none":"non-scaling-stroke").classed("xerror",!0):s&&(q=q.transition().duration(n.duration).ease(n.easing)),q.attr("d",_)}else q.remove()}})}})};function MLe(e,r,t){var a={x:r.c2p(e.x),y:t.c2p(e.y)};return e.yh!==void 0&&(a.yh=t.c2p(e.yh),a.ys=t.c2p(e.ys),eu(a.ys)||(a.noYS=!0,a.ys=t.c2p(e.ys,!0))),e.xh!==void 0&&(a.xh=r.c2p(e.xh),a.xs=r.c2p(e.xs),eu(a.xs)||(a.noXS=!0,a.xs=r.c2p(e.xs,!0))),a}});var jW=z((MKe,VW)=>{"use strict";var kLe=Pr(),YW=qr();VW.exports=function(r){r.each(function(t){var a=t[0].trace,n=a.error_y||{},i=a.error_x||{},o=kLe.select(this);o.selectAll("path.yerror").style("stroke-width",n.thickness+"px").call(YW.stroke,n.color),i.copy_ystyle&&(i=n),o.selectAll("path.xerror").style("stroke-width",i.thickness+"px").call(YW.stroke,i.color)})}});var ZW=z((kKe,XW)=>{"use strict";var Qd=ke(),WW=qo().overrideAll,e2=K8(),Df={error_x:Qd.extendFlat({},e2),error_y:Qd.extendFlat({},e2)};delete Df.error_x.copy_zstyle;delete Df.error_y.copy_zstyle;delete Df.error_y.copy_ystyle;var r2={error_x:Qd.extendFlat({},e2),error_y:Qd.extendFlat({},e2),error_z:Qd.extendFlat({},e2)};delete r2.error_x.copy_ystyle;delete r2.error_y.copy_ystyle;delete r2.error_z.copy_ystyle;delete r2.error_z.copy_zstyle;XW.exports={moduleType:"component",name:"errorbars",schema:{traces:{scatter:Df,bar:Df,histogram:Df,scatter3d:WW(r2,"calc","nested"),scattergl:WW(Df,"calc","nested")}},supplyDefaults:FW(),calc:OW(),makeComputeError:Q8(),plot:GW(),style:jW(),hoverInfo:SLe};function SLe(e,r,t){(r.error_y||{}).visible&&(t.yerr=e.yh-e.y,r.error_y.symmetric||(t.yerrneg=e.y-e.ys)),(r.error_x||{}).visible&&(t.xerr=e.xh-e.x,r.error_x.symmetric||(t.xerrneg=e.x-e.xs))}});var $W={};qt($W,{cn:()=>qLe});var qLe,JW=St(()=>{"use strict";qLe={colorbar:"colorbar",cbbg:"cbbg",cbfill:"cbfill",cbfills:"cbfills",cbline:"cbline",cblines:"cblines",cbaxis:"cbaxis",cbtitleunshift:"cbtitleunshift",cbtitle:"cbtitle",cboutline:"cboutline",crisp:"crisp",jsPlaceholder:"js-placeholder"}});var iX=z((SKe,nX)=>{"use strict";var ru=Pr(),Zg=ma(),KW=Tr(),ts=Yr(),Xg=Vi(),lo=ke(),jo=lo.strTranslate,aX=Mt().extendFlat,t9=Os(),Vo=Jr(),U0=qr(),LLe=n0(),CLe=Fa(),DLe=yi().flipScale,ELe=c8(),PLe=v8(),RLe=Gi(),n9=(on(),ze(nn)),QW=n9.LINE_SPACING,eX=n9.FROM_TL,rX=n9.FROM_BR,Wt=(JW(),ze($W)).cn;function FLe(e){var r=e._fullLayout,t=r._infolayer.selectAll("g."+Wt.colorbar).data(zLe(e),function(a){return a._id});t.enter().append("g").attr("class",function(a){return a._id}).classed(Wt.colorbar,!0),t.each(function(a){var n=ru.select(this);lo.ensureSingle(n,"rect",Wt.cbbg),lo.ensureSingle(n,"g",Wt.cbfills),lo.ensureSingle(n,"g",Wt.cblines),lo.ensureSingle(n,"g",Wt.cbaxis,function(o){o.classed(Wt.crisp,!0)}),lo.ensureSingle(n,"g",Wt.cbtitleunshift,function(o){o.append("g").classed(Wt.cbtitle,!0)}),lo.ensureSingle(n,"rect",Wt.cboutline);var i=NLe(n,a,e);i&&i.then&&(e._promises||[]).push(i),e._context.edits.colorbarPosition&&ILe(n,a,e)}),t.exit().each(function(a){Zg.autoMargin(e,a._id)}).remove(),t.order()}function zLe(e){var r=e._fullLayout,t=e.calcdata,a=[],n,i,o,l;function s(w){return aX(w,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function u(){typeof l.calc=="function"?l.calc(e,o,n):(n._fillgradient=i.reversescale?DLe(i.colorscale):i.colorscale,n._zrange=[i[l.min],i[l.max]])}for(var f=0;f[Math.min(e[0]+r,e[1]),e[1]],tX=(e,r)=>[e[0],Math.max(e[1]-r,e[0])];function NLe(e,r,t){var a=r.orientation==="v",n=r.len,i=r.lenmode,o=r.thickness,l=r.thicknessmode,s=r.outlinewidth,u=r.borderwidth,f=r.bgcolor,c=r.xanchor,v=r.yanchor,d=r.xpad,p=r.ypad,y=r.x,m=a?r.y:1-r.y,b=r.yref==="paper",A=r.xref==="paper",w=t._fullLayout,x=w._size,_=r._fillcolor,k=r._line,T=r.title,q=T.side,C=r._zrange||ru.extent((typeof _=="function"?_:k.color).domain()),E=typeof k.color=="function"?k.color:function(){return k.color},P=typeof _=="function"?_:function(){return _},R=r._levels,N=BLe(t,r,C),I=N.fill,O=N.line,U=Math.round(o*(l==="fraction"?a?x.w:x.h:1)),Y=U/(a?x.w:x.h),G=Math.round(n*(i==="fraction"?a?x.h:x.w:1)),V=G/(a?x.h:x.w),W=A?x.w:t._fullLayout.width,j=b?x.h:t._fullLayout.height,J=Math.round(a?y*W+d:m*j+p),te={center:.5,right:1}[c]||0,ae={top:1,middle:.5}[v]||0,se=a?y-te*Y:m-ae*Y,$=a?m-ae*V:y-te*V,fe=Math.round(a?j*(1-$):W*$);r._lenFrac=V,r._thickFrac=Y,r._uFrac=se,r._vFrac=$;var ie=r._axis=OLe(t,r,C);ie.position=Y+(a?y+d/x.w:m+p/x.h);var ue=["top","bottom"].indexOf(q)!==-1;if(a&&ue&&(ie.title.side=q,ie.titlex=y+d/x.w,ie.titley=$+(T.side==="top"?V-p/x.h:p/x.h)),!a&&!ue&&(ie.title.side=q,ie.titley=m+p/x.h,ie.titlex=$+d/x.w),k.color&&r.tickmode==="auto"){ie.tickmode="linear",ie.tick0=R.start;var ce=R.size,oe=lo.constrain(G/50,4,15)+1,be=(C[1]-C[0])/((r.nticks||oe)*ce);if(be>1){var Re=Math.pow(10,Math.floor(Math.log(be)/Math.LN10));ce*=Re*lo.roundUp(be/Re,[2,5,10]),(Math.abs(R.start)/R.size+1e-6)%1<2e-6&&(ie.tick0=0)}ie.dtick=ce}var ye=a?p/x.h:d/x.w;ie.domain=tX(a9([$,$+V],ye),ye),ie.setScale(),e.attr("transform",jo(Math.round(x.l),Math.round(x.t)));var Ce=e.select("."+Wt.cbtitleunshift).attr("transform",jo(-Math.round(x.l),-Math.round(x.t))),Me=ie.ticklabelposition,Le=ie.title.font.size,De=e.select("."+Wt.cbaxis),Ie,qe=0,Ze=0;function Je(re,xe){var Ye={propContainer:ie,propName:r._propPrefix+"title.text",traceIndex:r._traceIndex,_meta:r._meta,placeholder:w._dfltTitle.colorbar,containerGroup:e.select("."+Wt.cbtitle)},vr=re.charAt(0)==="h"?re.slice(1):"h"+re;e.selectAll("."+vr+",."+vr+"-math-group").remove(),LLe.draw(t,re,aX(Ye,xe||{}))}function Xe(){if(a&&ue||!a&&!ue){var re,xe;q==="top"&&(re=d+x.l+W*y,xe=p+x.t+j*(1-$-V)+3+Le*.75),q==="bottom"&&(re=d+x.l+W*y,xe=p+x.t+j*(1-$)-3-Le*.25),q==="right"&&(xe=p+x.t+j*m+3+Le*.75,re=d+x.l+W*$),Je(ie._id+"title",{attributes:{x:re,y:xe,"text-anchor":a?"start":"middle"}})}}function Se(){if(a&&!ue||!a&&ue){var re=ie.position||0,xe=ie._offset+ie._length/2,Ye,vr;if(q==="right")vr=xe,Ye=x.l+W*re+10+Le*(ie.showticklabels?1:.5);else if(Ye=xe,q==="bottom"&&(vr=x.t+j*re+10+(Me.indexOf("inside")===-1?ie.tickfont.size:0)+(ie.ticks!=="inside"&&r.ticklen||0)),q==="top"){var Pe=T.text.split("
").length;vr=x.t+j*re+10-U-QW*Le*Pe}Je((a?"h":"v")+ie._id+"title",{avoid:{selection:ru.select(t).selectAll("g."+ie._id+"tick"),side:q,offsetTop:a?0:x.t,offsetLeft:a?x.l:0,maxShift:a?w.width:w.height},attributes:{x:Ye,y:vr,"text-anchor":"middle"},transform:{rotate:a?-90:0,offset:0}})}}function Fe(){if(!a&&!ue||a&&ue){var re=e.select("."+Wt.cbtitle),xe=re.select("text"),Ye=[-s/2,s/2],vr=re.select(".h"+ie._id+"title-math-group").node(),Pe=15.6;xe.node()&&(Pe=parseInt(xe.node().style.fontSize,10)*QW);var me;if(vr?(me=Vo.bBox(vr),Ze=me.width,qe=me.height,qe>Pe&&(Ye[1]-=(qe-Pe)/2)):xe.node()&&!xe.classed(Wt.jsPlaceholder)&&(me=Vo.bBox(xe.node()),Ze=me.width,qe=me.height),a){if(qe){if(qe+=5,q==="top")ie.domain=tX(ie.domain,qe/x.h),Ye[1]*=-1;else{ie.domain=a9(ie.domain,qe/x.h);var Te=CLe.lineCount(xe);Ye[1]+=(1-Te)*Pe}re.attr("transform",jo(Ye[0],Ye[1])),ie.setScale()}}else Ze&&(q==="right"&&(ie.domain=a9(ie.domain,(Ze+Le/2)/x.w)),re.attr("transform",jo(Ye[0],Ye[1])),ie.setScale())}e.selectAll("."+Wt.cbfills+",."+Wt.cblines).attr("transform",a?jo(0,Math.round(x.h*(1-ie.domain[1]))):jo(Math.round(x.w*ie.domain[0]),0)),De.attr("transform",a?jo(0,Math.round(-x.t)):jo(Math.round(-x.l),0));var Ue=e.select("."+Wt.cbfills).selectAll("rect."+Wt.cbfill).attr("style","").data(I);Ue.enter().append("rect").classed(Wt.cbfill,!0).attr("style",""),Ue.exit().remove();var $e=C.map(ie.c2p).map(Math.round).sort(function(sr,Ee){return sr-Ee});Ue.each(function(sr,Ee){var Ke=[Ee===0?C[0]:(I[Ee]+I[Ee-1])/2,Ee===I.length-1?C[1]:(I[Ee]+I[Ee+1])/2].map(ie.c2p).map(Math.round);a&&(Ke[1]=lo.constrain(Ke[1]+(Ke[1]>Ke[0])?1:-1,$e[0],$e[1]));var Be=ru.select(this).attr(a?"x":"y",J).attr(a?"y":"x",ru.min(Ke)).attr(a?"width":"height",Math.max(U,2)).attr(a?"height":"width",Math.max(ru.max(Ke)-ru.min(Ke),2));if(r._fillgradient)Vo.gradient(Be,t,r._id,a?"vertical":"horizontalreversed",r._fillgradient,"fill");else{var mr=P(sr).replace("e-","");Be.attr("fill",U0.hexString(mr))}});var Oe=e.select("."+Wt.cblines).selectAll("path."+Wt.cbline).data(k.color&&k.width?O:[]);Oe.enter().append("path").classed(Wt.cbline,!0),Oe.exit().remove(),Oe.each(function(sr){var Ee=J,Ke=Math.round(ie.c2p(sr))+k.width/2%1;ru.select(this).attr("d","M"+(a?Ee+","+Ke:Ke+","+Ee)+(a?"h":"v")+U).call(Vo.lineGroupStyle,k.width,E(sr),k.dash)}),De.selectAll("g."+ie._id+"tick,path").remove();var We=J+U+(s||0)/2-(r.ticks==="outside"?1:0),ar=ts.calcTicks(ie),or=ts.getTickSigns(ie)[2];return ts.drawTicks(t,ie,{vals:ie.ticks==="inside"?ts.clipEnds(ie,ar):ar,layer:De,path:ts.makeTickPath(ie,We,or),transFn:ts.makeTransTickFn(ie)}),ts.drawLabels(t,ie,{vals:ar,layer:De,transFn:ts.makeTransTickLabelFn(ie),labelFns:ts.makeLabelFns(ie,We)})}function er(){var re,xe=U+s/2;Me.indexOf("inside")===-1&&(re=Vo.bBox(De.node()),xe+=a?re.width:re.height),Ie=Ce.select("text");var Ye=0,vr=a&&q==="top",Pe=!a&&q==="right",me=0;if(Ie.node()&&!Ie.classed(Wt.jsPlaceholder)){var Te,Ue=Ce.select(".h"+ie._id+"title-math-group").node();Ue&&(a&&ue||!a&&!ue)?(re=Vo.bBox(Ue),Ye=re.width,Te=re.height):(re=Vo.bBox(Ce.node()),Ye=re.right-x.l-(a?J:fe),Te=re.bottom-x.t-(a?fe:J),!a&&q==="top"&&(xe+=re.height,me=re.height)),Pe&&(Ie.attr("transform",jo(Ye/2+Le/2,0)),Ye*=2),xe=Math.max(xe,a?Ye:Te)}var $e=(a?d:p)*2+xe+u+s/2,Oe=0;!a&&T.text&&v==="bottom"&&m<=0&&(Oe=$e/2,$e+=Oe,me+=Oe),w._hColorbarMoveTitle=Oe,w._hColorbarMoveCBTitle=me;var We=u+s,ar=(a?J:fe)-We/2-(a?d:0),or=(a?fe:J)-(a?G:p+me-Oe);e.select("."+Wt.cbbg).attr("x",ar).attr("y",or).attr(a?"width":"height",Math.max($e-Oe,2)).attr(a?"height":"width",Math.max(G+We,2)).call(U0.fill,f).call(U0.stroke,r.bordercolor).style("stroke-width",u);var sr=Pe?Math.max(Ye-10,0):0;e.selectAll("."+Wt.cboutline).attr("x",(a?J:fe+d)+sr).attr("y",(a?fe+p-G:J)+(vr?qe:0)).attr(a?"width":"height",Math.max(U,2)).attr(a?"height":"width",Math.max(G-(a?2*p+qe:2*d+sr),2)).call(U0.stroke,r.outlinecolor).style({fill:"none","stroke-width":s});var Ee=a?te*$e:0,Ke=a?0:(1-ae)*$e-me;if(Ee=A?x.l-Ee:-Ee,Ke=b?x.t-Ke:-Ke,e.attr("transform",jo(Ee,Ke)),!a&&(u||U0.opacity(f)&&!U0.equals(w.paper_bgcolor,f))){var Be=De.selectAll("text"),mr=Be[0].length,yr=e.select("."+Wt.cbbg).node(),ur=Vo.bBox(yr),gr=Vo.getTranslate(e),ne=2;Be.each(function($a,na){var Ja=0,hn=mr-1;if(na===Ja||na===hn){var fa=Vo.bBox(this),hr=Vo.getTranslate(this),wt;if(na===hn){var Vr=fa.right+hr.x,ht=ur.right+gr.x+fe-u-ne+y;wt=ht-Vr,wt>0&&(wt=0)}else if(na===Ja){var Nt=fa.left+hr.x,kt=ur.left+gr.x+fe+u+ne;wt=kt-Nt,wt<0&&(wt=0)}wt&&(mr<3?this.setAttribute("transform","translate("+wt+",0) "+this.getAttribute("transform")):this.setAttribute("visibility","hidden"))}})}var ge={},Ne=eX[c],He=rX[c],Kr=eX[v],Qr=rX[v],yt=$e-U;a?(i==="pixels"?(ge.y=m,ge.t=G*Kr,ge.b=G*Qr):(ge.t=ge.b=0,ge.yt=m+n*Kr,ge.yb=m-n*Qr),l==="pixels"?(ge.x=y,ge.l=$e*Ne,ge.r=$e*He):(ge.l=yt*Ne,ge.r=yt*He,ge.xl=y-o*Ne,ge.xr=y+o*He)):(i==="pixels"?(ge.x=y,ge.l=G*Ne,ge.r=G*He):(ge.l=ge.r=0,ge.xl=y+n*Ne,ge.xr=y-n*He),l==="pixels"?(ge.y=1-m,ge.t=$e*Kr,ge.b=$e*Qr):(ge.t=yt*Kr,ge.b=yt*Qr,ge.yt=m-o*Kr,ge.yb=m+o*Qr));var gt=r.y<.5?"b":"t",Et=r.x<.5?"l":"r";t._fullLayout._reservedMargin[r._id]={};var aa={r:w.width-ar-Ee,l:ar+ge.r,b:w.height-or-Ke,t:or+ge.b};A&&b?Zg.autoMargin(t,r._id,ge):A?t._fullLayout._reservedMargin[r._id][gt]=aa[gt]:b||a?t._fullLayout._reservedMargin[r._id][Et]=aa[Et]:t._fullLayout._reservedMargin[r._id][gt]=aa[gt]}return lo.syncOrAsync([Zg.previousPromises,Xe,Fe,Se,Zg.previousPromises,er],t)}function ILe(e,r,t){var a=r.orientation==="v",n=t._fullLayout,i=n._size,o,l,s;Xg.init({element:e.node(),gd:t,prepFn:function(){o=e.attr("transform"),t9(e)},moveFn:function(u,f){e.attr("transform",o+jo(u,f)),l=Xg.align((a?r._uFrac:r._vFrac)+u/i.w,a?r._thickFrac:r._lenFrac,0,1,r.xanchor),s=Xg.align((a?r._vFrac:1-r._uFrac)-f/i.h,a?r._lenFrac:r._thickFrac,0,1,r.yanchor);var c=Xg.getCursor(l,s,r.xanchor,r.yanchor);t9(e,c)},doneFn:function(){if(t9(e),l!==void 0&&s!==void 0){var u={};u[r._propPrefix+"x"]=l,u[r._propPrefix+"y"]=s,r._traceIndex!==void 0?KW.call("_guiRestyle",t,u,r._traceIndex):KW.call("_guiRelayout",t,u)}}})}function BLe(e,r,t){var a=r._levels,n=[],i=[],o,l,s=a.end+a.size/100,u=a.size,f=1.001*t[0]-.001*t[1],c=1.001*t[1]-.001*t[0];for(l=0;l<1e5&&(o=a.start+l*u,!(u>0?o>=s:o<=s));l++)o>f&&o0?o>=s:o<=s));l++)o>t[0]&&o{"use strict";oX.exports={moduleType:"component",name:"colorbar",attributes:tm(),supplyDefaults:e6(),draw:iX().draw,hasColorbar:W4()}});var uX=z((LKe,sX)=>{"use strict";sX.exports={moduleType:"component",name:"legend",layoutAttributes:X6(),supplyLayoutDefaults:$6(),draw:c7(),style:l7()}});var cX=z((CKe,fX)=>{"use strict";fX.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}});var hX=z((DKe,vX)=>{"use strict";vX.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}});var o9=z((EKe,yX)=>{"use strict";var HLe=Tr(),mX=ke(),i9=mX.extendFlat,dX=mX.extendDeep;function pX(e){var r;switch(e){case"themes__thumb":r={autosize:!0,width:150,height:150,title:{text:""},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case"thumbnail":r={title:{text:""},showlegend:!1,borderwidth:0,bordercolor:"",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:r={}}return r}function ULe(e){var r=["xaxis","yaxis","zaxis"];return r.indexOf(e.slice(0,5))>-1}yX.exports=function(r,t){var a,n=r.data,i=r.layout,o=dX([],n),l=dX({},i,pX(t.tileClass)),s=r._context||{};if(t.width&&(l.width=t.width),t.height&&(l.height=t.height),t.tileClass==="thumbnail"||t.tileClass==="themes__thumb"){l.annotations=[];var u=Object.keys(l);for(a=0;a{"use strict";var GLe=Wu().EventEmitter,YLe=Tr(),VLe=ke(),gX=Kl(),jLe=o9(),WLe=Jy(),XLe=Ky();function ZLe(e,r){var t=new GLe,a=jLe(e,{format:"png"}),n=a.gd;n.style.position="absolute",n.style.left="-5000px",document.body.appendChild(n);function i(){var l=gX.getDelay(n._fullLayout);setTimeout(function(){var s=WLe(n),u=document.createElement("canvas");u.id=VLe.randstr(),t=XLe({format:r.format,width:n._fullLayout.width,height:n._fullLayout.height,canvas:u,emitter:t,svg:s}),t.clean=function(){n&&document.body.removeChild(n)}},l)}var o=gX.getRedrawFunc(n);return YLe.call("_doPlot",n,a.data,a.layout,a.config).then(o).then(i).catch(function(l){t.emit("error",l)}),t}bX.exports=ZLe});var AX=z((RKe,wX)=>{"use strict";var _X=Kl(),$Le={getDelay:_X.getDelay,getRedrawFunc:_X.getRedrawFunc,clone:o9(),toSVG:Jy(),svgToImg:Ky(),toImage:xX(),downloadImage:Cw()};wX.exports=$Le});var MX=z(as=>{"use strict";as.version=Jv().version;US();SP();var JLe=Tr(),t2=as.register=JLe.register,s9=UU(),TX=Object.keys(s9);for($g=0;$g{"use strict";kX.exports=MX()});var Pf=z((NKe,EX)=>{"use strict";var ta=Ji(),qX=Eo().axisHoverFormat,{hovertemplateAttrs:KLe,texttemplateAttrs:QLe,templatefallbackAttrs:LX}=di(),DX=ol(),eCe=Ca(),CX=(Id(),ze(Nd)),rCe=Bi().pattern,Ef=Mt().extendFlat,u9=eCe({editType:"calc",arrayOk:!0,colorEditType:"style"}),tCe=ta.marker,aCe=tCe.line,nCe=Ef({},aCe.width,{dflt:0}),iCe=Ef({width:nCe,editType:"calc"},DX("marker.line")),oCe=Ef({line:iCe,editType:"calc"},DX("marker"),{opacity:{valType:"number",arrayOk:!0,dflt:1,min:0,max:1,editType:"style"},pattern:rCe,cornerradius:{valType:"any",editType:"calc"}});EX.exports={x:ta.x,x0:ta.x0,dx:ta.dx,y:ta.y,y0:ta.y0,dy:ta.dy,xperiod:ta.xperiod,yperiod:ta.yperiod,xperiod0:ta.xperiod0,yperiod0:ta.yperiod0,xperiodalignment:ta.xperiodalignment,yperiodalignment:ta.yperiodalignment,xhoverformat:qX("x"),yhoverformat:qX("y"),text:ta.text,texttemplate:QLe({editType:"plot"},{keys:CX.eventDataKeys}),texttemplatefallback:LX({editType:"plot"}),hovertext:ta.hovertext,hovertemplate:KLe({},{keys:CX.eventDataKeys}),hovertemplatefallback:LX(),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"calc"},insidetextanchor:{valType:"enumerated",values:["end","middle","start"],dflt:"end",editType:"plot"},textangle:{valType:"angle",dflt:"auto",editType:"plot"},textfont:Ef({},u9,{}),insidetextfont:Ef({},u9,{}),outsidetextfont:Ef({},u9,{}),constraintext:{valType:"enumerated",values:["inside","outside","both","none"],dflt:"both",editType:"calc"},cliponaxis:Ef({},ta.cliponaxis,{}),orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},base:{valType:"any",dflt:null,arrayOk:!0,editType:"calc"},offset:{valType:"number",dflt:null,arrayOk:!0,editType:"calc"},width:{valType:"number",dflt:null,min:0,arrayOk:!0,editType:"calc"},marker:oCe,offsetgroup:ta.offsetgroup,alignmentgroup:ta.alignmentgroup,selected:{marker:{opacity:ta.selected.marker.opacity,color:ta.selected.marker.color,editType:"style"},textfont:ta.selected.textfont,editType:"style"},unselected:{marker:{opacity:ta.unselected.marker.opacity,color:ta.unselected.marker.color,editType:"style"},textfont:ta.unselected.textfont,editType:"style"},zorder:ta.zorder}});var Kg=z((IKe,PX)=>{"use strict";PX.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},barcornerradius:{valType:"any",editType:"calc"}}});var f9=z((BKe,zX)=>{"use strict";var lCe=qr(),RX=yi().hasColorscale,FX=jl(),sCe=ke().coercePattern;zX.exports=function(r,t,a,n,i){var o=a("marker.color",n),l=RX(r,"marker");l&&FX(r,t,i,a,{prefix:"marker.",cLetter:"c"}),a("marker.line.color",lCe.defaultLine),RX(r,"marker.line")&&FX(r,t,i,a,{prefix:"marker.line.",cLetter:"c"}),a("marker.line.width"),a("marker.opacity"),sCe(a,"marker.pattern",o,l),a("selected.marker.color"),a("unselected.marker.color")}});var Rf=z((OKe,UX)=>{"use strict";var NX=Br(),Y0=ke(),IX=qr(),uCe=Tr(),fCe=Pw(),cCe=T0(),vCe=f9(),hCe=Fd(),BX=Pf(),Qg=Y0.coerceFont;function dCe(e,r,t,a){function n(u,f){return Y0.coerce(e,r,BX,u,f)}var i=fCe(e,r,a,n);if(!i){r.visible=!1;return}cCe(e,r,a,n),n("xhoverformat"),n("yhoverformat"),n("zorder"),n("orientation",r.x&&!r.y?"h":"v"),n("base"),n("offset"),n("width"),n("text"),n("hovertext"),n("hovertemplate"),n("hovertemplatefallback");var o=n("textposition");HX(e,r,a,n,o,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),vCe(e,r,n,t,a);var l=(r.marker.line||{}).color,s=uCe.getComponentMethod("errorbars","supplyDefaults");s(e,r,l||IX.defaultLine,{axis:"y"}),s(e,r,l||IX.defaultLine,{axis:"x",inherit:"y"}),Y0.coerceSelectionMarkerOpacity(r,n)}function pCe(e,r){var t,a;function n(l,s){return Y0.coerce(a._input,a,BX,l,s)}for(var i=0;i=0)return e}else if(typeof e=="string"&&(e=e.trim(),e.slice(-1)==="%"&&NX(e.slice(0,-1))&&(e=+e.slice(0,-1),e>=0)))return e+"%"}function HX(e,r,t,a,n,i){i=i||{};var o=i.moduleHasSelected!==!1,l=i.moduleHasUnselected!==!1,s=i.moduleHasConstrain!==!1,u=i.moduleHasCliponaxis!==!1,f=i.moduleHasTextangle!==!1,c=i.moduleHasInsideanchor!==!1,v=!!i.hasPathbar,d=Array.isArray(n)||n==="auto",p=d||n==="inside",y=d||n==="outside";if(p||y){var m=Qg(a,"textfont",t.font),b=Y0.extendFlat({},m),A=e.textfont&&e.textfont.color,w=!A;if(w&&delete b.color,Qg(a,"insidetextfont",b),v){var x=Y0.extendFlat({},m);w&&delete x.color,Qg(a,"pathbar.textfont",x)}y&&Qg(a,"outsidetextfont",m),o&&a("selected.textfont.color"),l&&a("unselected.textfont.color"),s&&a("constraintext"),u&&a("cliponaxis"),f&&a("textangle"),a("texttemplate"),a("texttemplatefallback")}p&&c&&a("insidetextanchor")}UX.exports={supplyDefaults:dCe,crossTraceDefaults:pCe,handleText:HX,validateCornerradius:OX}});var c9=z((HKe,GX)=>{"use strict";var mCe=Tr(),yCe=Yr(),gCe=ke(),bCe=Kg(),xCe=Rf().validateCornerradius;GX.exports=function(e,r,t){function a(y,m){return gCe.coerce(e,r,bCe,y,m)}for(var n=!1,i=!1,o=!1,l={},s=a("barmode"),u=s==="group",f=0;f0&&!l[v]&&(o=!0),l[v]=!0),c.visible&&c.type==="histogram"){var d=yCe.getFromId({_fullLayout:r},c[c.orientation==="v"?"xaxis":"yaxis"]);d.type!=="category"&&(i=!0)}}if(!n){delete r.barmode;return}s!=="overlay"&&a("barnorm"),a("bargap",i&&!o?0:.2),a("bargroupgap");var p=a("barcornerradius");r.barcornerradius=xCe(p)}});var e3=z((UKe,YX)=>{"use strict";var V0=ke();YX.exports=function(r,t){for(var a=0;a{"use strict";var VX=Yr(),jX=k0(),WX=yi().hasColorscale,XX=Kc(),_Ce=e3(),wCe=lg();ZX.exports=function(r,t){var a=VX.getFromId(r,t.xaxis||"x"),n=VX.getFromId(r,t.yaxis||"y"),i,o,l,s,u,f,c={msUTC:!!(t.base||t.base===0)};t.orientation==="h"?(i=a.makeCalcdata(t,"x",c),l=n.makeCalcdata(t,"y"),s=jX(t,n,"y",l),u=!!t.yperiodalignment,f="y"):(i=n.makeCalcdata(t,"y",c),l=a.makeCalcdata(t,"x"),s=jX(t,a,"x",l),u=!!t.xperiodalignment,f="x"),o=s.vals;for(var v=Math.min(o.length,i.length),d=new Array(v),p=0;p{"use strict";var ACe=Pr(),TCe=ke();function MCe(e,r,t){var a=e._fullLayout,n=a["_"+t+"Text_minsize"];if(n){var i=a.uniformtext.mode==="hide",o;switch(t){case"funnelarea":case"pie":case"sunburst":o="g.slice";break;case"treemap":case"icicle":o="g.slice, g.pathbar";break;default:o="g.points > g.point"}r.selectAll(o).each(function(l){var s=l.transform;if(s){s.scale=i&&s.hide?0:n/s.fontSize;var u=ACe.select(this).select("text");TCe.setTransormAndDisplay(u,s)}})}}function kCe(e,r,t){if(t.uniformtext.mode){var a=JX(e),n=t.uniformtext.minsize,i=r.scale*r.fontSize;r.hide=i{"use strict";var qCe=qr(),LCe=Br(),QX=ke().isArrayOrTypedArray;Ff.coerceString=function(e,r,t){if(typeof r=="string"){if(r||!e.noBlank)return r}else if((typeof r=="number"||r===!0)&&!e.strict)return String(r);return t!==void 0?t:e.dflt};Ff.coerceNumber=function(e,r,t){if(LCe(r)){r=+r;var a=e.min,n=e.max,i=a!==void 0&&rn;if(!i)return r}return t!==void 0?t:e.dflt};Ff.coerceColor=function(e,r,t){return qCe.isValid(r)?r:t!==void 0?t:e.dflt};Ff.coerceEnumerated=function(e,r,t){return e.coerceNumber&&(r=+r),e.values.indexOf(r)!==-1?r:t!==void 0?t:e.dflt};Ff.getValue=function(e,r){var t;return QX(e)?r{"use strict";var n2=Pr(),CCe=qr(),i2=Jr(),eZ=ke(),rZ=Tr(),tZ=a2().resizeText,v9=Pf(),DCe=v9.textfont,ECe=v9.insidetextfont,PCe=v9.outsidetextfont,un=r3();function RCe(e){var r=n2.select(e).selectAll('g[class^="barlayer"]').selectAll("g.trace");tZ(e,r,"bar");var t=r.size(),a=e._fullLayout;r.style("opacity",function(n){return n[0].trace.opacity}).each(function(n){(a.barmode==="stack"&&t>1||a.bargap===0&&a.bargroupgap===0&&!n[0].trace.marker.line.width)&&n2.select(this).attr("shape-rendering","crispEdges")}),r.selectAll("g.points").each(function(n){var i=n2.select(this),o=n[0].trace;aZ(i,o,e)}),rZ.getComponentMethod("errorbars","style")(r)}function aZ(e,r,t){i2.pointStyle(e.selectAll("path"),r,t),nZ(e,r,t)}function nZ(e,r,t){e.selectAll("text").each(function(a){var n=n2.select(this),i=eZ.ensureUniformFontSize(t,iZ(n,a,r,t));i2.font(n,i)})}function FCe(e,r,t){var a=r[0].trace;a.selectedpoints?zCe(t,a,e):(aZ(t,a,e),rZ.getComponentMethod("errorbars","style")(t))}function zCe(e,r,t){i2.selectedPointStyle(e.selectAll("path"),r),NCe(e.selectAll("text"),r,t)}function NCe(e,r,t){e.each(function(a){var n=n2.select(this),i;if(a.selected){i=eZ.ensureUniformFontSize(t,iZ(n,a,r,t));var o=r.selected.textfont&&r.selected.textfont.color;o&&(i.color=o),i2.font(n,i)}else i2.selectedTextStyle(n,r)})}function iZ(e,r,t,a){var n=a._fullLayout.font,i=t.textfont;if(e.classed("bartext-inside")){var o=uZ(r,t);i=lZ(t,r.i,n,o)}else e.classed("bartext-outside")&&(i=sZ(t,r.i,n));return i}function oZ(e,r,t){return h9(DCe,e.textfont,r,t)}function lZ(e,r,t,a){var n=oZ(e,r,t),i=e._input.textfont===void 0||e._input.textfont.color===void 0||Array.isArray(e.textfont.color)&&e.textfont.color[r]===void 0;return i&&(n={color:CCe.contrast(a),family:n.family,size:n.size,weight:n.weight,style:n.style,variant:n.variant,textcase:n.textcase,lineposition:n.lineposition,shadow:n.shadow}),h9(ECe,e.insidetextfont,r,n)}function sZ(e,r,t){var a=oZ(e,r,t);return h9(PCe,e.outsidetextfont,r,a)}function h9(e,r,t,a){r=r||{};var n=un.getValue(r.family,t),i=un.getValue(r.size,t),o=un.getValue(r.color,t),l=un.getValue(r.weight,t),s=un.getValue(r.style,t),u=un.getValue(r.variant,t),f=un.getValue(r.textcase,t),c=un.getValue(r.lineposition,t),v=un.getValue(r.shadow,t);return{family:un.coerceString(e.family,n,a.family),size:un.coerceNumber(e.size,i,a.size),color:un.coerceColor(e.color,o,a.color),weight:un.coerceString(e.weight,l,a.weight),style:un.coerceString(e.style,s,a.style),variant:un.coerceString(e.variant,u,a.variant),textcase:un.coerceString(e.variant,f,a.textcase),lineposition:un.coerceString(e.variant,c,a.lineposition),shadow:un.coerceString(e.variant,v,a.shadow)}}function uZ(e,r){return r.type==="waterfall"?r[e.dir].marker.color:e.mcc||e.mc||r.marker.color}fZ.exports={style:RCe,styleTextPoints:nZ,styleOnSelect:FCe,getInsideTextFont:lZ,getOutsideTextFont:sZ,getBarColor:uZ,resizeText:tZ}});var m9=z((WKe,gZ)=>{"use strict";var t3=Pr(),a3=Br(),Wa=ke(),ICe=Fa(),BCe=qr(),tu=Jr(),OCe=Tr(),n3=Yr().tickText,cZ=a2(),HCe=cZ.recordMinTextSize,UCe=cZ.clearMinTextSize,d9=j0(),W0=r3(),GCe=(Id(),ze(Nd)),vZ=Pf(),YCe=vZ.text,VCe=vZ.textposition,jCe=Ro().appendArrayPointValue,Pn=GCe.TEXTPAD;function WCe(e){return e.id}function XCe(e){if(e.ids)return WCe}function p9(e){return(e>0)-(e<0)}function Wo(e,r){return e0}function $Ce(e,r,t,a,n,i){var o=r.xaxis,l=r.yaxis,s=e._fullLayout,u=e._context.staticPlot;n||(n={mode:s.barmode,norm:s.barmode,gap:s.bargap,groupgap:s.bargroupgap},UCe("bar",s));var f=Wa.makeTraceGroups(a,t,"trace bars").each(function(c){var v=t3.select(this),d=c[0].trace,p=c[0].t,y=d.type==="waterfall",m=d.type==="funnel",b=d.type==="histogram",A=d.type==="bar",w=A||m,x=0;y&&d.connector.visible&&d.connector.mode==="between"&&(x=d.connector.line.width/2);var _=d.orientation==="h",k=dZ(n),T=Wa.ensureSingle(v,"g","points"),q=XCe(d),C=T.selectAll("g.point").data(Wa.identity,q);C.enter().append("g").classed("point",!0),C.exit().remove(),C.each(function(P,R){var N=t3.select(this),I=ZCe(P,o,l,_),O=I[0][0],U=I[0][1],Y=I[1][0],G=I[1][1],V=(_?U-O:G-Y)===0;V&&w&&W0.getLineWidth(d,P)&&(V=!1),V||(V=!a3(O)||!a3(U)||!a3(Y)||!a3(G)),P.isBlank=V,V&&(_?U=O:G=Y),x&&!V&&(_?(O-=Wo(O,U)*x,U+=Wo(O,U)*x):(Y-=Wo(Y,G)*x,G+=Wo(Y,G)*x));var W,j;if(d.type==="waterfall"){if(!V){var J=d[P.dir].marker;W=J.line.width,j=J.color}}else W=W0.getLineWidth(d,P),j=P.mc||d.marker.color;function te(re){var xe=t3.round(W/2%1,2);return n.gap===0&&n.groupgap===0?t3.round(Math.round(re)-xe,2):re}function ae(re,xe,Ye){return Ye&&re===xe?re:Math.abs(re-xe)>=2?te(re):re>xe?Math.ceil(re):Math.floor(re)}var se=BCe.opacity(j),$=se<1||W>.01?te:ae;e._context.staticPlot||(O=$(O,U,_),U=$(U,O,_),Y=$(Y,G,!_),G=$(G,Y,!_));var fe=_?o.c2p:l.c2p,ie;P.s0>0?ie=P._sMax:P.s0<0?ie=P._sMin:ie=P.s1>0?P._sMax:P._sMin;function ue(re,xe){if(!re)return 0;var Ye=Math.abs(_?G-Y:U-O),vr=Math.abs(_?U-O:G-Y),Pe=$(Math.abs(fe(ie,!0)-fe(0,!0))),me=P.hasB?Math.min(Ye/2,vr/2):Math.min(Ye/2,Pe),Te;if(xe==="%"){var Ue=Math.min(50,re);Te=Ye*(Ue/100)}else Te=re;return $(Math.max(Math.min(Te,me),0))}var ce=A||b?ue(p.cornerradiusvalue,p.cornerradiusform):0,oe,be,Re="M"+O+","+Y+"V"+G+"H"+U+"V"+Y+"Z",ye=0;if(ce&&P.s){var Ce=p9(P.s0)===0||p9(P.s)===p9(P.s0)?P.s1:P.s0;if(ye=$(P.hasB?0:Math.abs(fe(ie,!0)-fe(Ce,!0))),ye0?Math.sqrt(ye*(2*ce-ye)):0,Ze=Me>0?Math.max:Math.min;oe="M"+O+","+Y+"V"+(G-Ie*Le)+"H"+Ze(U-(ce-ye)*Me,O)+"A "+ce+","+ce+" 0 0 "+De+" "+U+","+(G-ce*Le-qe)+"V"+(Y+ce*Le+qe)+"A "+ce+","+ce+" 0 0 "+De+" "+Ze(U-(ce-ye)*Me,O)+","+(Y+Ie*Le)+"Z"}else if(P.hasB)oe="M"+(O+ce*Me)+","+Y+"A "+ce+","+ce+" 0 0 "+De+" "+O+","+(Y+ce*Le)+"V"+(G-ce*Le)+"A "+ce+","+ce+" 0 0 "+De+" "+(O+ce*Me)+","+G+"H"+(U-ce*Me)+"A "+ce+","+ce+" 0 0 "+De+" "+U+","+(G-ce*Le)+"V"+(Y+ce*Le)+"A "+ce+","+ce+" 0 0 "+De+" "+(U-ce*Me)+","+Y+"Z";else{be=Math.abs(G-Y)+ye;var Je=be0?Math.sqrt(ye*(2*ce-ye)):0,Se=Le>0?Math.max:Math.min;oe="M"+(O+Je*Me)+","+Y+"V"+Se(G-(ce-ye)*Le,Y)+"A "+ce+","+ce+" 0 0 "+De+" "+(O+ce*Me-Xe)+","+G+"H"+(U-ce*Me+Xe)+"A "+ce+","+ce+" 0 0 "+De+" "+(U-Je*Me)+","+Se(G-(ce-ye)*Le,Y)+"V"+Y+"Z"}}else oe=Re}else oe=Re;var Fe=hZ(Wa.ensureSingle(N,"path"),s,n,i);if(Fe.style("vector-effect",u?"none":"non-scaling-stroke").attr("d",isNaN((U-O)*(G-Y))||V&&e._context.staticPlot?"M0,0Z":oe).call(tu.setClipUrl,r.layerClipId,e),!s.uniformtext.mode&&k){var er=tu.makePointStyleFns(d);tu.singlePointStyle(P,Fe,d,er,e)}JCe(e,r,N,c,R,O,U,Y,G,ce,ye,n,i),r.layerClipId&&tu.hideOutsideRangePoint(P,N.select("text"),o,l,d.xcalendar,d.ycalendar)});var E=d.cliponaxis===!1;tu.setClipUrl(v,E?null:r.layerClipId,e)});OCe.getComponentMethod("errorbars","plot")(e,f,r,n)}function JCe(e,r,t,a,n,i,o,l,s,u,f,c,v){var d=r.xaxis,p=r.yaxis,y=e._fullLayout,m;function b(Re,ye,Ce){var Me=Wa.ensureSingle(Re,"text").text(ye).attr({class:"bartext bartext-"+m,"text-anchor":"middle","data-notex":1}).call(tu.font,Ce).call(ICe.convertToTspans,e);return Me}var A=a[0].trace,w=A.orientation==="h",x=tDe(a,w,d,p),_=eDe(y,a,n,d,p);m=rDe(A,n);var k=c.mode==="stack"||c.mode==="relative",T=a[n],q=!k||T._outmost,C=T.hasB,E=u&&u-f>Pn;if(!_||m==="none"||(T.isBlank||i===o||l===s)&&(m==="auto"||m==="inside")){t.select("text").remove();return}var P=y.font,R=d9.getBarColor(a[n],A),N=d9.getInsideTextFont(A,n,P,R),I=d9.getOutsideTextFont(A,n,P),O=A.insidetextanchor||"end",U=t.datum();w?d.type==="log"&&U.s0<=0&&(d.range[0]0&&ae>0,fe;E?C?fe=zf(V-2*u,W,te,ae,w)||zf(V,W-2*u,te,ae,w):w?fe=zf(V-(u-f),W,te,ae,w)||zf(V,W-2*(u-f),te,ae,w):fe=zf(V,W-(u-f),te,ae,w)||zf(V-2*(u-f),W,te,ae,w):fe=zf(V,W,te,ae,w),$&&fe?m="inside":(m="outside",j.remove(),j=null)}else m="inside";if(!j){se=Wa.ensureUniformFontSize(e,m==="outside"?I:N),j=b(t,_,se);var ie=j.attr("transform");if(j.attr("transform",""),J=tu.bBox(j.node()),te=J.width,ae=J.height,j.attr("transform",ie),te<=0||ae<=0){j.remove();return}}var ue=A.textangle,ce,oe;m==="outside"?(oe=A.constraintext==="both"||A.constraintext==="outside",ce=QCe(i,o,l,s,J,{isHorizontal:w,constrained:oe,angle:ue,zeroBarDir:x})):(oe=A.constraintext==="both"||A.constraintext==="inside",ce=yZ(i,o,l,s,J,{isHorizontal:w,constrained:oe,angle:ue,anchor:O,hasB:C,r:u,overhead:f})),ce.fontSize=se.size,HCe(A.type==="histogram"?"bar":A.type,ce,y),T.transform=ce;var be=hZ(j,y,c,v);Wa.setTransormAndDisplay(be,ce)}function zf(e,r,t,a,n){if(e<0||r<0)return!1;var i=t<=e&&a<=r,o=t<=r&&a<=e,l=n?e>=t*(r/a):r>=a*(e/t);return i||o||l}function pZ(e){return e==="auto"?0:e}function mZ(e,r){var t=Math.PI/180*r,a=Math.abs(Math.sin(t)),n=Math.abs(Math.cos(t));return{x:e.width*n+e.height*a,y:e.width*a+e.height*n}}function yZ(e,r,t,a,n,i){var o=!!i.isHorizontal,l=!!i.constrained,s=i.angle||0,u=i.anchor,f=u==="end",c=u==="start",v=i.leftToRight||0,d=(v+1)/2,p=1-d,y=i.hasB,m=i.r,b=i.overhead,A=n.width,w=n.height,x=Math.abs(r-e),_=Math.abs(a-t),k=x>2*Pn&&_>2*Pn?Pn:0;x-=2*k,_-=2*k;var T=pZ(s);s==="auto"&&!(A<=x&&w<=_)&&(A>x||w>_)&&(!(A>_||w>x)||APn){var P=KCe(e,r,t,a,q,m,b,o,y);C=P.scale,E=P.pad}else C=1,l&&(C=Math.min(1,x/q.x,_/q.y)),E=0;var R=n.left*p+n.right*d,N=(n.top+n.bottom)/2,I=(e+Pn)*p+(r-Pn)*d,O=(t+a)/2,U=0,Y=0;if(c||f){var G=(o?q.x:q.y)/2;m&&(f||y)&&(k+=E);var V=o?Wo(e,r):Wo(t,a);o?c?(I=e+V*k,U=-V*G):(I=r-V*k,U=V*G):c?(O=t+V*k,Y=-V*G):(O=a-V*k,Y=V*G)}return{textX:R,textY:N,targetX:I,targetY:O,anchorX:U,anchorY:Y,scale:C,rotate:T}}function KCe(e,r,t,a,n,i,o,l,s){var u=Math.max(0,Math.abs(r-e)-2*Pn),f=Math.max(0,Math.abs(a-t)-2*Pn),c=i-Pn,v=o?c-Math.sqrt(c*c-(c-o)*(c-o)):c,d=s?c*2:l?c-o:2*v,p=s?c*2:l?2*v:c-o,y,m,b,A,w;return n.y/n.x>=f/(u-d)?A=f/n.y:n.y/n.x<=(f-p)/u?A=u/n.x:!s&&l?(y=n.x*n.x+n.y*n.y/4,m=-2*n.x*(u-c)-n.y*(f/2-c),b=(u-c)*(u-c)+(f/2-c)*(f/2-c)-c*c,A=(-m+Math.sqrt(m*m-4*y*b))/(2*y)):s?(y=(n.x*n.x+n.y*n.y)/4,m=-n.x*(u/2-c)-n.y*(f/2-c),b=(u/2-c)*(u/2-c)+(f/2-c)*(f/2-c)-c*c,A=(-m+Math.sqrt(m*m-4*y*b))/(2*y)):(y=n.x*n.x/4+n.y*n.y,m=-n.x*(u/2-c)-2*n.y*(f-c),b=(u/2-c)*(u/2-c)+(f-c)*(f-c)-c*c,A=(-m+Math.sqrt(m*m-4*y*b))/(2*y)),A=Math.min(1,A),l?w=Math.max(0,c-Math.sqrt(Math.max(0,c*c-(c-(f-n.y*A)/2)*(c-(f-n.y*A)/2)))-o):w=Math.max(0,c-Math.sqrt(Math.max(0,c*c-(c-(u-n.x*A)/2)*(c-(u-n.x*A)/2)))-o),{scale:A,pad:w}}function QCe(e,r,t,a,n,i){var o=!!i.isHorizontal,l=!!i.constrained,s=i.angle||0,u=n.width,f=n.height,c=Math.abs(r-e),v=Math.abs(a-t),d;o?d=v>2*Pn?Pn:0:d=c>2*Pn?Pn:0;var p=1;l&&(p=o?Math.min(1,v/f):Math.min(1,c/u));var y=pZ(s),m=mZ(n,y),b=(o?m.x:m.y)/2,A=(n.left+n.right)/2,w=(n.top+n.bottom)/2,x=(e+r)/2,_=(t+a)/2,k=0,T=0,q;return(o?e===r:t===a)&&i.zeroBarDir?q=i.zeroBarDir:q=o?Wo(r,e):Wo(t,a),o?(x=r-q*d,k=q*b):(_=a+q*d,T=-q*b),{textX:A,textY:w,targetX:x,targetY:_,anchorX:k,anchorY:T,scale:p,rotate:y}}function eDe(e,r,t,a,n){var i=r[0].trace,o=i.texttemplate,l;return o?l=aDe(e,r,t,a,n):i.textinfo?l=nDe(r,t,a,n):l=W0.getValue(i.text,t),W0.coerceString(YCe,l)}function rDe(e,r){var t=W0.getValue(e.textposition,r);return W0.coerceEnumerated(VCe,t)}function tDe(e,r,t,a){for(var n=!1,i=!1,o=0;o0?n=!0:l<0&&(i=!0),n&&i)return 0}var s=r?t:a,u=-Wo(s.range[0],s.range[1]);return i?n?0:-u:u}function aDe(e,r,t,a,n){var i=r[0].trace,o=Wa.castOption(i,t,"texttemplate");if(!o)return"";var l=i.type==="histogram",s=i.type==="waterfall",u=i.type==="funnel",f=i.orientation==="h",c,v,d,p;f?(c="y",v=n,d="x",p=a):(c="x",v=a,d="y",p=n);function y(k){return n3(v,v.c2l(k),!0).text}function m(k){return n3(p,p.c2l(k),!0).text}var b=r[t],A={};A.label=b.p,A.labelLabel=A[c+"Label"]=y(b.p);var w=Wa.castOption(i,b.i,"text");(w===0||w)&&(A.text=w),A.value=b.s,A.valueLabel=A[d+"Label"]=m(b.s);var x={};jCe(x,i,b.i),(l||x.x===void 0)&&(x.x=f?A.value:A.label),(l||x.y===void 0)&&(x.y=f?A.label:A.value),(l||x.xLabel===void 0)&&(x.xLabel=f?A.valueLabel:A.labelLabel),(l||x.yLabel===void 0)&&(x.yLabel=f?A.labelLabel:A.valueLabel),s&&(A.delta=+b.rawS||b.s,A.deltaLabel=m(A.delta),A.final=b.v,A.finalLabel=m(A.final),A.initial=A.final-A.delta,A.initialLabel=m(A.initial)),u&&(A.value=b.s,A.valueLabel=m(A.value),A.percentInitial=b.begR,A.percentInitialLabel=Wa.formatPercent(b.begR),A.percentPrevious=b.difR,A.percentPreviousLabel=Wa.formatPercent(b.difR),A.percentTotal=b.sumR,A.percenTotalLabel=Wa.formatPercent(b.sumR));var _=Wa.castOption(i,b.i,"customdata");return _&&(A.customdata=_),Wa.texttemplateString({data:[x,A,i._meta],fallback:i.texttemplatefallback,labels:A,locale:e._d3locale,template:o})}function nDe(e,r,t,a){var n=e[0].trace,i=n.orientation==="h",o=n.type==="waterfall",l=n.type==="funnel";function s(_){var k=i?a:t;return n3(k,_,!0).text}function u(_){var k=i?t:a;return n3(k,+_,!0).text}var f=n.textinfo,c=e[r],v=f.split("+"),d=[],p,y=function(_){return v.indexOf(_)!==-1};if(y("label")&&d.push(s(e[r].p)),y("text")&&(p=Wa.castOption(n,c.i,"text"),(p===0||p)&&d.push(p)),o){var m=+c.rawS||c.s,b=c.v,A=b-m;y("initial")&&d.push(u(A)),y("delta")&&d.push(u(m)),y("final")&&d.push(u(b))}if(l){y("value")&&d.push(u(c.s));var w=0;y("percent initial")&&w++,y("percent previous")&&w++,y("percent total")&&w++;var x=w>1;y("percent initial")&&(p=Wa.formatPercent(c.begR),x&&(p+=" of initial"),d.push(p)),y("percent previous")&&(p=Wa.formatPercent(c.difR),x&&(p+=" of previous"),d.push(p)),y("percent total")&&(p=Wa.formatPercent(c.sumR),x&&(p+=" of total"),d.push(p))}return d.join("
")}gZ.exports={plot:$Ce,toMoveInsideBar:yZ}});var g9=z((XKe,wZ)=>{"use strict";var o2=Un(),iDe=Tr(),bZ=qr(),oDe=ke().fillText,lDe=r3().getLineWidth,y9=Yr().hoverLabelText,sDe=(jt(),ze(Zt)).BADNUM;function uDe(e,r,t,a,n){var i=xZ(e,r,t,a,n);if(i){var o=i.cd,l=o[0].trace,s=o[i.index];return i.color=_Z(l,s),iDe.getComponentMethod("errorbars","hoverInfo")(s,l,i),[i]}}function xZ(e,r,t,a,n){var i=e.cd,o=i[0].trace,l=i[0].t,s=a==="closest",u=o.type==="waterfall",f=e.maxHoverDistance,c=e.maxSpikeDistance,v,d,p,y,m,b,A;o.orientation==="h"?(v=t,d=r,p="y",y="x",m=O,b=R):(v=r,d=t,p="x",y="y",b=O,m=R);var w=o[p+"period"],x=s||w;function _($){return T($,-1)}function k($){return T($,1)}function T($,fe){var ie=$.w;return $[p]+fe*ie/2}function q($){return $[p+"End"]-$[p+"Start"]}var C=s?_:w?function($){return $.p-q($)/2}:function($){return Math.min(_($),$.p-l.bardelta/2)},E=s?k:w?function($){return $.p+q($)/2}:function($){return Math.max(k($),$.p+l.bardelta/2)};function P($,fe,ie){return n.finiteRange&&(ie=0),o2.inbox($-v,fe-v,ie+Math.min(1,Math.abs(fe-$)/A)-1)}function R($){return P(C($),E($),f)}function N($){return P(_($),k($),c)}function I($){var fe=$[y];if(u){var ie=Math.abs($.rawS)||0;d>0?fe+=ie:d<0&&(fe-=ie)}return fe}function O($){var fe=d,ie=$.b,ue=I($);return o2.inbox(ie-fe,ue-fe,f+(ue-fe)/(ue-ie)-1)}function U($){var fe=d,ie=$.b,ue=I($);return o2.inbox(ie-fe,ue-fe,c+(ue-fe)/(ue-ie)-1)}var Y=e[p+"a"],G=e[y+"a"];A=Math.abs(Y.r2c(Y.range[1])-Y.r2c(Y.range[0]));function V($){return(m($)+b($))/2}var W=o2.getDistanceFunction(a,m,b,V);if(o2.getClosest(i,W,e),e.index!==!1&&i[e.index].p!==sDe){x||(C=function($){return Math.min(_($),$.p-l.bargroupwidth/2)},E=function($){return Math.max(k($),$.p+l.bargroupwidth/2)});var j=e.index,J=i[j],te=o.base?J.b+J.s:J.s;e[y+"0"]=e[y+"1"]=G.c2p(J[y],!0),e[y+"LabelVal"]=te;var ae=l.extents[l.extents.round(J.p)];e[p+"0"]=Y.c2p(s?C(J):ae[0],!0),e[p+"1"]=Y.c2p(s?E(J):ae[1],!0);var se=J.orig_p!==void 0;return e[p+"LabelVal"]=se?J.orig_p:J.p,e.labelLabel=y9(Y,e[p+"LabelVal"],o[p+"hoverformat"]),e.valueLabel=y9(G,e[y+"LabelVal"],o[y+"hoverformat"]),e.baseLabel=y9(G,J.b,o[y+"hoverformat"]),e.spikeDistance=(U(J)+N(J))/2,e[p+"Spike"]=Y.c2p(J.p,!0),oDe(J,o,e),e.hovertemplate=o.hovertemplate,e}}function _Z(e,r){var t=r.mcc||e.marker.color,a=r.mlcc||e.marker.line.color,n=lDe(e,r);if(bZ.opacity(t))return t;if(bZ.opacity(a)&&n)return a}wZ.exports={hoverPoints:uDe,hoverOnBars:xZ,getTraceColor:_Z}});var TZ=z((ZKe,AZ)=>{"use strict";AZ.exports=function(r,t,a){return r.x="xVal"in t?t.xVal:t.x,r.y="yVal"in t?t.yVal:t.y,t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),a.orientation==="h"?(r.label=r.y,r.value=r.x):(r.label=r.x,r.value=r.y),r}});var b9=z(($Ke,MZ)=>{"use strict";MZ.exports=function(r,t){var a=r.cd,n=r.xaxis,i=r.yaxis,o=a[0].trace,l=o.type==="funnel",s=o.orientation==="h",u=[],f;if(t===!1)for(f=0;f{"use strict";kZ.exports={attributes:Pf(),layoutAttributes:Kg(),supplyDefaults:Rf().supplyDefaults,crossTraceDefaults:Rf().crossTraceDefaults,supplyLayoutDefaults:c9(),calc:$X(),crossTraceCalc:cg().crossTraceCalc,colorbar:Ud(),arraysToCalcdata:e3(),plot:m9().plot,style:j0().style,styleOnSelect:j0().styleOnSelect,hoverPoints:g9().hoverPoints,eventData:TZ(),selectPoints:b9(),moduleType:"trace",name:"bar",basePlotModule:io(),categories:["bar-like","cartesian","svg","bar","oriented","errorBarsOK","showLegend","zoomScale"],animatable:!0,meta:{}}});var LZ=z((KKe,qZ)=>{"use strict";qZ.exports=SZ()});var i3=z((QKe,PZ)=>{"use strict";var cDe=Cy(),so=Ji(),CZ=Pf(),vDe=Ii(),DZ=Eo().axisHoverFormat,{hovertemplateAttrs:hDe,templatefallbackAttrs:dDe}=di(),ns=Mt().extendFlat,X0=so.marker,EZ=X0.line;PZ.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},dx:{valType:"number",editType:"calc"},dy:{valType:"number",editType:"calc"},xperiod:so.xperiod,yperiod:so.yperiod,xperiod0:so.xperiod0,yperiod0:so.yperiod0,xperiodalignment:so.xperiodalignment,yperiodalignment:so.yperiodalignment,xhoverformat:DZ("x"),yhoverformat:DZ("y"),name:{valType:"string",editType:"calc+clearAxisTypes"},q1:{valType:"data_array",editType:"calc+clearAxisTypes"},median:{valType:"data_array",editType:"calc+clearAxisTypes"},q3:{valType:"data_array",editType:"calc+clearAxisTypes"},lowerfence:{valType:"data_array",editType:"calc"},upperfence:{valType:"data_array",editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},notchspan:{valType:"data_array",editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},sdmultiple:{valType:"number",min:0,editType:"calc",dflt:1},sizemode:{valType:"enumerated",values:["quartiles","sd"],editType:"calc",dflt:"quartiles"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],editType:"calc"},mean:{valType:"data_array",editType:"calc"},sd:{valType:"data_array",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},quartilemethod:{valType:"enumerated",values:["linear","exclusive","inclusive"],dflt:"linear",editType:"calc"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:ns({},X0.symbol,{arrayOk:!1,editType:"plot"}),opacity:ns({},X0.opacity,{arrayOk:!1,dflt:1,editType:"style"}),angle:ns({},X0.angle,{arrayOk:!1,editType:"calc"}),size:ns({},X0.size,{arrayOk:!1,editType:"calc"}),color:ns({},X0.color,{arrayOk:!1,editType:"style"}),line:{color:ns({},EZ.color,{arrayOk:!1,dflt:vDe.defaultLine,editType:"style"}),width:ns({},EZ.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:cDe(),whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},showwhiskers:{valType:"boolean",editType:"calc"},offsetgroup:CZ.offsetgroup,alignmentgroup:CZ.alignmentgroup,selected:{marker:so.selected.marker,editType:"style"},unselected:{marker:so.unselected.marker,editType:"style"},text:ns({},so.text,{}),hovertext:ns({},so.hovertext,{}),hovertemplate:hDe({}),hovertemplatefallback:dDe(),hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"},zorder:so.zorder}});var o3=z((eQe,RZ)=>{"use strict";RZ.exports={boxmode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},boxgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"},boxgroupgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"}}});var s2=z((rQe,IZ)=>{"use strict";var uo=ke(),pDe=Tr(),mDe=qr(),yDe=T0(),gDe=Fd(),FZ=Am(),l2=i3();function bDe(e,r,t,a){function n(p,y){return uo.coerce(e,r,l2,p,y)}if(zZ(e,r,n,a),r.visible!==!1){yDe(e,r,a,n),n("xhoverformat"),n("yhoverformat");var i=r._hasPreCompStats;i&&(n("lowerfence"),n("upperfence")),n("line.color",(e.marker||{}).color||t),n("line.width"),n("fillcolor",mDe.addOpacity(r.line.color,.5));var o=!1;if(i){var l=n("mean"),s=n("sd");l&&l.length&&(o=!0,s&&s.length&&(o="sd"))}n("whiskerwidth");var u=n("sizemode"),f;u==="quartiles"&&(f=n("boxmean",o)),n("showwhiskers",u==="quartiles"),(u==="sd"||f==="sd")&&n("sdmultiple"),n("width"),n("quartilemethod");var c=!1;if(i){var v=n("notchspan");v&&v.length&&(c=!0)}else uo.validate(e.notchwidth,l2.notchwidth)&&(c=!0);var d=n("notched",c);d&&n("notchwidth"),NZ(e,r,n,{prefix:"box"}),n("zorder")}}function zZ(e,r,t,a){function n(E){var P=0;return E&&E.length&&(P+=1,uo.isArrayOrTypedArray(E[0])&&E[0].length&&(P+=1)),P}function i(E){return uo.validate(e[E],l2[E])}var o=t("y"),l=t("x"),s;if(r.type==="box"){var u=t("q1"),f=t("median"),c=t("q3");r._hasPreCompStats=u&&u.length&&f&&f.length&&c&&c.length,s=Math.min(uo.minRowLength(u),uo.minRowLength(f),uo.minRowLength(c))}else r._hasPreCompStats=!1;var v=n(o),d=n(l),p=v&&uo.minRowLength(o),y=d&&uo.minRowLength(l),m=a.calendar,b={autotypenumbers:a.autotypenumbers},A,w;if(r._hasPreCompStats)switch(String(d)+String(v)){case"00":var x=i("x0")||i("dx"),_=i("y0")||i("dy");_&&!x?A="h":A="v",w=s;break;case"10":A="v",w=Math.min(s,y);break;case"20":A="h",w=Math.min(s,l.length);break;case"01":A="h",w=Math.min(s,p);break;case"02":A="v",w=Math.min(s,o.length);break;case"12":A="v",w=Math.min(s,y,o.length);break;case"21":A="h",w=Math.min(s,l.length,p);break;case"11":w=0;break;case"22":var k=!1,T;for(T=0;T0?(A="v",d>0?w=Math.min(y,p):w=Math.min(p)):d>0?(A="h",w=Math.min(y)):w=0;if(!w){r.visible=!1;return}r._length=w;var q=t("orientation",A);r._hasPreCompStats?q==="v"&&d===0?(t("x0",0),t("dx",1)):q==="h"&&v===0&&(t("y0",0),t("dy",1)):q==="v"&&d===0?t("x0"):q==="h"&&v===0&&t("y0");var C=pDe.getComponentMethod("calendars","handleTraceDefaults");C(e,r,["x","y"],a)}function NZ(e,r,t,a){var n=a.prefix,i=uo.coerce2(e,r,l2,"marker.outliercolor"),o=t("marker.line.outliercolor"),l="outliers";r._hasPreCompStats?l="all":(i||o)&&(l="suspectedoutliers");var s=t(n+"points",l);s?(t("jitter",s==="all"?.3:0),t("pointpos",s==="all"?-1.5:0),t("marker.symbol"),t("marker.opacity"),t("marker.size"),t("marker.angle"),t("marker.color",r.line.color),t("marker.line.color"),t("marker.line.width"),s==="suspectedoutliers"&&(t("marker.line.outliercolor",r.marker.color),t("marker.line.outlierwidth")),t("selected.marker.color"),t("unselected.marker.color"),t("selected.marker.size"),t("unselected.marker.size"),t("text"),t("hovertext")):delete r.marker;var u=t("hoveron");(u==="all"||u.indexOf("points")!==-1)&&(t("hovertemplate"),t("hovertemplatefallback")),uo.coerceSelectionMarkerOpacity(r,t)}function xDe(e,r){var t,a;function n(s){return uo.coerce(a._input,a,l2,s)}for(var i=0;i{"use strict";var _De=Tr(),wDe=ke(),ADe=o3();function BZ(e,r,t,a,n){for(var i=n+"Layout",o=!1,l=0;l{"use strict";var w9=Br(),l3=Yr(),MDe=k0(),_a=ke(),Li=(jt(),ze(Zt)).BADNUM,is=_a._;ZZ.exports=function(r,t){var a=r._fullLayout,n=l3.getFromId(r,t.xaxis||"x"),i=l3.getFromId(r,t.yaxis||"y"),o=[],l=t.type==="violin"?"_numViolins":"_numBoxes",s,u,f,c,v,d,p;t.orientation==="h"?(f=n,c="x",v=i,d="y",p=!!t.yperiodalignment):(f=i,c="y",v=n,d="x",p=!!t.xperiodalignment);var y=kDe(t,d,v,a[l]),m=y[0],b=y[1],A=_a.distinctVals(m,v),w=A.vals,x=A.minDiff/2,_,k,T,q,C,E,P=(t.boxpoints||t.points)==="all"?_a.identity:function(De){return De.v<_.lf||De.v>_.uf};if(t._hasPreCompStats){var R=t[c],N=function(De){return f.d2c((t[De]||[])[s])},I=1/0,O=-1/0;for(s=0;s=_.q1&&_.q3>=_.med){var Y=N("lowerfence");_.lf=Y!==Li&&Y<=_.q1?Y:YZ(_,T,q);var G=N("upperfence");_.uf=G!==Li&&G>=_.q3?G:VZ(_,T,q);var V=N("mean");_.mean=V!==Li?V:q?_a.mean(T,q):(_.q1+_.q3)/2;var W=N("sd");_.sd=V!==Li&&W>=0?W:q?_a.stdev(T,q,_.mean):_.q3-_.q1,_.lo=jZ(_),_.uo=WZ(_);var j=N("notchspan");j=j!==Li&&j>0?j:XZ(_,q),_.ln=_.med-j,_.un=_.med+j;var J=_.lf,te=_.uf;t.boxpoints&&T.length&&(J=Math.min(J,T[0]),te=Math.max(te,T[q-1])),t.notched&&(J=Math.min(J,_.ln),te=Math.max(te,_.un)),_.min=J,_.max=te}else{_a.warn(["Invalid input - make sure that q1 <= median <= q3","q1 = "+_.q1,"median = "+_.med,"q3 = "+_.q3].join(` +`));var ae;_.med!==Li?ae=_.med:_.q1!==Li?_.q3!==Li?ae=(_.q1+_.q3)/2:ae=_.q1:_.q3!==Li?ae=_.q3:ae=0,_.med=ae,_.q1=_.q3=ae,_.lf=_.uf=ae,_.mean=_.sd=ae,_.ln=_.un=ae,_.min=_.max=ae}I=Math.min(I,_.min),O=Math.max(O,_.max),_.pts2=k.filter(P),o.push(_)}}t._extremes[f._id]=l3.findExtremes(f,[I,O],{padded:!0})}else{var se=f.makeCalcdata(t,c),$=SDe(w,x),fe=w.length,ie=qDe(fe);for(s=0;s=0&&ue0){if(_={},_.pos=_[d]=w[s],k=_.pts=ie[s].sort(UZ),T=_[c]=k.map(GZ),q=T.length,_.min=T[0],_.max=T[q-1],_.mean=_a.mean(T,q),_.sd=_a.stdev(T,q,_.mean)*t.sdmultiple,_.med=_a.interp(T,.5),q%2&&(Re||ye)){var Ce,Me;Re?(Ce=T.slice(0,q/2),Me=T.slice(q/2+1)):ye&&(Ce=T.slice(0,q/2+1),Me=T.slice(q/2)),_.q1=_a.interp(Ce,.5),_.q3=_a.interp(Me,.5)}else _.q1=_a.interp(T,.25),_.q3=_a.interp(T,.75);_.lf=YZ(_,T,q),_.uf=VZ(_,T,q),_.lo=jZ(_),_.uo=WZ(_);var Le=XZ(_,q);_.ln=_.med-Le,_.un=_.med+Le,ce=Math.min(ce,_.ln),oe=Math.max(oe,_.un),_.pts2=k.filter(P),o.push(_)}t.notched&&_a.isTypedArray(se)&&(se=Array.from(se)),t._extremes[f._id]=l3.findExtremes(f,t.notched?se.concat([ce,oe]):se,{padded:!0})}return LDe(o,t),o.length>0?(o[0].t={num:a[l],dPos:x,posLetter:d,valLetter:c,labels:{med:is(r,"median:"),min:is(r,"min:"),q1:is(r,"q1:"),q3:is(r,"q3:"),max:is(r,"max:"),mean:t.boxmean==="sd"||t.sizemode==="sd"?is(r,"mean \xB1 \u03C3:").replace("\u03C3",t.sdmultiple===1?"\u03C3":t.sdmultiple+"\u03C3"):is(r,"mean:"),lf:is(r,"lower fence:"),uf:is(r,"upper fence:")}},a[l]++,o):[{t:{empty:!0}}]};function kDe(e,r,t,a){var n=r in e,i=r+"0"in e,o="d"+r in e;if(n||i&&o){var l=t.makeCalcdata(e,r),s=MDe(e,t,r,l).vals;return[s,l]}var u;i?u=e[r+"0"]:"name"in e&&(t.type==="category"||w9(e.name)&&["linear","log"].indexOf(t.type)!==-1||_a.isDateTime(e.name)&&t.type==="date")?u=e.name:u=a;for(var f=t.type==="multicategory"?t.r2c_just_indices(u):t.d2c(u,0,e[r+"calendar"]),c=e._length,v=new Array(c),d=0;d{"use strict";var $Z=Yr(),CDe=ke(),DDe=bf().getAxisGroup,JZ=["v","h"];function EDe(e,r){for(var t=e.calcdata,a=r.xaxis,n=r.yaxis,i=0;i1,A=1-i[e+"gap"],w=1-i[e+"groupgap"];for(s=0;s0;if(T==="positive"?(G=q*(k?1:.5),j=W,V=j=E):T==="negative"?(G=j=E,V=q*(k?1:.5),J=W):(G=V=q,j=J=W),ie){var ue=x.pointpos,ce=x.jitter,oe=x.marker.size/2,be=0;ue+ce>=0&&(be=W*(ue+ce),be>G?(fe=!0,se=oe,te=be):be>j&&(se=oe,te=G)),be<=G&&(te=G);var Re=0;ue-ce<=0&&(Re=-W*(ue-ce),Re>V?(fe=!0,$=oe,ae=Re):Re>J&&($=oe,ae=V)),Re<=V&&(ae=V)}else te=G,ae=V;var ye=new Array(f.length);for(u=0;u{"use strict";var Z0=Pr(),Nf=ke(),PDe=Jr(),e$=5,RDe=.01;function FDe(e,r,t,a){var n=e._context.staticPlot,i=r.xaxis,o=r.yaxis;Nf.makeTraceGroups(a,t,"trace boxes").each(function(l){var s=Z0.select(this),u=l[0],f=u.t,c=u.trace;if(f.wdPos=f.bdPos*c.whiskerwidth,c.visible!==!0||f.empty){s.remove();return}var v,d;c.orientation==="h"?(v=o,d=i):(v=i,d=o),r$(s,{pos:v,val:d},c,f,n),t$(s,{x:i,y:o},c,f),a$(s,{pos:v,val:d},c,f)})}function r$(e,r,t,a,n){var i=t.orientation==="h",o=r.val,l=r.pos,s=!!l.rangebreaks,u=a.bPos,f=a.wdPos||0,c=a.bPosPxOffset||0,v=t.whiskerwidth||0,d=t.showwhiskers!==!1,p=t.notched||!1,y=p?1-2*t.notchwidth:1,m,b;Array.isArray(a.bdPos)?(m=a.bdPos[0],b=a.bdPos[1]):(m=a.bdPos,b=a.bdPos);var A=e.selectAll("path.box").data(t.type!=="violin"||t.box.visible?Nf.identity:[]);A.enter().append("path").style("vector-effect",n?"none":"non-scaling-stroke").attr("class","box"),A.exit().remove(),A.each(function(w){if(w.empty)return Z0.select(this).attr("d","M0,0Z");var x=l.c2l(w.pos+u,!0),_=l.l2p(x-m)+c,k=l.l2p(x+b)+c,T=s?(_+k)/2:l.l2p(x)+c,q=t.whiskerwidth,C=s?_*q+(1-q)*T:l.l2p(x-f)+c,E=s?k*q+(1-q)*T:l.l2p(x+f)+c,P=l.l2p(x-m*y)+c,R=l.l2p(x+b*y)+c,N=t.sizemode==="sd",I=o.c2p(N?w.mean-w.sd:w.q1,!0),O=N?o.c2p(w.mean+w.sd,!0):o.c2p(w.q3,!0),U=Nf.constrain(N?o.c2p(w.mean,!0):o.c2p(w.med,!0),Math.min(I,O)+1,Math.max(I,O)-1),Y=w.lf===void 0||t.boxpoints===!1||N,G=o.c2p(Y?w.min:w.lf,!0),V=o.c2p(Y?w.max:w.uf,!0),W=o.c2p(w.ln,!0),j=o.c2p(w.un,!0);i?Z0.select(this).attr("d","M"+U+","+P+"V"+R+"M"+I+","+_+"V"+k+(p?"H"+W+"L"+U+","+R+"L"+j+","+k:"")+"H"+O+"V"+_+(p?"H"+j+"L"+U+","+P+"L"+W+","+_:"")+"Z"+(d?"M"+I+","+T+"H"+G+"M"+O+","+T+"H"+V+(v===0?"":"M"+G+","+C+"V"+E+"M"+V+","+C+"V"+E):"")):Z0.select(this).attr("d","M"+P+","+U+"H"+R+"M"+_+","+I+"H"+k+(p?"V"+W+"L"+R+","+U+"L"+k+","+j:"")+"V"+O+"H"+_+(p?"V"+j+"L"+P+","+U+"L"+_+","+W:"")+"Z"+(d?"M"+T+","+I+"V"+G+"M"+T+","+O+"V"+V+(v===0?"":"M"+C+","+G+"H"+E+"M"+C+","+V+"H"+E):""))})}function t$(e,r,t,a){var n=r.x,i=r.y,o=a.bdPos,l=a.bPos,s=t.boxpoints||t.points;Nf.seedPseudoRandom();var u=function(v){return v.forEach(function(d){d.t=a,d.trace=t}),v},f=e.selectAll("g.points").data(s?u:[]);f.enter().append("g").attr("class","points"),f.exit().remove();var c=f.selectAll("path").data(function(v){var d,p=v.pts2,y=Math.max((v.max-v.min)/10,v.q3-v.q1),m=y*1e-9,b=y*RDe,A=[],w=0,x;if(t.jitter){if(y===0)for(w=1,A=new Array(p.length),d=0;dv.lo&&(E.so=!0)}return p});c.enter().append("path").classed("point",!0),c.exit().remove(),c.call(PDe.translatePoints,n,i)}function a$(e,r,t,a){var n=r.val,i=r.pos,o=!!i.rangebreaks,l=a.bPos,s=a.bPosPxOffset||0,u=t.boxmean||(t.meanline||{}).visible,f,c;Array.isArray(a.bdPos)?(f=a.bdPos[0],c=a.bdPos[1]):(f=a.bdPos,c=a.bdPos);var v=e.selectAll("path.mean").data(t.type==="box"&&t.boxmean||t.type==="violin"&&t.box.visible&&t.meanline.visible?Nf.identity:[]);v.enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}),v.exit().remove(),v.each(function(d){var p=i.c2l(d.pos+l,!0),y=i.l2p(p-f)+s,m=i.l2p(p+c)+s,b=o?(y+m)/2:i.l2p(p)+s,A=n.c2p(d.mean,!0),w=n.c2p(d.mean-d.sd,!0),x=n.c2p(d.mean+d.sd,!0);t.orientation==="h"?Z0.select(this).attr("d","M"+A+","+y+"V"+m+(u==="sd"?"m0,0L"+w+","+b+"L"+A+","+y+"L"+x+","+b+"Z":"")):Z0.select(this).attr("d","M"+y+","+A+"H"+m+(u==="sd"?"m0,0L"+b+","+w+"L"+y+","+A+"L"+b+","+x+"Z":""))})}n$.exports={plot:FDe,plotBoxAndWhiskers:r$,plotPoints:t$,plotBoxMean:a$}});var L9=z((oQe,i$)=>{"use strict";var k9=Pr(),S9=qr(),q9=Jr();function zDe(e,r,t){var a=t||k9.select(e).selectAll("g.trace.boxes");a.style("opacity",function(n){return n[0].trace.opacity}),a.each(function(n){var i=k9.select(this),o=n[0].trace,l=o.line.width;function s(c,v,d,p){c.style("stroke-width",v+"px").call(S9.stroke,d).call(S9.fill,p)}var u=i.selectAll("path.box");if(o.type==="candlestick")u.each(function(c){if(!c.empty){var v=k9.select(this),d=o[c.dir];s(v,d.line.width,d.line.color,d.fillcolor),v.style("opacity",o.selectedpoints&&!c.selected?.3:1)}});else{s(u,l,o.line.color,o.fillcolor),i.selectAll("path.mean").style({"stroke-width":l,"stroke-dasharray":2*l+"px,"+l+"px"}).call(S9.stroke,o.line.color);var f=i.selectAll("path.point");q9.pointStyle(f,o,e)}})}function NDe(e,r,t){var a=r[0].trace,n=t.selectAll("path.point");a.selectedpoints?q9.selectedPointStyle(n,a):q9.pointStyle(n,a,e)}i$.exports={style:zDe,styleOnSelect:NDe}});var D9=z((lQe,u$)=>{"use strict";var IDe=Yr(),C9=ke(),au=Un(),o$=qr(),BDe=C9.fillText;function ODe(e,r,t,a){var n=e.cd,i=n[0].trace,o=i.hoveron,l=[],s;return o.indexOf("boxes")!==-1&&(l=l.concat(l$(e,r,t,a))),o.indexOf("points")!==-1&&(s=s$(e,r,t)),a==="closest"?s?[s]:l:(s&&l.push(s),l)}function l$(e,r,t,a){var n=e.cd,i=e.xa,o=e.ya,l=n[0].trace,s=n[0].t,u=l.type==="violin",f,c,v,d,p,y,m,b,A,w,x,_=s.bdPos,k,T,q=s.wHover,C=function(oe){return v.c2l(oe.pos)+s.bPos-v.c2l(y)};u&&l.side!=="both"?(l.side==="positive"&&(A=function(oe){var be=C(oe);return au.inbox(be,be+q,w)},k=_,T=0),l.side==="negative"&&(A=function(oe){var be=C(oe);return au.inbox(be-q,be,w)},k=0,T=_)):(A=function(oe){var be=C(oe);return au.inbox(be-q,be+q,w)},k=T=_);var E;u?E=function(oe){return au.inbox(oe.span[0]-p,oe.span[1]-p,w)}:E=function(oe){return au.inbox(oe.min-p,oe.max-p,w)},l.orientation==="h"?(p=r,y=t,m=E,b=A,f="y",v=o,c="x",d=i):(p=t,y=r,m=A,b=E,f="x",v=i,c="y",d=o);var P=Math.min(1,_/Math.abs(v.r2c(v.range[1])-v.r2c(v.range[0])));w=e.maxHoverDistance-P,x=e.maxSpikeDistance-P;function R(oe){return(m(oe)+b(oe))/2}var N=au.getDistanceFunction(a,m,b,R);if(au.getClosest(n,N,e),e.index===!1)return[];var I=n[e.index],O=l.line.color,U=(l.marker||{}).color;o$.opacity(O)&&l.line.width?e.color=O:o$.opacity(U)&&l.boxpoints?e.color=U:e.color=l.fillcolor,e[f+"0"]=v.c2p(I.pos+s.bPos-T,!0),e[f+"1"]=v.c2p(I.pos+s.bPos+k,!0),e[f+"LabelVal"]=I.orig_p!==void 0?I.orig_p:I.pos;var Y=f+"Spike";e.spikeDistance=R(I)*x/w,e[Y]=v.c2p(I.pos,!0);var G=l.boxmean||l.sizemode==="sd"||(l.meanline||{}).visible,V=l.boxpoints||l.points,W=V&&G?["max","uf","q3","med","mean","q1","lf","min"]:V&&!G?["max","uf","q3","med","q1","lf","min"]:!V&&G?["max","q3","med","mean","q1","min"]:["max","q3","med","q1","min"],j=d.range[1]{"use strict";f$.exports=function(r,t){return t.hoverOnBox&&(r.hoverOnBox=t.hoverOnBox),"xVal"in t&&(r.x=t.xVal),"yVal"in t&&(r.y=t.yVal),t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),r}});var E9=z((uQe,v$)=>{"use strict";v$.exports=function(r,t){var a=r.cd,n=r.xaxis,i=r.yaxis,o=[],l,s;if(t===!1)for(l=0;l{"use strict";h$.exports={attributes:i3(),layoutAttributes:o3(),supplyDefaults:s2().supplyDefaults,crossTraceDefaults:s2().crossTraceDefaults,supplyLayoutDefaults:x9().supplyLayoutDefaults,calc:A9(),crossTraceCalc:T9().crossTraceCalc,plot:M9().plot,style:L9().style,styleOnSelect:L9().styleOnSelect,hoverPoints:D9().hoverPoints,eventData:c$(),selectPoints:E9(),moduleType:"trace",name:"box",basePlotModule:io(),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","boxLayout","zoomScale"],meta:{}}});var m$=z((cQe,p$)=>{"use strict";p$.exports=d$()});var u2=z((vQe,g$)=>{"use strict";var HDe=ol(),{extendFlat:oi}=Mt(),UDe=On(),{axisHoverFormat:P9}=Eo(),GDe=Ca(),{hovertemplateAttrs:YDe,templatefallbackAttrs:y$,texttemplateAttrs:VDe}=di(),Ci=Ji();g$.exports=oi({z:{valType:"data_array",editType:"calc"},x:oi({},Ci.x,{impliedEdits:{xtype:"array"}}),x0:oi({},Ci.x0,{impliedEdits:{xtype:"scaled"}}),dx:oi({},Ci.dx,{impliedEdits:{xtype:"scaled"}}),y:oi({},Ci.y,{impliedEdits:{ytype:"array"}}),y0:oi({},Ci.y0,{impliedEdits:{ytype:"scaled"}}),dy:oi({},Ci.dy,{impliedEdits:{ytype:"scaled"}}),xperiod:oi({},Ci.xperiod,{impliedEdits:{xtype:"scaled"}}),yperiod:oi({},Ci.yperiod,{impliedEdits:{ytype:"scaled"}}),xperiod0:oi({},Ci.xperiod0,{impliedEdits:{xtype:"scaled"}}),yperiod0:oi({},Ci.yperiod0,{impliedEdits:{ytype:"scaled"}}),xperiodalignment:oi({},Ci.xperiodalignment,{impliedEdits:{xtype:"scaled"}}),yperiodalignment:oi({},Ci.yperiodalignment,{impliedEdits:{ytype:"scaled"}}),text:{valType:"data_array",editType:"calc"},hovertext:{valType:"data_array",editType:"calc"},transpose:{valType:"boolean",dflt:!1,editType:"calc"},xtype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},ytype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},zsmooth:{valType:"enumerated",values:["fast","best",!1],dflt:!1,editType:"calc"},hoverongaps:{valType:"boolean",dflt:!0,editType:"none"},connectgaps:{valType:"boolean",editType:"calc"},xgap:{valType:"number",dflt:0,min:0,editType:"plot"},ygap:{valType:"number",dflt:0,min:0,editType:"plot"},xhoverformat:P9("x"),yhoverformat:P9("y"),zhoverformat:P9("z",1),hovertemplate:YDe(),hovertemplatefallback:y$(),texttemplate:VDe({arrayOk:!1,editType:"plot"},{keys:["x","y","z","text"]}),texttemplatefallback:y$({editType:"plot"}),textfont:GDe({editType:"plot",autoSize:!0,autoColor:!0,colorEditType:"style"}),showlegend:oi({},UDe.showlegend,{dflt:!1}),zorder:Ci.zorder},HDe("",{cLetter:"z",autoColorDflt:!1}))});var R9=z((hQe,x$)=>{"use strict";var jDe=Br(),s3=ke(),WDe=Tr();x$.exports=function(r,t,a,n,i,o){var l=a("z");i=i||"x",o=o||"y";var s,u;if(l===void 0||!l.length)return 0;if(s3.isArray1D(l)){s=a(i),u=a(o);var f=s3.minRowLength(s),c=s3.minRowLength(u);if(f===0||c===0)return 0;t._length=Math.min(f,c,l.length)}else{if(s=b$(i,a),u=b$(o,a),!XDe(l))return 0;a("transpose"),t._length=null}var v=WDe.getComponentMethod("calendars","handleTraceDefaults");return v(r,t,[i,o],n),!0};function b$(e,r){var t=r(e),a=t?r(e+"type","array"):"scaled";return a==="scaled"&&(r(e+"0"),r("d"+e)),t}function XDe(e){for(var r=!0,t=!1,a=!1,n,i=0;i0&&(t=!0);for(var o=0;o{"use strict";var _$=ke();w$.exports=function(r,t){r("texttemplate"),r("texttemplatefallback");var a=_$.extendFlat({},t.font,{color:"auto",size:"auto"});_$.coerceFont(r,"textfont",a)}});var F9=z((pQe,A$)=>{"use strict";A$.exports=function(r,t,a){var n=a("zsmooth");n===!1&&(a("xgap"),a("ygap")),a("zhoverformat")}});var k$=z((mQe,M$)=>{"use strict";var T$=ke(),ZDe=R9(),$De=f2(),JDe=T0(),KDe=F9(),QDe=jl(),eEe=u2();M$.exports=function(r,t,a,n){function i(l,s){return T$.coerce(r,t,eEe,l,s)}var o=ZDe(r,t,i,n);if(!o){t.visible=!1;return}JDe(r,t,n,i),i("xhoverformat"),i("yhoverformat"),i("text"),i("hovertext"),i("hovertemplate"),i("hovertemplatefallback"),$De(i,n),KDe(r,t,i,n),i("hoverongaps"),i("connectgaps",T$.isArray1D(t.z)&&t.zsmooth!==!1),QDe(r,t,n,i,{prefix:"",cLetter:"z"}),i("zorder")}});var z9=z((yQe,S$)=>{"use strict";var $0=Br();S$.exports={count:function(e,r,t){return t[e]++,1},sum:function(e,r,t,a){var n=a[r];return $0(n)?(n=Number(n),t[e]+=n,n):0},avg:function(e,r,t,a,n){var i=a[r];return $0(i)&&(i=Number(i),t[e]+=i,n[e]++),0},min:function(e,r,t,a){var n=a[r];if($0(n))if(n=Number(n),$0(t[e])){if(t[e]>n){var i=n-t[e];return t[e]=n,i}}else return t[e]=n,n;return 0},max:function(e,r,t,a){var n=a[r];if($0(n))if(n=Number(n),$0(t[e])){if(t[e]{"use strict";q$.exports={percent:function(e,r){for(var t=e.length,a=100/r,n=0;n{"use strict";L$.exports=function(r,t){for(var a=r.length,n=0,i=0;i{"use strict";var J0=(jt(),ze(Zt)),If=J0.ONEAVGYEAR,C$=J0.ONEAVGMONTH,f3=J0.ONEDAY,D$=J0.ONEHOUR,E$=J0.ONEMIN,P$=J0.ONESEC,R$=Yr().tickIncrement;N$.exports=function(r,t,a,n,i){var o=-1.1*t,l=-.1*t,s=r-l,u=a[0],f=a[1],c=Math.min(u3(u+l,u+s,n,i),u3(f+l,f+s,n,i)),v=Math.min(u3(u+o,u+l,n,i),u3(f+o,f+l,n,i)),d,p;if(c>v&&vf3){var y=d===If?1:6,m=d===If?"M12":"M1";return function(b,A){var w=n.c2d(b,If,i),x=w.indexOf("-",y);x>0&&(w=w.slice(0,x));var _=n.d2c(w,0,i);if(_P$?e>f3?e>If*1.1?If:e>C$*1.1?C$:f3:e>D$?D$:e>E$?E$:P$:Math.pow(10,Math.floor(Math.log(e)/Math.LN10))}function rEe(e,r,t,a,n,i){if(a&&e>f3){var o=z$(r,n,i),l=z$(t,n,i),s=e===If?0:1;return o[s]!==l[s]}return Math.floor(t/e)-Math.floor(r/e)>.1}function z$(e,r,t){var a=r.c2d(e,If,t).split("-");return a[0]===""&&(a.unshift(),a[0]="-"+a[0]),a}});var U9=z((_Qe,U$)=>{"use strict";var O9=Br(),Rn=ke(),I$=Tr(),fo=Yr(),{hasColorscale:B$}=yi(),O$=Kc(),tEe=e3(),H$=z9(),aEe=N9(),nEe=I9(),iEe=B9();function oEe(e,r){var t=[],a=[],n=r.orientation==="h",i=fo.getFromId(e,n?r.yaxis:r.xaxis),o=n?"y":"x",l={x:"y",y:"x"}[o],s=r[o+"calendar"],u=r.cumulative,f,c=H9(e,r,i,o),v=c[0],d=c[1],p=typeof v.size=="string",y=[],m=p?y:v,b=[],A=[],w=[],x=0,_=r.histnorm,k=r.histfunc,T=_.indexOf("density")!==-1,q,C,E;u.enabled&&T&&(_=_.replace(/ ?density$/,""),T=!1);var P=k==="max"||k==="min",R=P?null:0,N=H$.count,I=aEe[_],O=!1,U=function(be){return i.r2c(be,0,s)},Y;for(Rn.isArrayOrTypedArray(r[l])&&k!=="count"&&(Y=r[l],O=k==="avg",N=H$[k]),f=U(v.start),C=U(v.end)+(f-fo.tickIncrement(f,v.size,!1,s))/1e6;f=0&&E=ue;f--)if(a[f]){ce=f;break}for(f=ue;f<=ce;f++)if(O9(t[f])&&O9(a[f])){var oe={p:t[f],s:a[f],b:0};u.enabled||(oe.pts=w[f],j?oe.ph0=oe.ph1=w[f].length?d[w[f][0]]:t[f]:(r._computePh=!0,oe.ph0=$(y[f]),oe.ph1=$(y[f+1],!0))),ie.push(oe)}return ie.length===1&&(ie[0].width1=fo.tickIncrement(ie[0].p,v.size,!1,s)-ie[0].p),B$(r,"marker")&&O$(e,r,{vals:r.marker.color,containerStr:"marker",cLetter:"c"}),B$(r,"marker.line")&&O$(e,r,{vals:r.marker.line.color,containerStr:"marker.line",cLetter:"c"}),tEe(ie,r),Rn.isArrayOrTypedArray(r.selectedpoints)&&Rn.tagSelected(ie,r,ae),ie}function H9(e,r,t,a,n){var se;var i=a+"bins",o=e._fullLayout,l=r["_"+a+"bingroup"],s=o._histogramBinOpts[l],u=o.barmode==="overlay",f,c,v,d,p,y,m,b=function($){return t.r2c($,0,d)},A=function($){return t.c2r($,0,d)},w=t.type==="date"?function($){return $||$===0?Rn.cleanDate($,null,d):null}:function($){return O9($)?Number($):null};function x($,fe,ie){fe[$+"Found"]?(fe[$]=w(fe[$]),fe[$]===null&&(fe[$]=ie[$])):(y[$]=fe[$]=ie[$],Rn.nestedProperty(c[0],i+"."+$).set(ie[$]))}if(r["_"+a+"autoBinFinished"])delete r["_"+a+"autoBinFinished"];else{c=s.traces;var _=[],k=!0,T=!1,q=!1;for(f=0;ft.r2l(Y)&&(V=fo.tickIncrement(V,s.size,!0,d)),N.start=t.l2r(V),U||Rn.nestedProperty(r,i+".start").set(N.start)}var W=s.end,j=t.r2l(R.end),J=j!==void 0;if((s.endFound||J)&&j!==t.r2l(W)){var te=J?j:Rn.aggNums(Math.max,null,p);N.end=t.l2r(te),J||Rn.nestedProperty(r,i+".start").set(N.end)}var ae="autobin"+a;return r._input[ae]===!1&&(r._input[i]=Rn.extendFlat({},r[i]||{}),delete r._input[ae],delete r[ae]),[N,p]}function lEe(e,r,t,a,n){var i=e._fullLayout,o=sEe(e,r),l=!1,s=1/0,u=[r],f,c,v;for(f=0;f=0;a--)l(a);else if(r==="increasing"){for(a=1;a=0;a--)e[a]+=e[a+1];t==="exclude"&&(e.push(0),e.shift())}}U$.exports={calc:oEe,calcAllAutoBins:H9}});var $$=z((wQe,Z$)=>{"use strict";var G$=ke(),K0=Yr(),Y$=z9(),fEe=N9(),cEe=I9(),vEe=B9(),V$=U9().calcAllAutoBins;Z$.exports=function(r,t){var a=K0.getFromId(r,t.xaxis),n=K0.getFromId(r,t.yaxis),i=t.xcalendar,o=t.ycalendar,l=function(me){return a.r2c(me,0,i)},s=function(me){return n.r2c(me,0,o)},u=function(me){return a.c2r(me,0,i)},f=function(me){return n.c2r(me,0,o)},c,v,d,p,y=V$(r,t,a,"x"),m=y[0],b=y[1],A=V$(r,t,n,"y"),w=A[0],x=A[1],_=t._length;b.length>_&&b.splice(_,b.length-_),x.length>_&&x.splice(_,x.length-_);var k=[],T=[],q=[],C=typeof m.size=="string",E=typeof w.size=="string",P=[],R=[],N=C?P:m,I=E?R:w,O=0,U=[],Y=[],G=t.histnorm,V=t.histfunc,W=G.indexOf("density")!==-1,j=V==="max"||V==="min",J=j?null:0,te=Y$.count,ae=fEe[G],se=!1,$=[],fe=[],ie="z"in t?t.z:"marker"in t&&Array.isArray(t.marker.color)?t.marker.color:"";ie&&V!=="count"&&(se=V==="avg",te=Y$[V]);var ue=m.size,ce=l(m.start),oe=l(m.end)+(ce-K0.tickIncrement(ce,ue,!1,i))/1e6;for(c=ce;c=0&&d=0&&p{"use strict";var Tl=ke(),J$=(jt(),ze(Zt)).BADNUM,K$=k0();Q$.exports=function(r,t,a,n,i,o){var l=r._length,s=t.makeCalcdata(r,n),u=a.makeCalcdata(r,i);s=K$(r,t,n,s).vals,u=K$(r,a,i,u).vals;var f=r.text,c=f!==void 0&&Tl.isArray1D(f),v=r.hovertext,d=v!==void 0&&Tl.isArray1D(v),p,y,m=Tl.distinctVals(s),b=m.vals,A=Tl.distinctVals(u),w=A.vals,x=[],_,k,T=w.length,q=b.length;for(p=0;p{"use strict";var hEe=Br(),dEe=ke(),c3=(jt(),ze(Zt)).BADNUM;rJ.exports=function(r,t,a,n){var i,o,l,s,u,f;function c(b){if(hEe(b))return+b}if(t&&t.transpose){for(i=0,u=0;u{"use strict";var pEe=ke(),aJ=.01,mEe=[[-1,0],[1,0],[0,-1],[0,1]];function yEe(e){return .5-.25*Math.min(1,e*.5)}iJ.exports=function(r,t){var a=1,n;for(nJ(r,t),n=0;naJ;n++)a=nJ(r,t,yEe(a));return a>aJ&&pEe.log("interp2d didn't converge quickly",a),r};function nJ(e,r,t){var a=0,n,i,o,l,s,u,f,c,v,d,p,y,m;for(l=0;ly&&(a=Math.max(a,Math.abs(e[i][o]-p)/(m-y))))}return a}});var sJ=z((kQe,lJ)=>{"use strict";var gEe=ke().maxRowLength;lJ.exports=function(r){var t=[],a={},n=[],i=r[0],o=[],l=[0,0,0],s=gEe(r),u,f,c,v,d,p,y,m;for(f=0;f=0;d--)v=n[d],f=v[0],c=v[1],p=((a[[f-1,c]]||l)[2]+(a[[f+1,c]]||l)[2]+(a[[f,c-1]]||l)[2]+(a[[f,c+1]]||l)[2])/20,p&&(y[v]=[f,c,p],n.splice(d,1),m=!0);if(!m)throw"findEmpties iterated with no new neighbors";for(v in y)a[v]=y[v],t.push(y[v])}return t.sort(function(b,A){return A[2]-b[2]})}});var vJ=z((SQe,cJ)=>{"use strict";var uJ=Tr(),fJ=ke().isArrayOrTypedArray;cJ.exports=function(r,t,a,n,i,o){var l=[],s=uJ.traceIs(r,"contour"),u=uJ.traceIs(r,"histogram"),f,c,v,d=fJ(t)&&t.length>1;if(d&&!u&&o.type!=="category"){var p=t.length;if(p<=i){if(s)l=Array.from(t).slice(0,i);else if(i===1)o.type==="log"?l=[.5*t[0],2*t[0]]:l=[t[0]-.5,t[0]+.5];else if(o.type==="log"){for(l=[Math.pow(t[0],1.5)/Math.pow(t[1],.5)],v=1;v{"use strict";var hJ=Tr(),G9=ke(),v3=Yr(),dJ=k0(),bEe=$$(),xEe=Kc(),_Ee=eJ(),wEe=tJ(),AEe=oJ(),TEe=sJ(),h3=vJ(),Y9=(jt(),ze(Zt)).BADNUM;mJ.exports=function(r,t){var a=v3.getFromId(r,t.xaxis||"x"),n=v3.getFromId(r,t.yaxis||"y"),i=hJ.traceIs(t,"contour"),o=hJ.traceIs(t,"histogram"),l=i?"best":t.zsmooth,s,u,f,c,v,d,p,y,m,b,A;if(a._minDtick=0,n._minDtick=0,o)A=bEe(r,t),c=A.orig_x,s=A.x,u=A.x0,f=A.dx,y=A.orig_y,v=A.y,d=A.y0,p=A.dy,m=A.z;else{var w=t.z;G9.isArray1D(w)?(_Ee(t,a,n,"x","y",["z"]),s=t._x,v=t._y,w=t._z):(c=t.x?a.makeCalcdata(t,"x"):[],y=t.y?n.makeCalcdata(t,"y"):[],s=dJ(t,a,"x",c).vals,v=dJ(t,n,"y",y).vals,t._x=s,t._y=v),u=t.x0,f=t.dx,d=t.y0,p=t.dy,m=wEe(w,t,a,n)}(a.rangebreaks||n.rangebreaks)&&(m=MEe(s,v,m),o||(s=pJ(s),v=pJ(v),t._x=s,t._y=v)),!o&&(i||t.connectgaps)&&(t._emptypoints=TEe(m),AEe(m,t._emptypoints));function x(N){l=t._input.zsmooth=t.zsmooth=!1,G9.warn('cannot use zsmooth: "fast": '+N)}function _(N){if(N.length>1){var I=(N[N.length-1]-N[0])/(N.length-1),O=Math.abs(I/100);for(b=0;bO)return!1}return!0}t._islinear=!1,a.type==="log"||n.type==="log"?l==="fast"&&x("log axis found"):_(s)?_(v)?t._islinear=!0:l==="fast"&&x("y scale is not linear"):l==="fast"&&x("x scale is not linear");var k=G9.maxRowLength(m),T=t.xtype==="scaled"?"":s,q=h3(t,T,u,f,k,a),C=t.ytype==="scaled"?"":v,E=h3(t,C,d,p,m.length,n);t._extremes[a._id]=v3.findExtremes(a,q),t._extremes[n._id]=v3.findExtremes(n,E);var P={x:q,y:E,z:m,text:t._text||t.text,hovertext:t._hovertext||t.hovertext};if(t.xperiodalignment&&c&&(P.orig_x=c),t.yperiodalignment&&y&&(P.orig_y=y),T&&T.length===q.length-1&&(P.xCenter=T),C&&C.length===E.length-1&&(P.yCenter=C),o&&(P.xRanges=A.xRanges,P.yRanges=A.yRanges,P.pts=A.pts),i||xEe(r,t,{vals:m,cLetter:"z"}),i&&t.contours&&t.contours.coloring==="heatmap"){var R={type:t.type==="contour"?"heatmap":"histogram2d",xcalendar:t.xcalendar,ycalendar:t.ycalendar};P.xfill=h3(R,T,u,f,k,a),P.yfill=h3(R,C,d,p,m.length,n)}return[P]};function pJ(e){for(var r=[],t=e.length,a=0;ayJ,STYLE:()=>kEe});var yJ,kEe,m3=St(()=>{"use strict";yJ=[["image-rendering","optimizeSpeed"],["image-rendering","-moz-crisp-edges"],["image-rendering","-o-crisp-edges"],["image-rendering","-webkit-optimize-contrast"],["image-rendering","optimize-contrast"],["image-rendering","crisp-edges"],["image-rendering","pixelated"]],kEe=yJ.map(e=>e.join(": ")+"; ").join("")});var j9=z((LQe,bJ)=>{"use strict";var gJ=(m3(),ze(p3)),SEe=Jr(),V9=ke(),Q0=null;function qEe(){if(Q0!==null)return Q0;Q0=!1;var e=V9.isSafari()||V9.isMacWKWebView()||V9.isIOS();if(window.navigator.userAgent&&!e){var r=Array.from(gJ.CSS_DECLARATIONS).reverse(),t=window.CSS&&window.CSS.supports||window.supportsCSS;if(typeof t=="function")Q0=r.some(function(o){return t.apply(null,o)});else{var a=SEe.tester.append("image").attr("style",gJ.STYLE),n=window.getComputedStyle(a.node()),i=n.imageRendering;Q0=r.some(function(o){var l=o[1];return i===l||i===l.toLowerCase()}),a.remove()}}return Q0}bJ.exports=qEe});var y3=z((CQe,LJ)=>{"use strict";var xJ=Pr(),LEe=Tr(),CEe=Jr(),DEe=Yr(),co=ke(),_J=Fa(),EEe=r8(),wJ=qr(),PEe=ll().extractOpts,REe=ll().makeColorScaleFuncFromTrace,FEe=(Vl(),ze(Yl)),zEe=(on(),ze(nn)),W9=zEe.LINE_SPACING,NEe=j9(),IEe=(m3(),ze(p3)).STYLE,SJ="heatmap-label";function qJ(e){return e.selectAll("g."+SJ)}function AJ(e){qJ(e).remove()}LJ.exports=function(e,r,t,a){var n=r.xaxis,i=r.yaxis;co.makeTraceGroups(a,t,"hm").each(function(o){var l=xJ.select(this),s=o[0],u=s.trace,f=u.xgap||0,c=u.ygap||0,v=s.z,d=s.x,p=s.y,y=s.xCenter,m=s.yCenter,b=LEe.traceIs(u,"contour"),A=b?"best":u.zsmooth,w=v.length,x=co.maxRowLength(v),_=!1,k=!1,T,q,C,E,P,R,N,I;for(R=0;T===void 0&&R0;)q=n.c2p(d[R]),R--;for(q0;)P=i.c2p(p[R]),R--;P=n._length||q<=0||E>=i._length||P<=0;if(V){var W=l.selectAll("image").data([]);W.exit().remove(),AJ(l);return}var j,J;O==="fast"?(j=x,J=w):(j=Y,J=G);var te=document.createElement("canvas");te.width=j,te.height=J;var ae=te.getContext("2d",{willReadFrequently:!0}),se=REe(u,{noNumericCheck:!0,returnArray:!0}),$,fe;O==="fast"?($=_?function(dt){return x-1-dt}:co.identity,fe=k?function(dt){return w-1-dt}:co.identity):($=function(dt){return co.constrain(Math.round(n.c2p(d[dt])-T),0,Y)},fe=function(dt){return co.constrain(Math.round(i.c2p(p[dt])-E),0,G)});var ie=fe(0),ue=[ie,ie],ce=_?0:1,oe=k?0:1,be=0,Re=0,ye=0,Ce=0,Me,Le,De,Ie,qe;function Ze(dt,Ka=0){if(dt===void 0)return[0,0,0,0];var Yt=se(dt);return Yt[0]=Math.round(Yt[0]),Yt[1]=Math.round(Yt[1]),Yt[2]=Math.round(Yt[2]),be+=Ka,Re+=Yt[0]*Ka,ye+=Yt[1]*Ka,Ce+=Yt[2]*Ka,Yt}function Je(dt,Ka,Yt,cc){var Nn=dt[Yt.bin0];if(Nn===void 0)return Ze(void 0,1);var wo=dt[Yt.bin1],ci=Ka[Yt.bin0],ca=Ka[Yt.bin1],vc=wo-Nn||0,ds=ci-Nn||0,In;return wo===void 0?ca===void 0?In=0:ci===void 0?In=2*(ca-Nn):In=(2*ca-ci-Nn)*2/3:ca===void 0?ci===void 0?In=0:In=(2*Nn-wo-ci)*2/3:ci===void 0?In=(2*ca-wo-Nn)*2/3:In=ca+Nn-wo-ci,Ze(Nn+Yt.frac*vc+cc.frac*(ds+Yt.frac*In))}if(O!=="default"){var Xe=0,Se;try{Se=new Uint8Array(j*J*4)}catch(dt){Se=new Array(j*J*4)}if(O==="smooth"){var Fe=y||d,er=m||p,re=new Array(Fe.length),xe=new Array(er.length),Ye=new Array(Y),vr=y?MJ:TJ,Pe=m?MJ:TJ,me,Te,Ue;for(R=0;RKr||Kr>i._length))for(N=ne;Nyt||yt>n._length)){var gt=EEe({x:Qr,y:He},u,e._fullLayout);gt.x=Qr,gt.y=He;var Et=s.z[R][N];Et===void 0?(gt.z="",gt.zLabel=""):(gt.z=Et,gt.zLabel=DEe.tickText(Be,Et,"hover").text);var aa=s.text&&s.text[R]&&s.text[R][N];(aa===void 0||aa===!1)&&(aa=""),gt.text=aa;var $a=co.texttemplateString({data:[gt,u._meta],fallback:u.texttemplatefallback,labels:gt,locale:e._fullLayout._d3locale,template:Ee});if($a){var na=$a.split("
"),Ja=na.length,hn=0;for(I=0;I{"use strict";CJ.exports={min:"zmin",max:"zmax"}});var g3=z((EQe,DJ)=>{"use strict";var BEe=Pr();DJ.exports=function(r){BEe.select(r).selectAll(".hm image").style("opacity",function(t){return t.trace.opacity})}});var x3=z((PQe,PJ)=>{"use strict";var EJ=Un(),c2=ke(),b3=c2.isArrayOrTypedArray,OEe=Yr(),HEe=ll().extractOpts;PJ.exports=function(r,t,a,n,i){i||(i={});var o=i.isContour,l=r.cd[0],s=l.trace,u=r.xa,f=r.ya,c=l.x,v=l.y,d=l.z,p=l.xCenter,y=l.yCenter,m=l.zmask,b=s.zhoverformat,A=c,w=v,x,_,k,T;if(r.index!==!1){try{k=Math.round(r.index[1]),T=Math.round(r.index[0])}catch(W){c2.error("Error hovering on heatmap, pointNumber must be [row,col], found:",r.index);return}if(k<0||k>=d[0].length||T<0||T>d.length)return}else{if(EJ.inbox(t-c[0],t-c[c.length-1],0)>0||EJ.inbox(a-v[0],a-v[v.length-1],0)>0)return;if(o){var q;for(A=[2*c[0]-c[1]],q=1;q{"use strict";RJ.exports={attributes:u2(),supplyDefaults:k$(),calc:d3(),plot:y3(),colorbar:X9(),style:g3(),hoverPoints:x3(),moduleType:"trace",name:"heatmap",basePlotModule:io(),categories:["cartesian","svg","2dMap","showLegend"],meta:{}}});var NJ=z((FQe,zJ)=>{"use strict";zJ.exports=FJ()});var Z9=z((zQe,IJ)=>{"use strict";IJ.exports=function(r,t){return{start:{valType:"any",editType:"calc"},end:{valType:"any",editType:"calc"},size:{valType:"any",editType:"calc"},editType:"calc"}}});var BJ={};qt(BJ,{eventDataKeys:()=>UEe});var UEe,OJ=St(()=>{"use strict";UEe=["binNumber"]});var _3=z((NQe,YJ)=>{"use strict";var li=Pf(),HJ=Eo().axisHoverFormat,{hovertemplateAttrs:GEe,texttemplateAttrs:YEe,templatefallbackAttrs:UJ}=di(),$9=Ca(),GJ=Z9(),VEe=(OJ(),ze(BJ)),J9=Mt().extendFlat;YJ.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},xhoverformat:HJ("x"),yhoverformat:HJ("y"),text:J9({},li.text,{}),hovertext:J9({},li.hovertext,{}),orientation:li.orientation,histfunc:{valType:"enumerated",values:["count","sum","avg","min","max"],dflt:"count",editType:"calc"},histnorm:{valType:"enumerated",values:["","percent","probability","density","probability density"],dflt:"",editType:"calc"},cumulative:{enabled:{valType:"boolean",dflt:!1,editType:"calc"},direction:{valType:"enumerated",values:["increasing","decreasing"],dflt:"increasing",editType:"calc"},currentbin:{valType:"enumerated",values:["include","exclude","half"],dflt:"include",editType:"calc"},editType:"calc"},nbinsx:{valType:"integer",min:0,dflt:0,editType:"calc"},xbins:GJ("x",!0),nbinsy:{valType:"integer",min:0,dflt:0,editType:"calc"},ybins:GJ("y",!0),autobinx:{valType:"boolean",dflt:null,editType:"calc"},autobiny:{valType:"boolean",dflt:null,editType:"calc"},bingroup:{valType:"string",dflt:"",editType:"calc"},hovertemplate:GEe({},{keys:VEe.eventDataKeys}),hovertemplatefallback:UJ(),texttemplate:YEe({arrayOk:!1,editType:"plot"},{keys:["label","value"]}),texttemplatefallback:UJ({editType:"plot"}),textposition:J9({},li.textposition,{arrayOk:!1}),textfont:$9({arrayOk:!1,editType:"plot",colorEditType:"style"}),outsidetextfont:$9({arrayOk:!1,editType:"plot",colorEditType:"style"}),insidetextfont:$9({arrayOk:!1,editType:"plot",colorEditType:"style"}),insidetextanchor:li.insidetextanchor,textangle:li.textangle,cliponaxis:li.cliponaxis,constraintext:li.constraintext,marker:li.marker,offsetgroup:li.offsetgroup,alignmentgroup:li.alignmentgroup,selected:li.selected,unselected:li.unselected,zorder:li.zorder}});var XJ=z((IQe,WJ)=>{"use strict";var VJ=Tr(),v2=ke(),jJ=qr(),jEe=Rf().handleText,WEe=f9(),XEe=_3();WJ.exports=function(r,t,a,n){function i(A,w){return v2.coerce(r,t,XEe,A,w)}var o=i("x"),l=i("y"),s=i("cumulative.enabled");s&&(i("cumulative.direction"),i("cumulative.currentbin")),i("text");var u=i("textposition");jEe(r,t,n,i,u,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),i("hovertext"),i("hovertemplate"),i("hovertemplatefallback"),i("xhoverformat"),i("yhoverformat");var f=i("orientation",l&&!o?"h":"v"),c=f==="v"?"x":"y",v=f==="v"?"y":"x",d=o&&l?Math.min(v2.minRowLength(o)&&v2.minRowLength(l)):v2.minRowLength(t[c]||[]);if(!d){t.visible=!1;return}t._length=d;var p=VJ.getComponentMethod("calendars","handleTraceDefaults");p(r,t,["x","y"],n);var y=t[v];y&&i("histfunc"),i("histnorm"),i("autobin"+c),WEe(r,t,i,a,n),v2.coerceSelectionMarkerOpacity(t,i);var m=(t.marker.line||{}).color,b=VJ.getComponentMethod("errorbars","supplyDefaults");b(r,t,m||jJ.defaultLine,{axis:"y"}),b(r,t,m||jJ.defaultLine,{axis:"x",inherit:"y"}),i("zorder")}});var A3=z((BQe,JJ)=>{"use strict";var h2=ke(),ZEe=Aa(),w3=Tr().traceIs,$Ee=Fd(),JEe=Rf().validateCornerradius,ZJ=h2.nestedProperty,K9=bf().getAxisGroup,$J=[{aStr:{x:"xbins.start",y:"ybins.start"},name:"start"},{aStr:{x:"xbins.end",y:"ybins.end"},name:"end"},{aStr:{x:"xbins.size",y:"ybins.size"},name:"size"},{aStr:{x:"nbinsx",y:"nbinsy"},name:"nbins"}],KEe=["x","y"];JJ.exports=function(r,t){var a=t._histogramBinOpts={},n=[],i={},o=[],l,s,u,f,c,v,d;function p(O,U){return h2.coerce(l._input,l,l._module.attributes,O,U)}function y(O){return O.orientation==="v"?"x":"y"}function m(O,U){var Y=ZEe.getFromTrace({_fullLayout:t},O,U);return Y.type}function b(O,U,Y){var G=O.uid+"__"+Y;U||(U=G);var V=m(O,Y),W=O[Y+"calendar"]||"",j=a[U],J=!0;j&&(V===j.axType&&W===j.calendar?(J=!1,j.traces.push(O),j.dirs.push(Y)):(U=G,V!==j.axType&&h2.warn(["Attempted to group the bins of trace",O.index,"set on a","type:"+V,"axis","with bins on","type:"+j.axType,"axis."].join(" ")),W!==j.calendar&&h2.warn(["Attempted to group the bins of trace",O.index,"set with a",W,"calendar","with bins",j.calendar?"on a "+j.calendar+" calendar":"w/o a set calendar"].join(" ")))),J&&(a[U]={traces:[O],dirs:[Y],axType:V,calendar:O[Y+"calendar"]||""}),O["_"+Y+"bingroup"]=U}for(c=0;c{"use strict";var QEe=g9().hoverPoints,ePe=Yr().hoverLabelText;KJ.exports=function(r,t,a,n,i){var o=QEe(r,t,a,n,i);if(o){r=o[0];var l=r.cd[r.index],s=r.cd[0].trace;if(!s.cumulative.enabled){var u=s.orientation==="h"?"y":"x";r[u+"Label"]=ePe(r[u+"a"],[l.ph0,l.ph1],s[u+"hoverformat"])}return o}}});var Q9=z((HQe,eK)=>{"use strict";eK.exports=function(r,t,a,n,i){if(r.x="xVal"in t?t.xVal:t.x,r.y="yVal"in t?t.yVal:t.y,"zLabelVal"in t&&(r.z=t.zLabelVal),t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),!(a.cumulative||{}).enabled){var o=Array.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;r.pointNumbers=o,r.binNumber=r.pointNumber,delete r.pointNumber,delete r.pointIndex,r.pointIndices=o}return r}});var tK=z((UQe,rK)=>{"use strict";rK.exports={attributes:_3(),layoutAttributes:Kg(),supplyDefaults:XJ(),crossTraceDefaults:A3(),supplyLayoutDefaults:c9(),calc:U9().calc,crossTraceCalc:cg().crossTraceCalc,plot:m9().plot,layerName:"barlayer",style:j0().style,styleOnSelect:j0().styleOnSelect,colorbar:Ud(),hoverPoints:QJ(),selectPoints:b9(),eventData:Q9(),moduleType:"trace",name:"histogram",basePlotModule:io(),categories:["bar-like","cartesian","svg","bar","histogram","oriented","errorBarsOK","showLegend"],meta:{}}});var nK=z((GQe,aK)=>{"use strict";aK.exports=tK()});var M3=z((YQe,lK)=>{"use strict";var Xo=_3(),iK=Z9(),T3=u2(),rPe=On(),eA=Eo().axisHoverFormat,{hovertemplateAttrs:tPe,texttemplateAttrs:aPe,templatefallbackAttrs:oK}=di(),nPe=ol(),d2=Mt().extendFlat;lK.exports=d2({x:Xo.x,y:Xo.y,z:{valType:"data_array",editType:"calc"},marker:{color:{valType:"data_array",editType:"calc"},editType:"calc"},histnorm:Xo.histnorm,histfunc:Xo.histfunc,nbinsx:Xo.nbinsx,xbins:iK("x"),nbinsy:Xo.nbinsy,ybins:iK("y"),autobinx:Xo.autobinx,autobiny:Xo.autobiny,bingroup:d2({},Xo.bingroup,{}),xbingroup:d2({},Xo.bingroup,{}),ybingroup:d2({},Xo.bingroup,{}),xgap:T3.xgap,ygap:T3.ygap,zsmooth:T3.zsmooth,xhoverformat:eA("x"),yhoverformat:eA("y"),zhoverformat:eA("z",1),hovertemplate:tPe({},{keys:["z"]}),hovertemplatefallback:oK(),texttemplate:aPe({arrayOk:!1,editType:"plot"},{keys:["z"]}),texttemplatefallback:oK({editType:"plot"}),textfont:T3.textfont,showlegend:d2({},rPe.showlegend,{dflt:!1})},nPe("",{cLetter:"z",autoColorDflt:!1}))});var rA=z((VQe,uK)=>{"use strict";var iPe=Tr(),sK=ke();uK.exports=function(r,t,a,n){var i=a("x"),o=a("y"),l=sK.minRowLength(i),s=sK.minRowLength(o);if(!l||!s){t.visible=!1;return}t._length=Math.min(l,s);var u=iPe.getComponentMethod("calendars","handleTraceDefaults");u(r,t,["x","y"],n);var f=a("z")||a("marker.color");f&&a("histfunc"),a("histnorm"),a("autobinx"),a("autobiny")}});var cK=z((jQe,fK)=>{"use strict";var oPe=ke(),lPe=rA(),sPe=F9(),uPe=jl(),fPe=f2(),cPe=M3();fK.exports=function(r,t,a,n){function i(o,l){return oPe.coerce(r,t,cPe,o,l)}lPe(r,t,i,n),t.visible!==!1&&(sPe(r,t,i,n),uPe(r,t,n,i,{prefix:"",cLetter:"z"}),i("hovertemplate"),i("hovertemplatefallback"),fPe(i,n),i("xhoverformat"),i("yhoverformat"))}});var dK=z((WQe,hK)=>{"use strict";var vPe=x3(),vK=Yr().hoverLabelText;hK.exports=function(r,t,a,n,i){var o=vPe(r,t,a,n,i);if(o){r=o[0];var l=r.index,s=l[0],u=l[1],f=r.cd[0],c=f.trace,v=f.xRanges[u],d=f.yRanges[s];return r.xLabel=vK(r.xa,[v[0],v[1]],c.xhoverformat),r.yLabel=vK(r.ya,[d[0],d[1]],c.yhoverformat),o}}});var mK=z((XQe,pK)=>{"use strict";pK.exports={attributes:M3(),supplyDefaults:cK(),crossTraceDefaults:A3(),calc:d3(),plot:y3(),layerName:"heatmaplayer",colorbar:X9(),style:g3(),hoverPoints:dK(),eventData:Q9(),moduleType:"trace",name:"histogram2d",basePlotModule:io(),categories:["cartesian","svg","2dMap","histogram","showLegend"],meta:{}}});var gK=z((ZQe,yK)=>{"use strict";yK.exports=mK()});var k3={};qt(k3,{COMPARISON_OPS:()=>hPe,COMPARISON_OPS2:()=>dPe,CONSTRAINT_REDUCTION:()=>yPe,INTERVAL_OPS:()=>pPe,SET_OPS:()=>mPe});var hPe,dPe,pPe,mPe,yPe,S3=St(()=>{"use strict";hPe=["=","!=","<",">=",">","<="],dPe=["=","<",">=",">","<="],pPe=["[]","()","[)","(]","][",")(","](",")["],mPe=["{}","}{"],yPe={"=":"=","<":"<","<=":"<",">":">",">=":">","[]":"[]","()":"[]","[)":"[]","(]":"[]","][":"][",")(":"][","](":"][",")[":"]["}});var L3=z(($Qe,wK)=>{"use strict";var wa=u2(),q3=Ji(),xK=Eo(),tA=xK.axisHoverFormat,gPe=xK.descriptionOnlyNumbers,bPe=ol(),xPe=Bi().dash,_Pe=Ca(),ev=Mt().extendFlat,_K=(S3(),ze(k3)),wPe=_K.COMPARISON_OPS2,APe=_K.INTERVAL_OPS,bK=q3.line;wK.exports=ev({z:wa.z,x:wa.x,x0:wa.x0,dx:wa.dx,y:wa.y,y0:wa.y0,dy:wa.dy,xperiod:wa.xperiod,yperiod:wa.yperiod,xperiod0:q3.xperiod0,yperiod0:q3.yperiod0,xperiodalignment:wa.xperiodalignment,yperiodalignment:wa.yperiodalignment,text:wa.text,hovertext:wa.hovertext,transpose:wa.transpose,xtype:wa.xtype,ytype:wa.ytype,xhoverformat:tA("x"),yhoverformat:tA("y"),zhoverformat:tA("z",1),hovertemplate:wa.hovertemplate,hovertemplatefallback:wa.hovertemplatefallback,texttemplate:ev({},wa.texttemplate,{}),texttemplatefallback:wa.texttemplatefallback,textfont:ev({},wa.textfont,{}),hoverongaps:wa.hoverongaps,connectgaps:ev({},wa.connectgaps,{}),fillcolor:{valType:"color",editType:"calc"},autocontour:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"contours.start":void 0,"contours.end":void 0,"contours.size":void 0}},ncontours:{valType:"integer",dflt:15,min:1,editType:"calc"},contours:{type:{valType:"enumerated",values:["levels","constraint"],dflt:"levels",editType:"calc"},start:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},end:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},size:{valType:"number",dflt:null,min:0,editType:"plot",impliedEdits:{"^autocontour":!1}},coloring:{valType:"enumerated",values:["fill","heatmap","lines","none"],dflt:"fill",editType:"calc"},showlines:{valType:"boolean",dflt:!0,editType:"plot"},showlabels:{valType:"boolean",dflt:!1,editType:"plot"},labelfont:_Pe({editType:"plot",colorEditType:"style"}),labelformat:{valType:"string",dflt:"",editType:"plot",description:gPe("contour label")},operation:{valType:"enumerated",values:[].concat(wPe).concat(APe),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},editType:"calc",impliedEdits:{autocontour:!1}},line:{color:ev({},bK.color,{editType:"style+colorbars"}),width:{valType:"number",min:0,editType:"style+colorbars"},dash:xPe,smoothing:ev({},bK.smoothing,{}),editType:"plot"},zorder:q3.zorder},bPe("",{cLetter:"z",autoColorDflt:!1,editTypeOverride:"calc"}))});var nA=z((JQe,TK)=>{"use strict";var gn=M3(),Ml=L3(),TPe=ol(),aA=Eo().axisHoverFormat,AK=Mt().extendFlat;TK.exports=AK({x:gn.x,y:gn.y,z:gn.z,marker:gn.marker,histnorm:gn.histnorm,histfunc:gn.histfunc,nbinsx:gn.nbinsx,xbins:gn.xbins,nbinsy:gn.nbinsy,ybins:gn.ybins,autobinx:gn.autobinx,autobiny:gn.autobiny,bingroup:gn.bingroup,xbingroup:gn.xbingroup,ybingroup:gn.ybingroup,autocontour:Ml.autocontour,ncontours:Ml.ncontours,contours:Ml.contours,line:{color:Ml.line.color,width:AK({},Ml.line.width,{dflt:.5}),dash:Ml.line.dash,smoothing:Ml.line.smoothing,editType:"plot"},xhoverformat:aA("x"),yhoverformat:aA("y"),zhoverformat:aA("z",1),hovertemplate:gn.hovertemplate,hovertemplatefallback:gn.hovertemplatefallback,texttemplate:Ml.texttemplate,texttemplatefallback:Ml.texttemplatefallback,textfont:Ml.textfont},TPe("",{cLetter:"z",editTypeOverride:"calc"}))});var iA=z((KQe,MK)=>{"use strict";MK.exports=function(r,t,a,n){var i=n("contours.start"),o=n("contours.end"),l=i===!1||o===!1,s=a("contours.size"),u;l?u=t.autocontour=!0:u=a("autocontour",!1),(u||!s)&&a("ncontours")}});var oA=z((QQe,kK)=>{"use strict";var MPe=ke();kK.exports=function(r,t,a,n){n||(n={});var i=r("contours.showlabels");if(i){var o=t.font;MPe.coerceFont(r,"contours.labelfont",o,{overrideDflt:{color:a}}),r("contours.labelformat")}n.hasHover!==!1&&r("zhoverformat")}});var lA=z((eer,SK)=>{"use strict";var kPe=jl(),SPe=oA();SK.exports=function(r,t,a,n,i){var o=a("contours.coloring"),l,s="";o==="fill"&&(l=a("contours.showlines")),l!==!1&&(o!=="lines"&&(s=a("line.color","#000")),a("line.width",.5),a("line.dash")),o!=="none"&&(r.showlegend!==!0&&(t.showlegend=!1),t._dfltShowLegend=!1,kPe(r,t,n,a,{prefix:"",cLetter:"z"})),a("line.smoothing"),SPe(a,n,s,i)}});var DK=z((rer,CK)=>{"use strict";var qK=ke(),qPe=rA(),LPe=iA(),CPe=lA(),DPe=f2(),LK=nA();CK.exports=function(r,t,a,n){function i(l,s){return qK.coerce(r,t,LK,l,s)}function o(l){return qK.coerce2(r,t,LK,l)}qPe(r,t,i,n),t.visible!==!1&&(LPe(r,t,i,o),CPe(r,t,i,n),i("xhoverformat"),i("yhoverformat"),i("hovertemplate"),i("hovertemplatefallback"),t.contours&&t.contours.coloring==="heatmap"&&DPe(i,n))}});var RK=z((ter,PK)=>{"use strict";var uA=Yr(),sA=ke();PK.exports=function(r,t){var a=r.contours;if(r.autocontour){var n=r.zmin,i=r.zmax;(r.zauto||n===void 0)&&(n=sA.aggNums(Math.min,null,t)),(r.zauto||i===void 0)&&(i=sA.aggNums(Math.max,null,t));var o=EK(n,i,r.ncontours);a.size=o.dtick,a.start=uA.tickFirst(o),o.range.reverse(),a.end=uA.tickFirst(o),a.start===n&&(a.start+=a.size),a.end===i&&(a.end-=a.size),a.start>a.end&&(a.start=a.end=(a.start+a.end)/2),r._input.contours||(r._input.contours={}),sA.extendFlat(r._input.contours,{start:a.start,end:a.end,size:a.size}),r._input.autocontour=!0}else if(a.type!=="constraint"){var l=a.start,s=a.end,u=r._input.contours;if(l>s&&(a.start=u.start=s,s=a.end=u.end=l,l=a.start),!(a.size>0)){var f;l===s?f=1:f=EK(l,s,r.ncontours).dtick,u.size=a.size=f}}};function EK(e,r,t){var a={type:"linear",range:[e,r]};return uA.autoTicks(a,(r-e)/(t||15)),a}});var p2=z((aer,FK)=>{"use strict";FK.exports=function(r){return r.end+r.size/1e6}});var fA=z((ner,NK)=>{"use strict";var zK=ll(),EPe=d3(),PPe=RK(),RPe=p2();NK.exports=function(r,t){var a=EPe(r,t),n=a[0].z;PPe(t,n);var i=t.contours,o=zK.extractOpts(t),l;if(i.coloring==="heatmap"&&o.auto&&t.autocontour===!1){var s=i.start,u=RPe(i),f=i.size||1,c=Math.floor((u-s)/f)+1;isFinite(f)||(f=1,c=1);var v=s-f/2,d=v+c*f;l=[v,d]}else l=n;return zK.calc(r,t,{vals:l,cLetter:"z"}),a}});var C3={};qt(C3,{BOTTOMSTART:()=>FPe,CHOOSESADDLE:()=>OPe,LABELDISTANCE:()=>UPe,LABELINCREASE:()=>GPe,LABELMAX:()=>VPe,LABELMIN:()=>YPe,LABELOPTIMIZER:()=>jPe,LEFTSTART:()=>NPe,NEWDELTA:()=>BPe,RIGHTSTART:()=>IPe,SADDLEREMAINDER:()=>HPe,TOPSTART:()=>zPe});var FPe,zPe,NPe,IPe,BPe,OPe,HPe,UPe,GPe,YPe,VPe,jPe,D3=St(()=>{"use strict";FPe=[1,9,13,104,713],zPe=[4,6,7,104,713],NPe=[8,12,14,208,1114],IPe=[2,3,11,208,1114],BPe=[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],OPe={104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},HPe={1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},UPe=2,GPe=10,YPe=3,VPe=10,jPe={EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}});var BK=z((ier,IK)=>{"use strict";var E3=(D3(),ze(C3));IK.exports=function(r){var t=r[0].z,a=t.length,n=t[0].length,i=a===2||n===2,o,l,s,u,f,c,v,d,p;for(l=0;le?0:1)+(r[0][1]>e?0:2)+(r[1][1]>e?0:4)+(r[1][0]>e?0:8);if(t===5||t===10){var a=(r[0][0]+r[0][1]+r[1][0]+r[1][1])/4;return e>a?t===5?713:1114:t===5?104:208}return t===15?0:t}});var GK=z((oer,UK)=>{"use strict";var P3=ke(),rv=(D3(),ze(C3));UK.exports=function(r,t,a){var n,i,o,l,s;for(t=t||.01,a=a||.01,o=0;o20?(o=rv.CHOOSESADDLE[o][(l[0]||l[1])<0?0:1],e.crossings[i]=rv.SADDLEREMAINDER[o]):delete e.crossings[i],l=rv.NEWDELTA[o],!l){P3.log("Found bad marching index:",o,r,e.level);break}s.push(HK(e,r,l)),r[0]+=l[0],r[1]+=l[1],i=r.join(","),m2(s[s.length-1],s[s.length-2],a,n)&&s.pop();var p=l[0]&&(r[0]<0||r[0]>f-2)||l[1]&&(r[1]<0||r[1]>u-2),y=r[0]===c[0]&&r[1]===c[1]&&l[0]===v[0]&&l[1]===v[1];if(y||t&&p)break;o=e.crossings[i]}d===1e4&&P3.log("Infinite loop in contour?");var m=m2(s[0],s[s.length-1],a,n),b=0,A=.2*e.smoothing,w=[],x=0,_,k,T,q,C,E,P,R,N,I,O;for(d=1;d=x;d--)if(_=w[d],_=x&&_+w[k]R&&N--,e.edgepaths[N]=O.concat(s,I));break}V||(e.edgepaths[R]=s.concat(I))}for(R=0;R20&&r?e===208||e===1114?a=t[0]===0?1:-1:n=t[1]===0?1:-1:rv.BOTTOMSTART.indexOf(e)!==-1?n=1:rv.LEFTSTART.indexOf(e)!==-1?a=1:rv.TOPSTART.indexOf(e)!==-1?n=-1:a=-1,[a,n]}function HK(e,r,t){var a=r[0]+Math.max(t[0],0),n=r[1]+Math.max(t[1],0),i=e.z[n][a],o=e.xaxis,l=e.yaxis;if(t[1]){var s=(e.level-i)/(e.z[n][a+1]-i),u=(s!==1?(1-s)*o.c2l(e.x[a]):0)+(s!==0?s*o.c2l(e.x[a+1]):0);return[o.c2p(o.l2c(u),!0),l.c2p(e.y[n],!0),a+s,n]}else{var f=(e.level-i)/(e.z[n+1][a]-i),c=(f!==1?(1-f)*l.c2l(e.y[n]):0)+(f!==0?f*l.c2l(e.y[n+1]):0);return[o.c2p(e.x[a],!0),l.c2p(l.l2c(c),!0),a,n+f]}}});var WK=z((ler,jK)=>{"use strict";var cA=(S3(),ze(k3)),$Pe=Br();jK.exports={"[]":YK("[]"),"][":YK("]["),">":vA(">"),"<":vA("<"),"=":vA("=")};function VK(e,r){var t=Array.isArray(r),a;function n(i){return $Pe(i)?+i:null}return cA.COMPARISON_OPS2.indexOf(e)!==-1?a=n(t?r[0]:r):cA.INTERVAL_OPS.indexOf(e)!==-1?a=t?[n(r[0]),n(r[1])]:[n(r),n(r)]:cA.SET_OPS.indexOf(e)!==-1&&(a=t?r.map(n):[n(r)]),a}function YK(e){return function(r){r=VK(e,r);var t=Math.min(r[0],r[1]),a=Math.max(r[0],r[1]);return{start:t,end:a,size:a-t}}}function vA(e){return function(r){return r=VK(e,r),{start:r,end:1/0,size:1/0}}}});var $K=z((ser,ZK)=>{"use strict";var XK=ke(),JPe=WK(),KPe=p2();ZK.exports=function(r,t,a){for(var n=r.type==="constraint"?JPe[r._operation](r.value):r,i=n.size,o=[],l=KPe(n),s=a.trace._carpetTrace,u=s?{xaxis:s.aaxis,yaxis:s.baxis,x:a.a,y:a.b}:{xaxis:t.xaxis,yaxis:t.yaxis,x:a.x,y:a.y},f=n.start;f1e3){XK.warn("Too many contours, clipping at 1000",r);break}return o}});var QK=z((uer,KK)=>{"use strict";var tv=ke();KK.exports=function(e,r){var t,a,n,i=function(s){return s.reverse()},o=function(s){return s};switch(r){case"=":case"<":return e;case">":for(e.length!==1&&tv.warn("Contour data invalid for the specified inequality operation."),a=e[0],t=0;t{"use strict";eQ.exports=function(e,r){var t=e[0],a=t.z,n;switch(r.type){case"levels":var i=Math.min(a[0][0],a[0][1]);for(n=0;no.level||o.starts.length&&i===o.level)}break;case"constraint":if(t.prefixBoundary=!1,t.edgepaths.length)return;var l=t.x.length,s=t.y.length,u=-1/0,f=1/0;for(n=0;n":c>u&&(t.prefixBoundary=!0);break;case"<":(cu||t.starts.length&&d===f)&&(t.prefixBoundary=!0);break;case"][":v=Math.min(c[0],c[1]),d=Math.max(c[0],c[1]),vu&&(t.prefixBoundary=!0);break}break}}});var hA=z(Fn=>{"use strict";var g2=Pr(),Xa=ke(),os=Jr(),QPe=ll(),nQ=Fa(),tQ=Yr(),aQ=i0(),eRe=y3(),iQ=BK(),oQ=GK(),rRe=$K(),tRe=QK(),lQ=rQ(),y2=(D3(),ze(C3)),kl=y2.LABELOPTIMIZER;Fn.plot=function(r,t,a,n){var i=t.xaxis,o=t.yaxis;Xa.makeTraceGroups(n,a,"contour").each(function(l){var s=g2.select(this),u=l[0],f=u.trace,c=u.x,v=u.y,d=f.contours,p=rRe(d,t,u),y=Xa.ensureSingle(s,"g","heatmapcoloring"),m=[];d.coloring==="heatmap"&&(m=[l]),eRe(r,t,m,y),iQ(p),oQ(p);var b=i.c2p(c[0],!0),A=i.c2p(c[c.length-1],!0),w=o.c2p(v[0],!0),x=o.c2p(v[v.length-1],!0),_=[[b,x],[A,x],[A,w],[b,w]],k=p;d.type==="constraint"&&(k=tRe(p,d._operation)),aRe(s,_,d),nRe(s,k,_,d),iRe(s,p,r,u,d),lRe(s,t,r,u,_)})};function aRe(e,r,t){var a=Xa.ensureSingle(e,"g","contourbg"),n=a.selectAll("path").data(t.coloring==="fill"?[0]:[]);n.enter().append("path"),n.exit().remove(),n.attr("d","M"+r.join("L")+"Z").style("stroke","none")}function nRe(e,r,t,a){var n=a.coloring==="fill"||a.type==="constraint"&&a._operation!=="=",i="M"+t.join("L")+"Z";n&&lQ(r,a);var o=Xa.ensureSingle(e,"g","contourfill"),l=o.selectAll("path").data(n?r:[]);l.enter().append("path"),l.exit().remove(),l.each(function(s){var u=(s.prefixBoundary?i:"")+sQ(s,t);u?g2.select(this).attr("d",u).style("stroke","none"):g2.select(this).remove()})}function sQ(e,r){var t="",a=0,n=e.edgepaths.map(function(b,A){return A}),i=!0,o,l,s,u,f,c;function v(b){return Math.abs(b[1]-r[0][1])<.01}function d(b){return Math.abs(b[1]-r[2][1])<.01}function p(b){return Math.abs(b[0]-r[0][0])<.01}function y(b){return Math.abs(b[0]-r[2][0])<.01}for(;n.length;){for(c=os.smoothopen(e.edgepaths[a],e.smoothing),t+=i?c:c.replace(/^M/,"L"),n.splice(n.indexOf(a),1),o=e.edgepaths[a][e.edgepaths[a].length-1],u=-1,s=0;s<4;s++){if(!o){Xa.log("Missing end?",a,e);break}for(v(o)&&!y(o)?l=r[1]:p(o)?l=r[0]:d(o)?l=r[3]:y(o)&&(l=r[2]),f=0;f=0&&(l=m,u=f):Math.abs(o[1]-l[1])<.01?Math.abs(o[1]-m[1])<.01&&(m[0]-o[0])*(l[0]-m[0])>=0&&(l=m,u=f):Xa.log("endpt to newendpt is not vert. or horz.",o,l,m)}if(o=l,u>=0)break;t+="L"+l}if(u===e.edgepaths.length){Xa.log("unclosed perimeter path");break}a=u,i=n.indexOf(a)===-1,i&&(a=n[0],t+="Z")}for(a=0;akl.MAXCOST*2)break;v&&(l/=2),o=u-l/2,s=o+l*1.5}if(c<=kl.MAXCOST)return f};function oRe(e,r,t,a){var n=r.width/2,i=r.height/2,o=e.x,l=e.y,s=e.theta,u=Math.cos(s)*n,f=Math.sin(s)*n,c=(o>a.center?a.right-o:o-a.left)/(u+Math.abs(Math.sin(s)*i)),v=(l>a.middle?a.bottom-l:l-a.top)/(Math.abs(f)+Math.cos(s)*i);if(c<1||v<1)return 1/0;var d=kl.EDGECOST*(1/(c-1)+1/(v-1));d+=kl.ANGLECOST*s*s;for(var p=o-u,y=l-f,m=o+u,b=l+f,A=0;A{"use strict";var uRe=Pr(),dA=ll(),fRe=p2();uQ.exports=function(r){var t=r.contours,a=t.start,n=fRe(t),i=t.size||1,o=Math.floor((n-a)/i)+1,l=t.coloring==="lines"?0:1,s=dA.extractOpts(r);isFinite(i)||(i=1,o=1);var u=s.reversescale?dA.flipScale(s.colorscale):s.colorscale,f=u.length,c=new Array(f),v=new Array(f),d,p,y=s.min,m=s.max;if(t.coloring==="heatmap"){for(p=0;p=m)&&(a<=y&&(a=y),n>=m&&(n=m),o=Math.floor((n-a)/i)+1,l=0),p=0;py&&(c.unshift(y),v.unshift(v[0])),c[c.length-1]{"use strict";var R3=Pr(),fQ=Jr(),cRe=g3(),vRe=pA();cQ.exports=function(r){var t=R3.select(r).selectAll("g.contour");t.style("opacity",function(a){return a[0].trace.opacity}),t.each(function(a){var n=R3.select(this),i=a[0].trace,o=i.contours,l=i.line,s=o.size||1,u=o.start,f=o.type==="constraint",c=!f&&o.coloring==="lines",v=!f&&o.coloring==="fill",d=c||v?vRe(i):null;n.selectAll("g.contourlevel").each(function(m){R3.select(this).selectAll("path").call(fQ.lineGroupStyle,l.width,c?d(m.level):l.color,l.dash)});var p=o.labelfont;if(n.selectAll("g.contourlabels text").each(function(m){fQ.font(R3.select(this),{weight:p.weight,style:p.style,variant:p.variant,textcase:p.textcase,lineposition:p.lineposition,shadow:p.shadow,family:p.family,size:p.size,color:p.color||(c?d(m.level):l.color)})}),f)n.selectAll("g.contourfill path").style("fill",i.fillcolor);else if(v){var y;n.selectAll("g.contourfill path").style("fill",function(m){return y===void 0&&(y=m.level),d(m.level+.5*s)}),y===void 0&&(y=u),n.selectAll("g.contourbg path").style("fill",d(y-.5*s))}}),cRe(r)}});var yA=z((der,hQ)=>{"use strict";var vQ=ll(),hRe=pA(),dRe=p2();function pRe(e,r,t){var a=r.contours,n=r.line,i=a.size||1,o=a.coloring,l=hRe(r,{isColorbar:!0});if(o==="heatmap"){var s=vQ.extractOpts(r);t._fillgradient=s.reversescale?vQ.flipScale(s.colorscale):s.colorscale,t._zrange=[s.min,s.max]}else o==="fill"&&(t._fillcolor=l);t._line={color:o==="lines"?l:n.color,width:a.showlines!==!1?n.width:0,dash:n.dash},t._levels={start:a.start,end:dRe(a),size:i}}hQ.exports={min:"zmin",max:"zmax",calc:pRe}});var gA=z((per,dQ)=>{"use strict";var F3=qr(),mRe=x3();dQ.exports=function(r,t,a,n,i){i||(i={}),i.isContour=!0;var o=mRe(r,t,a,n,i);return o&&o.forEach(function(l){var s=l.trace;s.contours.type==="constraint"&&(s.fillcolor&&F3.opacity(s.fillcolor)?l.color=F3.addOpacity(s.fillcolor,1):s.contours.showlines&&F3.opacity(s.line.color)&&(l.color=F3.addOpacity(s.line.color,1)))}),o}});var mQ=z((mer,pQ)=>{"use strict";pQ.exports={attributes:nA(),supplyDefaults:DK(),crossTraceDefaults:A3(),calc:fA(),plot:hA().plot,layerName:"contourlayer",style:mA(),colorbar:yA(),hoverPoints:gA(),moduleType:"trace",name:"histogram2dcontour",basePlotModule:io(),categories:["cartesian","svg","2dMap","contour","histogram","showLegend"],meta:{}}});var gQ=z((yer,yQ)=>{"use strict";yQ.exports=mQ()});var MQ=z((ger,TQ)=>{"use strict";var bQ=Br(),yRe=oA(),wQ=qr(),xQ=wQ.addOpacity,gRe=wQ.opacity,AQ=(S3(),ze(k3)),_Q=ke().isArrayOrTypedArray,bRe=AQ.CONSTRAINT_REDUCTION,xRe=AQ.COMPARISON_OPS2;TQ.exports=function(r,t,a,n,i,o){var l=t.contours,s,u,f,c=a("contours.operation");if(l._operation=bRe[c],_Re(a,l),c==="="?s=l.showlines=!0:(s=a("contours.showlines"),f=a("fillcolor",xQ((r.line||{}).color||i,.5))),s){var v=f&&gRe(f)?xQ(t.fillcolor,1):i;u=a("line.color",v),a("line.width",2),a("line.dash")}a("line.smoothing"),yRe(a,n,u,o)};function _Re(e,r){var t;xRe.indexOf(r.operation)===-1?(e("contours.value",[0,1]),_Q(r.value)?r.value.length>2?r.value=r.value.slice(2):r.length===0?r.value=[0,1]:r.length<2?(t=parseFloat(r.value[0]),r.value=[t,t+1]):r.value=[parseFloat(r.value[0]),parseFloat(r.value[1])]:bQ(r.value)&&(t=parseFloat(r.value),r.value=[t,t+1])):(e("contours.value",0),bQ(r.value)||(_Q(r.value)?r.value=parseFloat(r.value[0]):r.value=0))}});var qQ=z((ber,SQ)=>{"use strict";var bA=ke(),wRe=R9(),ARe=T0(),TRe=MQ(),MRe=iA(),kRe=lA(),SRe=f2(),kQ=L3();SQ.exports=function(r,t,a,n){function i(u,f){return bA.coerce(r,t,kQ,u,f)}function o(u){return bA.coerce2(r,t,kQ,u)}var l=wRe(r,t,i,n);if(!l){t.visible=!1;return}ARe(r,t,n,i),i("xhoverformat"),i("yhoverformat"),i("text"),i("hovertext"),i("hoverongaps"),i("hovertemplate"),i("hovertemplatefallback");var s=i("contours.type")==="constraint";i("connectgaps",bA.isArray1D(t.z)),s?TRe(r,t,i,n,a):(MRe(r,t,i,o),kRe(r,t,i,n)),t.contours&&t.contours.coloring==="heatmap"&&SRe(i,n),i("zorder")}});var CQ=z((xer,LQ)=>{"use strict";LQ.exports={attributes:L3(),supplyDefaults:qQ(),calc:fA(),plot:hA().plot,style:mA(),colorbar:yA(),hoverPoints:gA(),moduleType:"trace",name:"contour",basePlotModule:io(),categories:["cartesian","svg","2dMap","contour","showLegend"],meta:{}}});var EQ=z((_er,DQ)=>{"use strict";DQ.exports=CQ()});var xA=z((wer,zQ)=>{"use strict";var{hovertemplateAttrs:qRe,texttemplateAttrs:LRe,templatefallbackAttrs:PQ}=di(),CRe=Cy(),Di=Ji(),DRe=On(),RQ=ol(),ERe=Bi().dash,nu=Mt().extendFlat,vo=Di.marker,b2=Di.line,FQ=vo.line;zQ.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:nu({},Di.mode,{dflt:"markers"}),text:nu({},Di.text,{}),texttemplate:LRe({editType:"plot"},{keys:["a","b","c","text"]}),texttemplatefallback:PQ({editType:"plot"}),hovertext:nu({},Di.hovertext,{}),line:{color:b2.color,width:b2.width,dash:ERe,backoff:b2.backoff,shape:nu({},b2.shape,{values:["linear","spline"]}),smoothing:b2.smoothing,editType:"calc"},connectgaps:Di.connectgaps,cliponaxis:Di.cliponaxis,fill:nu({},Di.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:CRe(),marker:nu({symbol:vo.symbol,opacity:vo.opacity,angle:vo.angle,angleref:vo.angleref,standoff:vo.standoff,maxdisplayed:vo.maxdisplayed,size:vo.size,sizeref:vo.sizeref,sizemin:vo.sizemin,sizemode:vo.sizemode,line:nu({width:FQ.width,dash:FQ.dash,editType:"calc"},RQ("marker.line")),gradient:vo.gradient,editType:"calc"},RQ("marker")),textfont:Di.textfont,textposition:Di.textposition,selected:Di.selected,unselected:Di.unselected,hoverinfo:nu({},DRe.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:Di.hoveron,hovertemplate:qRe(),hovertemplatefallback:PQ()}});var OQ=z((Aer,BQ)=>{"use strict";var NQ=ke(),PRe=(wd(),ze(_d)),av=ri(),RRe=Rw(),FRe=Fw(),IQ=zw(),zRe=Nw(),NRe=Iw(),IRe=xA();BQ.exports=function(r,t,a,n){function i(v,d){return NQ.coerce(r,t,IRe,v,d)}var o=i("a"),l=i("b"),s=i("c"),u;if(o?(u=o.length,l?(u=Math.min(u,l.length),s&&(u=Math.min(u,s.length))):s?u=Math.min(u,s.length):u=0):l&&s&&(u=Math.min(l.length,s.length)),!u){t.visible=!1;return}t._length=u,i("sum"),i("text"),i("hovertext"),t.hoveron!=="fills"&&(i("hovertemplate"),i("hovertemplatefallback"));var f=u{"use strict";var _A=Yr();HQ.exports=function(r,t,a){var n={},i=a[t.subplot]._subplot;return n.aLabel=_A.tickText(i.aaxis,r.a,!0).text,n.bLabel=_A.tickText(i.baxis,r.b,!0).text,n.cLabel=_A.tickText(i.caxis,r.c,!0).text,n}});var jQ=z((Mer,VQ)=>{"use strict";var wA=Br(),BRe=Hw(),ORe=og(),HRe=lg(),URe=sg().calcMarkerSize,GQ=["a","b","c"],YQ={a:["b","c"],b:["a","c"],c:["a","b"]};VQ.exports=function(r,t){var a=r._fullLayout[t.subplot],n=a.sum,i=t.sum||n,o={a:t.a,b:t.b,c:t.c},l=t.ids,s,u,f,c,v,d;for(s=0;s{"use strict";var GRe=e8();WQ.exports=function(r,t,a){var n=t.plotContainer;n.select(".scatterlayer").selectAll("*").remove();for(var i=t.xaxis,o=t.yaxis,l={xaxis:i,yaxis:o,plot:n,layerClipId:t._hasClipOnAxisFalse?t.clipIdRelative:null},s=t.layers.frontplot.select("g.scatterlayer"),u=0;u{"use strict";var YRe=o8();ZQ.exports=function(r,t,a,n){var i=YRe(r,t,a,n);if(!i||i[0].index===!1)return;var o=i[0];if(o.index===void 0){var l=1-o.y0/r.ya._length,s=r.xa._length,u=s*l/2,f=s-u;return o.x0=Math.max(Math.min(o.x0,f),u),o.x1=Math.max(Math.min(o.x1,f),u),i}var c=o.cd[o.index],v=o.trace,d=o.subplot;o.a=c.a,o.b=c.b,o.c=c.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var p={};p[v.subplot]={_subplot:d};var y=v._module.formatLabels(c,v,p);o.aLabel=y.aLabel,o.bLabel=y.bLabel,o.cLabel=y.cLabel;var m=c.hi||v.hoverinfo,b=[];function A(x,_){b.push(x._hovertitle+": "+_)}if(!v.hovertemplate){var w=m.split("+");w.indexOf("all")!==-1&&(w=["a","b","c"]),w.indexOf("a")!==-1&&A(d.aaxis,o.aLabel),w.indexOf("b")!==-1&&A(d.baxis,o.bLabel),w.indexOf("c")!==-1&&A(d.caxis,o.cLabel)}return o.extraText=b.join("
"),o.hovertemplate=v.hovertemplate,i}});var KQ=z((qer,JQ)=>{"use strict";JQ.exports=function(r,t,a,n,i){if(t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),n[i]){var o=n[i];r.a=o.a,r.b=o.b,r.c=o.c}else r.a=t.a,r.b=t.b,r.c=t.c;return r}});var uee=z((Ler,see)=>{"use strict";var nee=Pr(),AA=Tr(),ls=ke(),Sl=ls.strTranslate,z3=ls._,Bf=qr(),N3=Jr(),x2=i0(),TA=Mt().extendFlat,VRe=ma(),iu=Yr(),QQ=Vi(),eee=Un(),iee=df(),ree=iee.freeMode,jRe=iee.rectMode,MA=n0(),WRe=xl().prepSelect,XRe=xl().selectOnClick,ZRe=xl().clearOutline,$Re=xl().clearSelectionsCache,oee=(Pa(),ze(Ea));function lee(e,r){this.id=e.id,this.graphDiv=e.graphDiv,this.init(r),this.makeFramework(r),this.updateFx(r),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}see.exports=lee;var ql=lee.prototype;ql.init=function(e){this.container=e._ternarylayer,this.defs=e._defs,this.layoutId=e._uid,this.traceHash={},this.layers={}};ql.plot=function(e,r){var t=this,a=r[t.id],n=r._size;t._hasClipOnAxisFalse=!1;for(var i=0;inv*u?(b=u,m=b*nv):(m=s,b=m/nv),A=o*m/s,w=l*b/u,p=r.l+r.w*n-m/2,y=r.t+r.h*(1-i)-b/2,t.x0=p,t.y0=y,t.w=m,t.h=b,t.sum=f,t.xaxis={type:"linear",range:[c+2*d-f,f-c-2*v],domain:[n-A/2,n+A/2],_id:"x"},x2(t.xaxis,t.graphDiv._fullLayout),t.xaxis.setScale(),t.xaxis.isPtWithinRange=function(I){return I.a>=t.aaxis.range[0]&&I.a<=t.aaxis.range[1]&&I.b>=t.baxis.range[1]&&I.b<=t.baxis.range[0]&&I.c>=t.caxis.range[1]&&I.c<=t.caxis.range[0]},t.yaxis={type:"linear",range:[c,f-v-d],domain:[i-w/2,i+w/2],_id:"y"},x2(t.yaxis,t.graphDiv._fullLayout),t.yaxis.setScale(),t.yaxis.isPtWithinRange=function(){return!0};var x=t.yaxis.domain[0],_=t.aaxis=TA({},e.aaxis,{range:[c,f-v-d],side:"left",tickangle:(+e.aaxis.tickangle||0)-30,domain:[x,x+w*nv],anchor:"free",position:0,_id:"y",_length:m});x2(_,t.graphDiv._fullLayout),_.setScale();var k=t.baxis=TA({},e.baxis,{range:[f-c-d,v],side:"bottom",domain:t.xaxis.domain,anchor:"free",position:0,_id:"x",_length:m});x2(k,t.graphDiv._fullLayout),k.setScale();var T=t.caxis=TA({},e.caxis,{range:[f-c-v,d],side:"right",tickangle:(+e.caxis.tickangle||0)+30,domain:[x,x+w*nv],anchor:"free",position:0,_id:"y",_length:m});x2(T,t.graphDiv._fullLayout),T.setScale();var q="M"+p+","+(y+b)+"h"+m+"l-"+m/2+",-"+b+"Z";t.clipDef.select("path").attr("d",q),t.layers.plotbg.select("path").attr("d",q);var C="M0,"+b+"h"+m+"l-"+m/2+",-"+b+"Z";t.clipDefRelative.select("path").attr("d",C);var E=Sl(p,y);t.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",E),t.clipDefRelative.select("path").attr("transform",null);var P=Sl(p-k._offset,y+b);t.layers.baxis.attr("transform",P),t.layers.bgrid.attr("transform",P);var R=Sl(p+m/2,y)+"rotate(30)"+Sl(0,-_._offset);t.layers.aaxis.attr("transform",R),t.layers.agrid.attr("transform",R);var N=Sl(p+m/2,y)+"rotate(-30)"+Sl(0,-T._offset);t.layers.caxis.attr("transform",N),t.layers.cgrid.attr("transform",N),t.drawAxes(!0),t.layers.aline.select("path").attr("d",_.showline?"M"+p+","+(y+b)+"l"+m/2+",-"+b:"M0,0").call(Bf.stroke,_.linecolor||"#000").style("stroke-width",(_.linewidth||0)+"px"),t.layers.bline.select("path").attr("d",k.showline?"M"+p+","+(y+b)+"h"+m:"M0,0").call(Bf.stroke,k.linecolor||"#000").style("stroke-width",(k.linewidth||0)+"px"),t.layers.cline.select("path").attr("d",T.showline?"M"+(p+m/2)+","+y+"l"+m/2+","+b:"M0,0").call(Bf.stroke,T.linecolor||"#000").style("stroke-width",(T.linewidth||0)+"px"),t.graphDiv._context.staticPlot||t.initInteractions(),N3.setClipUrl(t.layers.frontplot,t._hasClipOnAxisFalse?null:t.clipId,t.graphDiv)};ql.drawAxes=function(e){var r=this,t=r.graphDiv,a=r.id.slice(7)+"title",n=r.layers,i=r.aaxis,o=r.baxis,l=r.caxis;if(r.drawAx(i),r.drawAx(o),r.drawAx(l),e){var s=Math.max(i.showticklabels?i.tickfont.size/2:0,(l.showticklabels?l.tickfont.size*.75:0)+(l.ticks==="outside"?l.ticklen*.87:0)),u=(o.showticklabels?o.tickfont.size:0)+(o.ticks==="outside"?o.ticklen:0)+3;n["a-title"]=MA.draw(t,"a"+a,{propContainer:i,propName:r.id+".aaxis.title.text",placeholder:z3(t,"Click to enter Component A title"),attributes:{x:r.x0+r.w/2,y:r.y0-i.title.font.size/3-s,"text-anchor":"middle"}}),n["b-title"]=MA.draw(t,"b"+a,{propContainer:o,propName:r.id+".baxis.title.text",placeholder:z3(t,"Click to enter Component B title"),attributes:{x:r.x0-u,y:r.y0+r.h+o.title.font.size*.83+u,"text-anchor":"middle"}}),n["c-title"]=MA.draw(t,"c"+a,{propContainer:l,propName:r.id+".caxis.title.text",placeholder:z3(t,"Click to enter Component C title"),attributes:{x:r.x0+r.w+u,y:r.y0+r.h+l.title.font.size*.83+u,"text-anchor":"middle"}})}};ql.drawAx=function(e){var r=this,t=r.graphDiv,a=e._name,n=a.charAt(0),i=e._id,o=r.layers[a],l=30,s=n+"tickLayout",u=JRe(e);r[s]!==u&&(o.selectAll("."+i+"tick").remove(),r[s]=u),e.setScale();var f=iu.calcTicks(e),c=iu.clipEnds(e,f),v=iu.makeTransTickFn(e),d=iu.getTickSigns(e)[2],p=ls.deg2rad(l),y=d*(e.linewidth||1)/2,m=d*e.ticklen,b=r.w,A=r.h,w=n==="b"?"M0,"+y+"l"+Math.sin(p)*m+","+Math.cos(p)*m:"M"+y+",0l"+Math.cos(p)*m+","+-Math.sin(p)*m,x={a:"M0,0l"+A+",-"+b/2,b:"M0,0l-"+b/2+",-"+A,c:"M0,0l-"+A+","+b/2}[n];iu.drawTicks(t,e,{vals:e.ticks==="inside"?c:f,layer:o,path:w,transFn:v,crisp:!1}),iu.drawGrid(t,e,{vals:c,layer:r.layers[n+"grid"],path:x,transFn:v,crisp:!1}),iu.drawLabels(t,e,{vals:f,layer:o,transFn:v,labelFns:iu.makeLabelFns(e,0,l)})};function JRe(e){return e.ticks+String(e.ticklen)+String(e.showticklabels)}var Ya=oee.MINZOOM/2+.87,KRe="m-0.87,.5h"+Ya+"v3h-"+(Ya+5.2)+"l"+(Ya/2+2.6)+",-"+(Ya*.87+4.5)+"l2.6,1.5l-"+Ya/2+","+Ya*.87+"Z",QRe="m0.87,.5h-"+Ya+"v3h"+(Ya+5.2)+"l-"+(Ya/2+2.6)+",-"+(Ya*.87+4.5)+"l-2.6,1.5l"+Ya/2+","+Ya*.87+"Z",eFe="m0,1l"+Ya/2+","+Ya*.87+"l2.6,-1.5l-"+(Ya/2+2.6)+",-"+(Ya*.87+4.5)+"l-"+(Ya/2+2.6)+","+(Ya*.87+4.5)+"l2.6,1.5l"+Ya/2+",-"+Ya*.87+"Z",rFe="m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z",tee=!0;ql.clearOutline=function(){$Re(this.dragOptions),ZRe(this.dragOptions.gd)};ql.initInteractions=function(){var e=this,r=e.layers.plotbg.select("path").node(),t=e.graphDiv,a=t._fullLayout._zoomlayer,n,i;this.dragOptions={element:r,gd:t,plotinfo:{id:e.id,domain:t._fullLayout[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis},subplot:e.id,prepFn:function(P,R,N){e.dragOptions.xaxes=[e.xaxis],e.dragOptions.yaxes=[e.yaxis],n=t._fullLayout._invScaleX,i=t._fullLayout._invScaleY;var I=e.dragOptions.dragmode=t._fullLayout.dragmode;ree(I)?e.dragOptions.minDrag=1:e.dragOptions.minDrag=void 0,I==="zoom"?(e.dragOptions.moveFn=k,e.dragOptions.clickFn=b,e.dragOptions.doneFn=T,A(P,R,N)):I==="pan"?(e.dragOptions.moveFn=C,e.dragOptions.clickFn=b,e.dragOptions.doneFn=E,q(),e.clearOutline(t)):(jRe(I)||ree(I))&&WRe(P,R,N,e.dragOptions,I)}};var o,l,s,u,f,c,v,d,p,y;function m(P){var R={};return R[e.id+".aaxis.min"]=P.a,R[e.id+".baxis.min"]=P.b,R[e.id+".caxis.min"]=P.c,R}function b(P,R){var N=t._fullLayout.clickmode;aee(t),P===2&&(t.emit("plotly_doubleclick",null),AA.call("_guiRelayout",t,m({a:0,b:0,c:0}))),N.indexOf("select")>-1&&P===1&&XRe(R,t,[e.xaxis],[e.yaxis],e.id,e.dragOptions),N.indexOf("event")>-1&&eee.click(t,R,e.id)}function A(P,R,N){var I=r.getBoundingClientRect();o=R-I.left,l=N-I.top,t._fullLayout._calcInverseTransform(t);var O=t._fullLayout._invTransform,U=ls.apply3DTransform(O)(o,l);o=U[0],l=U[1],s={a:e.aaxis.range[0],b:e.baxis.range[1],c:e.caxis.range[1]},f=s,u=e.aaxis.range[1]-s.a,c=Bf.luminosity(e.graphDiv._fullLayout[e.id].bgcolor),v="M0,"+e.h+"L"+e.w/2+", 0L"+e.w+","+e.h+"Z",d=!1,p=a.append("path").attr("class","zoombox").attr("transform",Sl(e.x0,e.y0)).style({fill:c>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",v),y=a.append("path").attr("class","zoombox-corners").attr("transform",Sl(e.x0,e.y0)).style({fill:Bf.background,stroke:Bf.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),e.clearOutline(t)}function w(P,R){return 1-R/e.h}function x(P,R){return 1-(P+(e.h-R)/Math.sqrt(3))/e.w}function _(P,R){return(P-(e.h-R)/Math.sqrt(3))/e.w}function k(P,R){var N=o+P*n,I=l+R*i,O=Math.max(0,Math.min(1,w(o,l),w(N,I))),U=Math.max(0,Math.min(1,x(o,l),x(N,I))),Y=Math.max(0,Math.min(1,_(o,l),_(N,I))),G=(O/2+Y)*e.w,V=(1-O/2-U)*e.w,W=(G+V)/2,j=V-G,J=(1-O)*e.h,te=J-j/nv;j.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),y.transition().style("opacity",1).duration(200),d=!0),t.emit("plotly_relayouting",m(f))}function T(){aee(t),f!==s&&(AA.call("_guiRelayout",t,m(f)),tee&&t.data&&t._context.showTips&&(ls.notifier(z3(t,"Double-click to zoom back out"),"long",t),tee=!1))}function q(){s={a:e.aaxis.range[0],b:e.baxis.range[1],c:e.caxis.range[1]},f=s}function C(P,R){var N=P/e.xaxis._m,I=R/e.yaxis._m;f={a:s.a-I,b:s.b+(N+I)/2,c:s.c-(N-I)/2};var O=[f.a,f.b,f.c].sort(ls.sorterAsc),U={a:O.indexOf(f.a),b:O.indexOf(f.b),c:O.indexOf(f.c)};O[0]<0&&(O[1]+O[0]/2<0?(O[2]+=O[0]+O[1],O[0]=O[1]=0):(O[2]+=O[0]/2,O[1]+=O[0]/2,O[0]=0),f={a:O[U.a],b:O[U.b],c:O[U.c]},R=(s.a-f.a)*e.yaxis._m,P=(s.c-f.c-s.b+f.b)*e.xaxis._m);var Y=Sl(e.x0+P,e.y0+R);e.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",Y);var G=Sl(-P,-R);e.clipDefRelative.select("path").attr("transform",G),e.aaxis.range=[f.a,e.sum-f.b-f.c],e.baxis.range=[e.sum-f.a-f.c,f.b],e.caxis.range=[e.sum-f.a-f.b,f.c],e.drawAxes(!1),e._hasClipOnAxisFalse&&e.plotContainer.select(".scatterlayer").selectAll(".trace").call(N3.hideOutsideRangePoints,e),t.emit("plotly_relayouting",m(f))}function E(){AA.call("_guiRelayout",t,m(f))}r.onmousemove=function(P){eee.hover(t,P,e.id),t._fullLayout._lasthover=r,t._fullLayout._hoversubplot=e.id},r.onmouseout=function(P){t._dragging||QQ.unhover(t,P)},QQ.init(this.dragOptions)};function aee(e){nee.select(e).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}});var qA=z((Cer,fee)=>{"use strict";var tFe=Ii(),aFe=H0().attributes,st=Gi(),nFe=qo().overrideAll,kA=Mt().extendFlat,SA={title:{text:st.title.text,font:st.title.font},color:st.color,tickmode:st.minor.tickmode,nticks:kA({},st.nticks,{dflt:6,min:1}),tick0:st.tick0,dtick:st.dtick,tickvals:st.tickvals,ticktext:st.ticktext,ticks:st.ticks,ticklen:st.ticklen,tickwidth:st.tickwidth,tickcolor:st.tickcolor,ticklabelstep:st.ticklabelstep,showticklabels:st.showticklabels,labelalias:st.labelalias,showtickprefix:st.showtickprefix,tickprefix:st.tickprefix,showticksuffix:st.showticksuffix,ticksuffix:st.ticksuffix,showexponent:st.showexponent,exponentformat:st.exponentformat,minexponent:st.minexponent,separatethousands:st.separatethousands,tickfont:st.tickfont,tickangle:st.tickangle,tickformat:st.tickformat,tickformatstops:st.tickformatstops,hoverformat:st.hoverformat,showline:kA({},st.showline,{dflt:!0}),linecolor:st.linecolor,linewidth:st.linewidth,showgrid:kA({},st.showgrid,{dflt:!0}),gridcolor:st.gridcolor,gridwidth:st.gridwidth,griddash:st.griddash,layer:st.layer,min:{valType:"number",dflt:0,min:0}},I3=fee.exports=nFe({domain:aFe({name:"ternary"}),bgcolor:{valType:"color",dflt:tFe.background},sum:{valType:"number",dflt:1,min:0},aaxis:SA,baxis:SA,caxis:SA},"plot","from-root");I3.uirevision={valType:"any",editType:"none"};I3.aaxis.uirevision=I3.baxis.uirevision=I3.caxis.uirevision={valType:"any",editType:"none"}});var vee=z((Der,cee)=>{"use strict";var iFe=ke(),oFe=Ct(),lFe=H0().defaults;cee.exports=function(r,t,a,n){var i=n.type,o=n.attributes,l=n.handleDefaults,s=n.partition||"x",u=t._subplots[i],f=u.length,c=f&&u[0].replace(/\d+$/,""),v,d;function p(A,w){return iFe.coerce(v,d,o,A,w)}for(var y=0;y{"use strict";var sFe=qr(),uFe=Ct(),B3=ke(),fFe=vee(),cFe=lm(),vFe=sm(),hFe=im(),dFe=nm(),pFe=u8(),dee=qA(),hee=["aaxis","baxis","caxis"];pee.exports=function(r,t,a){fFe(r,t,a,{type:"ternary",attributes:dee,handleDefaults:mFe,font:t.font,paper_bgcolor:t.paper_bgcolor})};function mFe(e,r,t,a){var n=t("bgcolor"),i=t("sum");a.bgColor=sFe.combine(n,a.paper_bgcolor);for(var o,l,s,u=0;u=i&&(f.min=0,c.min=0,v.min=0,e.aaxis&&delete e.aaxis.min,e.baxis&&delete e.baxis.min,e.caxis&&delete e.caxis.min)}function yFe(e,r,t,a){var n=dee[r._name];function i(d,p){return B3.coerce(e,r,n,d,p)}i("uirevision",a.uirevision),r.type="linear";var o=i("color"),l=o!==n.color.dflt?o:t.font.color,s=r._name,u=s.charAt(0).toUpperCase(),f="Component "+u,c=i("title.text",f);r._hovertitle=c===f?c:u,B3.coerceFont(i,"title.font",t.font,{overrideDflt:{size:B3.bigFont(t.font.size),color:l}}),i("min"),dFe(e,r,i,"linear"),vFe(e,r,i,"linear"),cFe(e,r,i,"linear",{noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0}),hFe(e,r,i,{outerTicks:!0});var v=i("showticklabels");v&&(B3.coerceFont(i,"tickfont",t.font,{overrideDflt:{color:l}}),i("tickangle"),i("tickformat")),pFe(e,r,i,{dfltColor:o,bgColor:t.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:n}),i("hoverformat"),i("layer")}});var yee=z(ho=>{"use strict";var gFe=uee(),bFe=Jp().getSubplotCalcData,xFe=ke().counterRegex,iv="ternary";ho.name=iv;var _Fe=ho.attr="subplot";ho.idRoot=iv;ho.idRegex=ho.attrRegex=xFe(iv);var wFe=ho.attributes={};wFe[_Fe]={valType:"subplotid",dflt:"ternary",editType:"calc"};ho.layoutAttributes=qA();ho.supplyLayoutDefaults=mee();ho.plot=function(r){for(var t=r._fullLayout,a=r.calcdata,n=t._subplots[iv],i=0;i{"use strict";gee.exports={attributes:xA(),supplyDefaults:OQ(),colorbar:Ud(),formatLabels:UQ(),calc:jQ(),plot:XQ(),style:Af().style,styleOnSelect:Af().styleOnSelect,hoverPoints:$Q(),selectPoints:l8(),eventData:KQ(),moduleType:"trace",name:"scatterternary",basePlotModule:yee(),categories:["ternary","symbols","showLegend","scatter-like"],meta:{}}});var _ee=z((Fer,xee)=>{"use strict";xee.exports=bee()});var LA=z((zer,Aee)=>{"use strict";var ka=i3(),ov=Mt().extendFlat,wee=Eo().axisHoverFormat;Aee.exports={y:ka.y,x:ka.x,x0:ka.x0,y0:ka.y0,xhoverformat:wee("x"),yhoverformat:wee("y"),name:ov({},ka.name,{}),orientation:ov({},ka.orientation,{}),bandwidth:{valType:"number",min:0,editType:"calc"},scalegroup:{valType:"string",dflt:"",editType:"calc"},scalemode:{valType:"enumerated",values:["width","count"],dflt:"width",editType:"calc"},spanmode:{valType:"enumerated",values:["soft","hard","manual"],dflt:"soft",editType:"calc"},span:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:ka.fillcolor,points:ov({},ka.boxpoints,{}),jitter:ov({},ka.jitter,{}),pointpos:ov({},ka.pointpos,{}),width:ov({},ka.width,{}),marker:ka.marker,text:ka.text,hovertext:ka.hovertext,hovertemplate:ka.hovertemplate,hovertemplatefallback:ka.hovertemplatefallback,quartilemethod:ka.quartilemethod,box:{visible:{valType:"boolean",dflt:!1,editType:"plot"},width:{valType:"number",min:0,max:1,dflt:.25,editType:"plot"},fillcolor:{valType:"color",editType:"style"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"plot"},meanline:{visible:{valType:"boolean",dflt:!1,editType:"plot"},color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"plot"},side:{valType:"enumerated",values:["both","positive","negative"],dflt:"both",editType:"calc"},offsetgroup:ka.offsetgroup,alignmentgroup:ka.alignmentgroup,selected:ka.selected,unselected:ka.unselected,hoveron:{valType:"flaglist",flags:["violins","points","kde"],dflt:"violins+points+kde",extras:["all"],editType:"style"},zorder:ka.zorder}});var EA=z((Ner,Tee)=>{"use strict";var CA=o3(),DA=ke().extendFlat;Tee.exports={violinmode:DA({},CA.boxmode,{}),violingap:DA({},CA.boxgap,{}),violingroupgap:DA({},CA.boxgroupgap,{})}});var Lee=z((Ier,qee)=>{"use strict";var Mee=ke(),AFe=qr(),kee=s2(),See=LA();qee.exports=function(r,t,a,n){function i(_,k){return Mee.coerce(r,t,See,_,k)}function o(_,k){return Mee.coerce2(r,t,See,_,k)}if(kee.handleSampleDefaults(r,t,i,n),t.visible!==!1){i("bandwidth"),i("side");var l=i("width");l||(i("scalegroup",t.name),i("scalemode"));var s=i("span"),u;Array.isArray(s)&&(u="manual"),i("spanmode",u);var f=i("line.color",(r.marker||{}).color||a),c=i("line.width"),v=i("fillcolor",AFe.addOpacity(t.line.color,.5));kee.handlePointsDefaults(r,t,i,{prefix:""});var d=o("box.width"),p=o("box.fillcolor",v),y=o("box.line.color",f),m=o("box.line.width",c),b=i("box.visible",!!(d||p||y||m));b||(t.box={visible:!1});var A=o("meanline.color",f),w=o("meanline.width",c),x=i("meanline.visible",!!(A||w));x||(t.meanline={visible:!1}),i("quartilemethod"),i("zorder")}}});var Dee=z((Ber,Cee)=>{"use strict";var TFe=ke(),MFe=EA(),kFe=x9();Cee.exports=function(r,t,a){function n(i,o){return TFe.coerce(r,t,MFe,i,o)}kFe._supply(r,t,a,n,"violin")}});var O3=z(Of=>{"use strict";var SFe=ke(),qFe={gaussian:function(e){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*e*e)}};Of.makeKDE=function(e,r,t){var a=t.length,n=qFe.gaussian,i=e.bandwidth,o=1/(a*i);return function(l){for(var s=0,u=0;u{"use strict";var PA=ke(),RA=Yr(),LFe=A9(),Eee=O3(),CFe=(jt(),ze(Zt)).BADNUM;Pee.exports=function(r,t){var a=LFe(r,t);if(a[0].t.empty)return a;for(var n=r._fullLayout,i=RA.getFromId(r,t[t.orientation==="h"?"xaxis":"yaxis"]),o=1/0,l=-1/0,s=0,u=0,f=0;f{"use strict";var RFe=T9().setPositionOffset,Fee=["v","h"];zee.exports=function(r,t){for(var a=r.calcdata,n=t.xaxis,i=t.yaxis,o=0;o{"use strict";var FA=Pr(),zA=ke(),FFe=Jr(),NA=M9(),zFe=Qw(),NFe=O3();Iee.exports=function(r,t,a,n){var i=r._context.staticPlot,o=r._fullLayout,l=t.xaxis,s=t.yaxis;function u(f,c){var v=zFe(f,{xaxis:l,yaxis:s,trace:c,connectGaps:!0,baseTolerance:.75,shape:"spline",simplify:!0,linearized:!0});return FFe.smoothopen(v[0],1)}zA.makeTraceGroups(n,a,"trace violins").each(function(f){var c=FA.select(this),v=f[0],d=v.t,p=v.trace;if(p.visible!==!0||d.empty){c.remove();return}var y=d.bPos,m=d.bdPos,b=t[d.valLetter+"axis"],A=t[d.posLetter+"axis"],w=p.side==="both",x=w||p.side==="positive",_=w||p.side==="negative",k=c.selectAll("path.violin").data(zA.identity);k.enter().append("path").style("vector-effect",i?"none":"non-scaling-stroke").attr("class","violin"),k.exit().remove(),k.each(function(I){var O=FA.select(this),U=I.density,Y=U.length,G=A.c2l(I.pos+y,!0),V=A.l2p(G),W;if(p.width)W=d.maxKDE/m;else{var j=o._violinScaleGroupStats[p.scalegroup];W=p.scalemode==="count"?j.maxKDE/m*(j.maxCount/I.pts.length):j.maxKDE/m}var J,te,ae,se,$,fe,ie;if(x){for(fe=new Array(Y),se=0;se{"use strict";var Oee=Pr(),lv=qr(),IFe=Af().stylePoints;Hee.exports=function(r){var t=Oee.select(r).selectAll("g.trace.violins");t.style("opacity",function(a){return a[0].trace.opacity}),t.each(function(a){var n=a[0].trace,i=Oee.select(this),o=n.box||{},l=o.line||{},s=n.meanline||{},u=s.width;i.selectAll("path.violin").style("stroke-width",n.line.width+"px").call(lv.stroke,n.line.color).call(lv.fill,n.fillcolor),i.selectAll("path.box").style("stroke-width",l.width+"px").call(lv.stroke,l.color).call(lv.fill,o.fillcolor);var f={"stroke-width":u+"px","stroke-dasharray":2*u+"px,"+u+"px"};i.selectAll("path.mean").style(f).call(lv.stroke,s.color),i.selectAll("path.meanline").style(f).call(lv.stroke,s.color),IFe(i,n,r)})}});var jee=z((Ver,Vee)=>{"use strict";var BFe=qr(),IA=ke(),OFe=Yr(),Gee=D9(),Yee=O3();Vee.exports=function(r,t,a,n,i){i||(i={});var o=i.hoverLayer,l=r.cd,s=l[0].trace,u=s.hoveron,f=u.indexOf("violins")!==-1,c=u.indexOf("kde")!==-1,v=[],d,p;if(f||c){var y=Gee.hoverOnBoxes(r,t,a,n);if(c&&y.length>0){var m=r.xa,b=r.ya,A,w,x,_,k;s.orientation==="h"?(k=t,A="y",x=b,w="x",_=m):(k=a,A="x",x=m,w="y",_=b);var T=l[r.index];if(k>=T.span[0]&&k<=T.span[1]){var q=IA.extendFlat({},r),C=_.c2p(k,!0),E=Yee.getKdeValue(T,s,k),P=Yee.getPositionOnKdePath(T,s,C),R=x._offset,N=x._length;q[A+"0"]=P[0],q[A+"1"]=P[1],q[w+"0"]=q[w+"1"]=C,q[w+"Label"]=w+": "+OFe.hoverLabelText(_,k,s[w+"hoverformat"])+", "+l[0].t.labels.kde+" "+E.toFixed(3);for(var I=0,O=0;O{"use strict";Wee.exports={attributes:LA(),layoutAttributes:EA(),supplyDefaults:Lee(),crossTraceDefaults:s2().crossTraceDefaults,supplyLayoutDefaults:Dee(),calc:Ree(),crossTraceCalc:Nee(),plot:Bee(),style:Uee(),styleOnSelect:Af().styleOnSelect,hoverPoints:jee(),selectPoints:E9(),moduleType:"trace",name:"violin",basePlotModule:io(),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","violinLayout","zoomScale"],meta:{}}});var $ee=z((Wer,Zee)=>{"use strict";Zee.exports=Xee()});var _2={};qt(_2,{colormodel:()=>BA});var BA,sv=St(()=>{"use strict";BA={rgb:{min:[0,0,0],max:[255,255,255],fmt:e=>e.slice(0,3),suffix:["","",""]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:e=>e.slice(0,4),suffix:["","","",""]},rgba256:{colormodel:"rgba",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:e=>e.slice(0,4),suffix:["","","",""]},hsl:{min:[0,0,0],max:[360,100,100],fmt:e=>{let r=e.slice(0,3);return r[1]=r[1]+"%",r[2]=r[2]+"%",r},suffix:["\xB0","%","%"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:e=>{let r=e.slice(0,4);return r[1]=r[1]+"%",r[2]=r[2]+"%",r},suffix:["\xB0","%","%",""]}}});var OA={};qt(OA,{default:()=>UFe});var Jee,Kee,H3,Qee,ere,rre,tre,HFe,UFe,HA=St(()=>{"use strict";Jee=xc(Mt()),Kee=xc(On()),H3=xc(di()),Qee=xc(Ji());sv();ere=["rgb","rgba","rgba256","hsl","hsla"],rre=[],tre=[];for(let e of ere){let r=BA[e];rre.push(`For the \`${e}\` colormodel, it is [${(r.zminDflt||r.min).join(", ")}].`),tre.push(`For the \`${e}\` colormodel, it is [${(r.zmaxDflt||r.max).join(", ")}].`)}HFe={source:{valType:"string",editType:"calc",description:["Specifies the data URI of the image to be visualized.",'The URI consists of "data:image/[][;base64\\\\],"'].join(" ")},z:{valType:"data_array",editType:"calc",description:["A 2-dimensional array in which each element is an array of 3 or 4 numbers representing a color."].join(" ")},colormodel:{valType:"enumerated",values:ere,editType:"calc",description:["Color model used to map the numerical color components described in `z` into colors.","If `source` is specified, this attribute will be set to `rgba256`","otherwise it defaults to `rgb`."].join(" ")},zsmooth:{valType:"enumerated",values:["fast",!1],dflt:!1,editType:"plot",description:["Picks a smoothing algorithm used to smooth `z` data.","This only applies for image traces that use the `source` attribute."].join(" ")},zmin:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc",description:["Array defining the lower bound for each color component.","Note that the default value will depend on the colormodel.",rre.join(" ")].join(" ")},zmax:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc",description:["Array defining the higher bound for each color component.","Note that the default value will depend on the colormodel.",tre.join(" ")].join(" ")},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",description:["Set the image's x position. The left edge of the image","(or the right edge if the x axis is reversed or dx is negative)","will be found at xmin=x0-dx/2"].join(" ")},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",description:["Set the image's y position. The top edge of the image","(or the bottom edge if the y axis is NOT reversed or if dy is negative)","will be found at ymin=y0-dy/2. By default when an image trace is","included, the y axis will be reversed so that the image is right-side-up,","but you can disable this by setting yaxis.autorange=true or by providing","an explicit y axis range."].join(" ")},dx:{valType:"number",dflt:1,editType:"calc",description:"Set the pixel's horizontal size."},dy:{valType:"number",dflt:1,editType:"calc",description:"Set the pixel's vertical size"},text:{valType:"data_array",editType:"plot",description:"Sets the text elements associated with each z value."},hovertext:{valType:"data_array",editType:"plot",description:"Same as `text`."},hoverinfo:(0,Jee.extendFlat)({},Kee.default.hoverinfo,{flags:["x","y","z","color","name","text"],dflt:"x+y+z+text+name"}),hovertemplate:(0,H3.hovertemplateAttrs)({},{keys:["z","color","colormodel"]}),hovertemplatefallback:(0,H3.templatefallbackAttrs)(),zorder:Qee.zorder},UFe=HFe});var ire=z((Zer,nre)=>{"use strict";var GFe=ke(),YFe=(HA(),ze(OA)).default,are=(sv(),ze(_2)),VFe=Kl().IMAGE_URL_PREFIX;nre.exports=function(r,t){function a(o,l){return GFe.coerce(r,t,YFe,o,l)}a("source"),t.source&&!t.source.match(VFe)&&delete t.source,t._hasSource=!!t.source;var n=a("z");if(t._hasZ=!(n===void 0||!n.length||!n[0]||!n[0].length),!t._hasZ&&!t._hasSource){t.visible=!1;return}a("x0"),a("y0"),a("dx"),a("dy");var i;t._hasZ?(a("colormodel","rgb"),i=are.colormodel[t.colormodel],a("zmin",i.zminDflt||i.min),a("zmax",i.zmaxDflt||i.max)):t._hasSource&&(t.colormodel="rgba256",i=are.colormodel[t.colormodel],t.zmin=i.zminDflt,t.zmax=i.zmaxDflt),a("zsmooth"),a("text"),a("hovertext"),a("hovertemplate"),a("hovertemplatefallback"),t._length=null,a("zorder")}});var ss=z(($er,UA)=>{typeof Object.create=="function"?UA.exports=function(r,t){t&&(r.super_=t,r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}))}:UA.exports=function(r,t){if(t){r.super_=t;var a=function(){};a.prototype=t.prototype,r.prototype=new a,r.prototype.constructor=r}}});var GA=z((Jer,ore)=>{ore.exports=Wu().EventEmitter});var ure=z(U3=>{"use strict";U3.byteLength=WFe;U3.toByteArray=ZFe;U3.fromByteArray=KFe;var Ll=[],po=[],jFe=typeof Uint8Array!="undefined"?Uint8Array:Array,YA="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(Hf=0,lre=YA.length;Hf0)throw new Error("Invalid string. Length must be a multiple of 4");var t=e.indexOf("=");t===-1&&(t=r);var a=t===r?0:4-t%4;return[t,a]}function WFe(e){var r=sre(e),t=r[0],a=r[1];return(t+a)*3/4-a}function XFe(e,r,t){return(r+t)*3/4-t}function ZFe(e){var r,t=sre(e),a=t[0],n=t[1],i=new jFe(XFe(e,a,n)),o=0,l=n>0?a-4:a,s;for(s=0;s>16&255,i[o++]=r>>8&255,i[o++]=r&255;return n===2&&(r=po[e.charCodeAt(s)]<<2|po[e.charCodeAt(s+1)]>>4,i[o++]=r&255),n===1&&(r=po[e.charCodeAt(s)]<<10|po[e.charCodeAt(s+1)]<<4|po[e.charCodeAt(s+2)]>>2,i[o++]=r>>8&255,i[o++]=r&255),i}function $Fe(e){return Ll[e>>18&63]+Ll[e>>12&63]+Ll[e>>6&63]+Ll[e&63]}function JFe(e,r,t){for(var a,n=[],i=r;il?l:o+i));return a===1?(r=e[t-1],n.push(Ll[r>>2]+Ll[r<<4&63]+"==")):a===2&&(r=(e[t-2]<<8)+e[t-1],n.push(Ll[r>>10]+Ll[r>>4&63]+Ll[r<<2&63]+"=")),n.join("")}});var fre=z(VA=>{VA.read=function(e,r,t,a,n){var i,o,l=n*8-a-1,s=(1<>1,f=-7,c=t?n-1:0,v=t?-1:1,d=e[r+c];for(c+=v,i=d&(1<<-f)-1,d>>=-f,f+=l;f>0;i=i*256+e[r+c],c+=v,f-=8);for(o=i&(1<<-f)-1,i>>=-f,f+=a;f>0;o=o*256+e[r+c],c+=v,f-=8);if(i===0)i=1-u;else{if(i===s)return o?NaN:(d?-1:1)*(1/0);o=o+Math.pow(2,a),i=i-u}return(d?-1:1)*o*Math.pow(2,i-a)};VA.write=function(e,r,t,a,n,i){var o,l,s,u=i*8-n-1,f=(1<>1,v=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=a?0:i-1,p=a?1:-1,y=r<0||r===0&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(l=isNaN(r)?1:0,o=f):(o=Math.floor(Math.log(r)/Math.LN2),r*(s=Math.pow(2,-o))<1&&(o--,s*=2),o+c>=1?r+=v/s:r+=v*Math.pow(2,1-c),r*s>=2&&(o++,s/=2),o+c>=f?(l=0,o=f):o+c>=1?(l=(r*s-1)*Math.pow(2,n),o=o+c):(l=r*Math.pow(2,c-1)*Math.pow(2,n),o=0));n>=8;e[t+d]=l&255,d+=p,l/=256,n-=8);for(o=o<0;e[t+d]=o&255,d+=p,o/=256,u-=8);e[t+d-p]|=y*128}});var hv=z(vv=>{"use strict";var jA=ure(),fv=fre(),cre=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;vv.Buffer=je;vv.SlowBuffer=nze;vv.INSPECT_MAX_BYTES=50;var G3=2147483647;vv.kMaxLength=G3;je.TYPED_ARRAY_SUPPORT=QFe();!je.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function QFe(){try{let e=new Uint8Array(1),r={foo:function(){return 42}};return Object.setPrototypeOf(r,Uint8Array.prototype),Object.setPrototypeOf(e,r),e.foo()===42}catch(e){return!1}}Object.defineProperty(je.prototype,"parent",{enumerable:!0,get:function(){if(je.isBuffer(this))return this.buffer}});Object.defineProperty(je.prototype,"offset",{enumerable:!0,get:function(){if(je.isBuffer(this))return this.byteOffset}});function us(e){if(e>G3)throw new RangeError('The value "'+e+'" is invalid for option "size"');let r=new Uint8Array(e);return Object.setPrototypeOf(r,je.prototype),r}function je(e,r,t){if(typeof e=="number"){if(typeof r=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return $A(e)}return pre(e,r,t)}je.poolSize=8192;function pre(e,r,t){if(typeof e=="string")return rze(e,r);if(ArrayBuffer.isView(e))return tze(e);if(e==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Cl(e,ArrayBuffer)||e&&Cl(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(Cl(e,SharedArrayBuffer)||e&&Cl(e.buffer,SharedArrayBuffer)))return XA(e,r,t);if(typeof e=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let a=e.valueOf&&e.valueOf();if(a!=null&&a!==e)return je.from(a,r,t);let n=aze(e);if(n)return n;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]=="function")return je.from(e[Symbol.toPrimitive]("string"),r,t);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}je.from=function(e,r,t){return pre(e,r,t)};Object.setPrototypeOf(je.prototype,Uint8Array.prototype);Object.setPrototypeOf(je,Uint8Array);function mre(e){if(typeof e!="number")throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function eze(e,r,t){return mre(e),e<=0?us(e):r!==void 0?typeof t=="string"?us(e).fill(r,t):us(e).fill(r):us(e)}je.alloc=function(e,r,t){return eze(e,r,t)};function $A(e){return mre(e),us(e<0?0:JA(e)|0)}je.allocUnsafe=function(e){return $A(e)};je.allocUnsafeSlow=function(e){return $A(e)};function rze(e,r){if((typeof r!="string"||r==="")&&(r="utf8"),!je.isEncoding(r))throw new TypeError("Unknown encoding: "+r);let t=yre(e,r)|0,a=us(t),n=a.write(e,r);return n!==t&&(a=a.slice(0,n)),a}function WA(e){let r=e.length<0?0:JA(e.length)|0,t=us(r);for(let a=0;a=G3)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+G3.toString(16)+" bytes");return e|0}function nze(e){return+e!=e&&(e=0),je.alloc(+e)}je.isBuffer=function(r){return r!=null&&r._isBuffer===!0&&r!==je.prototype};je.compare=function(r,t){if(Cl(r,Uint8Array)&&(r=je.from(r,r.offset,r.byteLength)),Cl(t,Uint8Array)&&(t=je.from(t,t.offset,t.byteLength)),!je.isBuffer(r)||!je.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(r===t)return 0;let a=r.length,n=t.length;for(let i=0,o=Math.min(a,n);in.length?(je.isBuffer(o)||(o=je.from(o)),o.copy(n,i)):Uint8Array.prototype.set.call(n,o,i);else if(je.isBuffer(o))o.copy(n,i);else throw new TypeError('"list" argument must be an Array of Buffers');i+=o.length}return n};function yre(e,r){if(je.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Cl(e,ArrayBuffer))return e.byteLength;if(typeof e!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let t=e.length,a=arguments.length>2&&arguments[2]===!0;if(!a&&t===0)return 0;let n=!1;for(;;)switch(r){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":return ZA(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return t*2;case"hex":return t>>>1;case"base64":return kre(e).length;default:if(n)return a?-1:ZA(e).length;r=(""+r).toLowerCase(),n=!0}}je.byteLength=yre;function ize(e,r,t){let a=!1;if((r===void 0||r<0)&&(r=0),r>this.length||((t===void 0||t>this.length)&&(t=this.length),t<=0)||(t>>>=0,r>>>=0,t<=r))return"";for(e||(e="utf8");;)switch(e){case"hex":return pze(this,r,t);case"utf8":case"utf-8":return bre(this,r,t);case"ascii":return hze(this,r,t);case"latin1":case"binary":return dze(this,r,t);case"base64":return cze(this,r,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return mze(this,r,t);default:if(a)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),a=!0}}je.prototype._isBuffer=!0;function Uf(e,r,t){let a=e[r];e[r]=e[t],e[t]=a}je.prototype.swap16=function(){let r=this.length;if(r%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tt&&(r+=" ... "),""};cre&&(je.prototype[cre]=je.prototype.inspect);je.prototype.compare=function(r,t,a,n,i){if(Cl(r,Uint8Array)&&(r=je.from(r,r.offset,r.byteLength)),!je.isBuffer(r))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof r);if(t===void 0&&(t=0),a===void 0&&(a=r?r.length:0),n===void 0&&(n=0),i===void 0&&(i=this.length),t<0||a>r.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=a)return 0;if(n>=i)return-1;if(t>=a)return 1;if(t>>>=0,a>>>=0,n>>>=0,i>>>=0,this===r)return 0;let o=i-n,l=a-t,s=Math.min(o,l),u=this.slice(n,i),f=r.slice(t,a);for(let c=0;c2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,QA(t)&&(t=n?0:e.length-1),t<0&&(t=e.length+t),t>=e.length){if(n)return-1;t=e.length-1}else if(t<0)if(n)t=0;else return-1;if(typeof r=="string"&&(r=je.from(r,a)),je.isBuffer(r))return r.length===0?-1:vre(e,r,t,a,n);if(typeof r=="number")return r=r&255,typeof Uint8Array.prototype.indexOf=="function"?n?Uint8Array.prototype.indexOf.call(e,r,t):Uint8Array.prototype.lastIndexOf.call(e,r,t):vre(e,[r],t,a,n);throw new TypeError("val must be string, number or Buffer")}function vre(e,r,t,a,n){let i=1,o=e.length,l=r.length;if(a!==void 0&&(a=String(a).toLowerCase(),a==="ucs2"||a==="ucs-2"||a==="utf16le"||a==="utf-16le")){if(e.length<2||r.length<2)return-1;i=2,o/=2,l/=2,t/=2}function s(f,c){return i===1?f[c]:f.readUInt16BE(c*i)}let u;if(n){let f=-1;for(u=t;uo&&(t=o-l),u=t;u>=0;u--){let f=!0;for(let c=0;cn&&(a=n)):a=n;let i=r.length;a>i/2&&(a=i/2);let o;for(o=0;o>>0,isFinite(a)?(a=a>>>0,n===void 0&&(n="utf8")):(n=a,a=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let i=this.length-t;if((a===void 0||a>i)&&(a=i),r.length>0&&(a<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return oze(this,r,t,a);case"utf8":case"utf-8":return lze(this,r,t,a);case"ascii":case"latin1":case"binary":return sze(this,r,t,a);case"base64":return uze(this,r,t,a);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return fze(this,r,t,a);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}};je.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function cze(e,r,t){return r===0&&t===e.length?jA.fromByteArray(e):jA.fromByteArray(e.slice(r,t))}function bre(e,r,t){t=Math.min(e.length,t);let a=[],n=r;for(;n239?4:i>223?3:i>191?2:1;if(n+l<=t){let s,u,f,c;switch(l){case 1:i<128&&(o=i);break;case 2:s=e[n+1],(s&192)===128&&(c=(i&31)<<6|s&63,c>127&&(o=c));break;case 3:s=e[n+1],u=e[n+2],(s&192)===128&&(u&192)===128&&(c=(i&15)<<12|(s&63)<<6|u&63,c>2047&&(c<55296||c>57343)&&(o=c));break;case 4:s=e[n+1],u=e[n+2],f=e[n+3],(s&192)===128&&(u&192)===128&&(f&192)===128&&(c=(i&15)<<18|(s&63)<<12|(u&63)<<6|f&63,c>65535&&c<1114112&&(o=c))}}o===null?(o=65533,l=1):o>65535&&(o-=65536,a.push(o>>>10&1023|55296),o=56320|o&1023),a.push(o),n+=l}return vze(a)}var hre=4096;function vze(e){let r=e.length;if(r<=hre)return String.fromCharCode.apply(String,e);let t="",a=0;for(;aa)&&(t=a);let n="";for(let i=r;ia&&(r=a),t<0?(t+=a,t<0&&(t=0)):t>a&&(t=a),tt)throw new RangeError("Trying to access beyond buffer length")}je.prototype.readUintLE=je.prototype.readUIntLE=function(r,t,a){r=r>>>0,t=t>>>0,a||fn(r,t,this.length);let n=this[r],i=1,o=0;for(;++o>>0,t=t>>>0,a||fn(r,t,this.length);let n=this[r+--t],i=1;for(;t>0&&(i*=256);)n+=this[r+--t]*i;return n};je.prototype.readUint8=je.prototype.readUInt8=function(r,t){return r=r>>>0,t||fn(r,1,this.length),this[r]};je.prototype.readUint16LE=je.prototype.readUInt16LE=function(r,t){return r=r>>>0,t||fn(r,2,this.length),this[r]|this[r+1]<<8};je.prototype.readUint16BE=je.prototype.readUInt16BE=function(r,t){return r=r>>>0,t||fn(r,2,this.length),this[r]<<8|this[r+1]};je.prototype.readUint32LE=je.prototype.readUInt32LE=function(r,t){return r=r>>>0,t||fn(r,4,this.length),(this[r]|this[r+1]<<8|this[r+2]<<16)+this[r+3]*16777216};je.prototype.readUint32BE=je.prototype.readUInt32BE=function(r,t){return r=r>>>0,t||fn(r,4,this.length),this[r]*16777216+(this[r+1]<<16|this[r+2]<<8|this[r+3])};je.prototype.readBigUInt64LE=ou(function(r){r=r>>>0,cv(r,"offset");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&w2(r,this.length-8);let n=t+this[++r]*2**8+this[++r]*2**16+this[++r]*2**24,i=this[++r]+this[++r]*2**8+this[++r]*2**16+a*2**24;return BigInt(n)+(BigInt(i)<>>0,cv(r,"offset");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&w2(r,this.length-8);let n=t*2**24+this[++r]*2**16+this[++r]*2**8+this[++r],i=this[++r]*2**24+this[++r]*2**16+this[++r]*2**8+a;return(BigInt(n)<>>0,t=t>>>0,a||fn(r,t,this.length);let n=this[r],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*t)),n};je.prototype.readIntBE=function(r,t,a){r=r>>>0,t=t>>>0,a||fn(r,t,this.length);let n=t,i=1,o=this[r+--n];for(;n>0&&(i*=256);)o+=this[r+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o};je.prototype.readInt8=function(r,t){return r=r>>>0,t||fn(r,1,this.length),this[r]&128?(255-this[r]+1)*-1:this[r]};je.prototype.readInt16LE=function(r,t){r=r>>>0,t||fn(r,2,this.length);let a=this[r]|this[r+1]<<8;return a&32768?a|4294901760:a};je.prototype.readInt16BE=function(r,t){r=r>>>0,t||fn(r,2,this.length);let a=this[r+1]|this[r]<<8;return a&32768?a|4294901760:a};je.prototype.readInt32LE=function(r,t){return r=r>>>0,t||fn(r,4,this.length),this[r]|this[r+1]<<8|this[r+2]<<16|this[r+3]<<24};je.prototype.readInt32BE=function(r,t){return r=r>>>0,t||fn(r,4,this.length),this[r]<<24|this[r+1]<<16|this[r+2]<<8|this[r+3]};je.prototype.readBigInt64LE=ou(function(r){r=r>>>0,cv(r,"offset");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&w2(r,this.length-8);let n=this[r+4]+this[r+5]*2**8+this[r+6]*2**16+(a<<24);return(BigInt(n)<>>0,cv(r,"offset");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&w2(r,this.length-8);let n=(t<<24)+this[++r]*2**16+this[++r]*2**8+this[++r];return(BigInt(n)<>>0,t||fn(r,4,this.length),fv.read(this,r,!0,23,4)};je.prototype.readFloatBE=function(r,t){return r=r>>>0,t||fn(r,4,this.length),fv.read(this,r,!1,23,4)};je.prototype.readDoubleLE=function(r,t){return r=r>>>0,t||fn(r,8,this.length),fv.read(this,r,!0,52,8)};je.prototype.readDoubleBE=function(r,t){return r=r>>>0,t||fn(r,8,this.length),fv.read(this,r,!1,52,8)};function si(e,r,t,a,n,i){if(!je.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>n||re.length)throw new RangeError("Index out of range")}je.prototype.writeUintLE=je.prototype.writeUIntLE=function(r,t,a,n){if(r=+r,t=t>>>0,a=a>>>0,!n){let l=Math.pow(2,8*a)-1;si(this,r,t,a,l,0)}let i=1,o=0;for(this[t]=r&255;++o>>0,a=a>>>0,!n){let l=Math.pow(2,8*a)-1;si(this,r,t,a,l,0)}let i=a-1,o=1;for(this[t+i]=r&255;--i>=0&&(o*=256);)this[t+i]=r/o&255;return t+a};je.prototype.writeUint8=je.prototype.writeUInt8=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,1,255,0),this[t]=r&255,t+1};je.prototype.writeUint16LE=je.prototype.writeUInt16LE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,2,65535,0),this[t]=r&255,this[t+1]=r>>>8,t+2};je.prototype.writeUint16BE=je.prototype.writeUInt16BE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,2,65535,0),this[t]=r>>>8,this[t+1]=r&255,t+2};je.prototype.writeUint32LE=je.prototype.writeUInt32LE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,4,4294967295,0),this[t+3]=r>>>24,this[t+2]=r>>>16,this[t+1]=r>>>8,this[t]=r&255,t+4};je.prototype.writeUint32BE=je.prototype.writeUInt32BE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,4,4294967295,0),this[t]=r>>>24,this[t+1]=r>>>16,this[t+2]=r>>>8,this[t+3]=r&255,t+4};function xre(e,r,t,a,n){Mre(r,a,n,e,t,7);let i=Number(r&BigInt(4294967295));e[t++]=i,i=i>>8,e[t++]=i,i=i>>8,e[t++]=i,i=i>>8,e[t++]=i;let o=Number(r>>BigInt(32)&BigInt(4294967295));return e[t++]=o,o=o>>8,e[t++]=o,o=o>>8,e[t++]=o,o=o>>8,e[t++]=o,t}function _re(e,r,t,a,n){Mre(r,a,n,e,t,7);let i=Number(r&BigInt(4294967295));e[t+7]=i,i=i>>8,e[t+6]=i,i=i>>8,e[t+5]=i,i=i>>8,e[t+4]=i;let o=Number(r>>BigInt(32)&BigInt(4294967295));return e[t+3]=o,o=o>>8,e[t+2]=o,o=o>>8,e[t+1]=o,o=o>>8,e[t]=o,t+8}je.prototype.writeBigUInt64LE=ou(function(r,t=0){return xre(this,r,t,BigInt(0),BigInt("0xffffffffffffffff"))});je.prototype.writeBigUInt64BE=ou(function(r,t=0){return _re(this,r,t,BigInt(0),BigInt("0xffffffffffffffff"))});je.prototype.writeIntLE=function(r,t,a,n){if(r=+r,t=t>>>0,!n){let s=Math.pow(2,8*a-1);si(this,r,t,a,s-1,-s)}let i=0,o=1,l=0;for(this[t]=r&255;++i>0)-l&255;return t+a};je.prototype.writeIntBE=function(r,t,a,n){if(r=+r,t=t>>>0,!n){let s=Math.pow(2,8*a-1);si(this,r,t,a,s-1,-s)}let i=a-1,o=1,l=0;for(this[t+i]=r&255;--i>=0&&(o*=256);)r<0&&l===0&&this[t+i+1]!==0&&(l=1),this[t+i]=(r/o>>0)-l&255;return t+a};je.prototype.writeInt8=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,1,127,-128),r<0&&(r=255+r+1),this[t]=r&255,t+1};je.prototype.writeInt16LE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,2,32767,-32768),this[t]=r&255,this[t+1]=r>>>8,t+2};je.prototype.writeInt16BE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,2,32767,-32768),this[t]=r>>>8,this[t+1]=r&255,t+2};je.prototype.writeInt32LE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,4,2147483647,-2147483648),this[t]=r&255,this[t+1]=r>>>8,this[t+2]=r>>>16,this[t+3]=r>>>24,t+4};je.prototype.writeInt32BE=function(r,t,a){return r=+r,t=t>>>0,a||si(this,r,t,4,2147483647,-2147483648),r<0&&(r=4294967295+r+1),this[t]=r>>>24,this[t+1]=r>>>16,this[t+2]=r>>>8,this[t+3]=r&255,t+4};je.prototype.writeBigInt64LE=ou(function(r,t=0){return xre(this,r,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});je.prototype.writeBigInt64BE=ou(function(r,t=0){return _re(this,r,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function wre(e,r,t,a,n,i){if(t+a>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function Are(e,r,t,a,n){return r=+r,t=t>>>0,n||wre(e,r,t,4,34028234663852886e22,-34028234663852886e22),fv.write(e,r,t,a,23,4),t+4}je.prototype.writeFloatLE=function(r,t,a){return Are(this,r,t,!0,a)};je.prototype.writeFloatBE=function(r,t,a){return Are(this,r,t,!1,a)};function Tre(e,r,t,a,n){return r=+r,t=t>>>0,n||wre(e,r,t,8,17976931348623157e292,-17976931348623157e292),fv.write(e,r,t,a,52,8),t+8}je.prototype.writeDoubleLE=function(r,t,a){return Tre(this,r,t,!0,a)};je.prototype.writeDoubleBE=function(r,t,a){return Tre(this,r,t,!1,a)};je.prototype.copy=function(r,t,a,n){if(!je.isBuffer(r))throw new TypeError("argument should be a Buffer");if(a||(a=0),!n&&n!==0&&(n=this.length),t>=r.length&&(t=r.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),r.length-t>>0,a=a===void 0?this.length:a>>>0,r||(r=0);let i;if(typeof r=="number")for(i=t;i2**32?n=dre(String(t)):typeof t=="bigint"&&(n=String(t),(t>BigInt(2)**BigInt(32)||t<-(BigInt(2)**BigInt(32)))&&(n=dre(n)),n+="n"),a+=` It must be ${r}. Received ${n}`,a},RangeError);function dre(e){let r="",t=e.length,a=e[0]==="-"?1:0;for(;t>=a+4;t-=3)r=`_${e.slice(t-3,t)}${r}`;return`${e.slice(0,t)}${r}`}function yze(e,r,t){cv(r,"offset"),(e[r]===void 0||e[r+t]===void 0)&&w2(r,e.length-(t+1))}function Mre(e,r,t,a,n,i){if(e>t||e3?r===0||r===BigInt(0)?l=`>= 0${o} and < 2${o} ** ${(i+1)*8}${o}`:l=`>= -(2${o} ** ${(i+1)*8-1}${o}) and < 2 ** ${(i+1)*8-1}${o}`:l=`>= ${r}${o} and <= ${t}${o}`,new uv.ERR_OUT_OF_RANGE("value",l,e)}yze(a,n,i)}function cv(e,r){if(typeof e!="number")throw new uv.ERR_INVALID_ARG_TYPE(r,"number",e)}function w2(e,r,t){throw Math.floor(e)!==e?(cv(e,t),new uv.ERR_OUT_OF_RANGE(t||"offset","an integer",e)):r<0?new uv.ERR_BUFFER_OUT_OF_BOUNDS:new uv.ERR_OUT_OF_RANGE(t||"offset",`>= ${t?1:0} and <= ${r}`,e)}var gze=/[^+/0-9A-Za-z-_]/g;function bze(e){if(e=e.split("=")[0],e=e.trim().replace(gze,""),e.length<2)return"";for(;e.length%4!==0;)e=e+"=";return e}function ZA(e,r){r=r||1/0;let t,a=e.length,n=null,i=[];for(let o=0;o55295&&t<57344){if(!n){if(t>56319){(r-=3)>-1&&i.push(239,191,189);continue}else if(o+1===a){(r-=3)>-1&&i.push(239,191,189);continue}n=t;continue}if(t<56320){(r-=3)>-1&&i.push(239,191,189),n=t;continue}t=(n-55296<<10|t-56320)+65536}else n&&(r-=3)>-1&&i.push(239,191,189);if(n=null,t<128){if((r-=1)<0)break;i.push(t)}else if(t<2048){if((r-=2)<0)break;i.push(t>>6|192,t&63|128)}else if(t<65536){if((r-=3)<0)break;i.push(t>>12|224,t>>6&63|128,t&63|128)}else if(t<1114112){if((r-=4)<0)break;i.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128)}else throw new Error("Invalid code point")}return i}function xze(e){let r=[];for(let t=0;t>8,n=t%256,i.push(n),i.push(a);return i}function kre(e){return jA.toByteArray(bze(e))}function Y3(e,r,t,a){let n;for(n=0;n=r.length||n>=e.length);++n)r[n+t]=e[n];return n}function Cl(e,r){return e instanceof r||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===r.name}function QA(e){return e!==e}var wze=(function(){let e="0123456789abcdef",r=new Array(256);for(let t=0;t<16;++t){let a=t*16;for(let n=0;n<16;++n)r[a+n]=e[t]+e[n]}return r})();function ou(e){return typeof BigInt=="undefined"?Aze:e}function Aze(){throw new Error("BigInt not supported")}});var V3=z((trr,Sre)=>{"use strict";Sre.exports=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var r={},t=Symbol("test"),a=Object(t);if(typeof t=="string"||Object.prototype.toString.call(t)!=="[object Symbol]"||Object.prototype.toString.call(a)!=="[object Symbol]")return!1;var n=42;r[t]=n;for(var i in r)return!1;if(typeof Object.keys=="function"&&Object.keys(r).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(r).length!==0)return!1;var o=Object.getOwnPropertySymbols(r);if(o.length!==1||o[0]!==t||!Object.prototype.propertyIsEnumerable.call(r,t))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var l=Object.getOwnPropertyDescriptor(r,t);if(l.value!==n||l.enumerable!==!0)return!1}return!0}});var A2=z((arr,qre)=>{"use strict";var Tze=V3();qre.exports=function(){return Tze()&&!!Symbol.toStringTag}});var j3=z((nrr,Lre)=>{"use strict";Lre.exports=Object});var Dre=z((irr,Cre)=>{"use strict";Cre.exports=Error});var Pre=z((orr,Ere)=>{"use strict";Ere.exports=EvalError});var Fre=z((lrr,Rre)=>{"use strict";Rre.exports=RangeError});var Nre=z((srr,zre)=>{"use strict";zre.exports=ReferenceError});var eT=z((urr,Ire)=>{"use strict";Ire.exports=SyntaxError});var dv=z((frr,Bre)=>{"use strict";Bre.exports=TypeError});var Hre=z((crr,Ore)=>{"use strict";Ore.exports=URIError});var Gre=z((vrr,Ure)=>{"use strict";Ure.exports=Math.abs});var Vre=z((hrr,Yre)=>{"use strict";Yre.exports=Math.floor});var Wre=z((drr,jre)=>{"use strict";jre.exports=Math.max});var Zre=z((prr,Xre)=>{"use strict";Xre.exports=Math.min});var Jre=z((mrr,$re)=>{"use strict";$re.exports=Math.pow});var Qre=z((yrr,Kre)=>{"use strict";Kre.exports=Math.round});var rte=z((grr,ete)=>{"use strict";ete.exports=Number.isNaN||function(r){return r!==r}});var ate=z((brr,tte)=>{"use strict";var Mze=rte();tte.exports=function(r){return Mze(r)||r===0?r:r<0?-1:1}});var ite=z((xrr,nte)=>{"use strict";nte.exports=Object.getOwnPropertyDescriptor});var Gf=z((_rr,ote)=>{"use strict";var W3=ite();if(W3)try{W3([],"length")}catch(e){W3=null}ote.exports=W3});var T2=z((wrr,lte)=>{"use strict";var X3=Object.defineProperty||!1;if(X3)try{X3({},"a",{value:1})}catch(e){X3=!1}lte.exports=X3});var fte=z((Arr,ute)=>{"use strict";var ste=typeof Symbol!="undefined"&&Symbol,kze=V3();ute.exports=function(){return typeof ste!="function"||typeof Symbol!="function"||typeof ste("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:kze()}});var rT=z((Trr,cte)=>{"use strict";cte.exports=typeof Reflect!="undefined"&&Reflect.getPrototypeOf||null});var tT=z((Mrr,vte)=>{"use strict";var Sze=j3();vte.exports=Sze.getPrototypeOf||null});var pte=z((krr,dte)=>{"use strict";var qze="Function.prototype.bind called on incompatible ",Lze=Object.prototype.toString,Cze=Math.max,Dze="[object Function]",hte=function(r,t){for(var a=[],n=0;n{"use strict";var Rze=pte();mte.exports=Function.prototype.bind||Rze});var Z3=z((qrr,yte)=>{"use strict";yte.exports=Function.prototype.call});var $3=z((Lrr,gte)=>{"use strict";gte.exports=Function.prototype.apply});var xte=z((Crr,bte)=>{"use strict";bte.exports=typeof Reflect!="undefined"&&Reflect&&Reflect.apply});var aT=z((Drr,_te)=>{"use strict";var Fze=pv(),zze=$3(),Nze=Z3(),Ize=xte();_te.exports=Ize||Fze.call(Nze,zze)});var J3=z((Err,wte)=>{"use strict";var Bze=pv(),Oze=dv(),Hze=Z3(),Uze=aT();wte.exports=function(r){if(r.length<1||typeof r[0]!="function")throw new Oze("a function is required");return Uze(Bze,Hze,r)}});var qte=z((Prr,Ste)=>{"use strict";var Gze=J3(),Ate=Gf(),Mte;try{Mte=[].__proto__===Array.prototype}catch(e){if(!e||typeof e!="object"||!("code"in e)||e.code!=="ERR_PROTO_ACCESS")throw e}var nT=!!Mte&&Ate&&Ate(Object.prototype,"__proto__"),kte=Object,Tte=kte.getPrototypeOf;Ste.exports=nT&&typeof nT.get=="function"?Gze([nT.get]):typeof Tte=="function"?function(r){return Tte(r==null?r:kte(r))}:!1});var K3=z((Rrr,Ete)=>{"use strict";var Lte=rT(),Cte=tT(),Dte=qte();Ete.exports=Lte?function(r){return Lte(r)}:Cte?function(r){if(!r||typeof r!="object"&&typeof r!="function")throw new TypeError("getProto: not an object");return Cte(r)}:Dte?function(r){return Dte(r)}:null});var iT=z((Frr,Pte)=>{"use strict";var Yze=Function.prototype.call,Vze=Object.prototype.hasOwnProperty,jze=pv();Pte.exports=jze.call(Yze,Vze)});var rb=z((zrr,Bte)=>{"use strict";var ut,Wze=j3(),Xze=Dre(),Zze=Pre(),$ze=Fre(),Jze=Nre(),bv=eT(),gv=dv(),Kze=Hre(),Qze=Gre(),eNe=Vre(),rNe=Wre(),tNe=Zre(),aNe=Jre(),nNe=Qre(),iNe=ate(),Nte=Function,oT=function(e){try{return Nte('"use strict"; return ('+e+").constructor;")()}catch(r){}},M2=Gf(),oNe=T2(),lT=function(){throw new gv},lNe=M2?(function(){try{return arguments.callee,lT}catch(e){try{return M2(arguments,"callee").get}catch(r){return lT}}})():lT,mv=fte()(),cn=K3(),sNe=tT(),uNe=rT(),Ite=$3(),k2=Z3(),yv={},fNe=typeof Uint8Array=="undefined"||!cn?ut:cn(Uint8Array),Yf={__proto__:null,"%AggregateError%":typeof AggregateError=="undefined"?ut:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer=="undefined"?ut:ArrayBuffer,"%ArrayIteratorPrototype%":mv&&cn?cn([][Symbol.iterator]()):ut,"%AsyncFromSyncIteratorPrototype%":ut,"%AsyncFunction%":yv,"%AsyncGenerator%":yv,"%AsyncGeneratorFunction%":yv,"%AsyncIteratorPrototype%":yv,"%Atomics%":typeof Atomics=="undefined"?ut:Atomics,"%BigInt%":typeof BigInt=="undefined"?ut:BigInt,"%BigInt64Array%":typeof BigInt64Array=="undefined"?ut:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array=="undefined"?ut:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView=="undefined"?ut:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Xze,"%eval%":eval,"%EvalError%":Zze,"%Float16Array%":typeof Float16Array=="undefined"?ut:Float16Array,"%Float32Array%":typeof Float32Array=="undefined"?ut:Float32Array,"%Float64Array%":typeof Float64Array=="undefined"?ut:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry=="undefined"?ut:FinalizationRegistry,"%Function%":Nte,"%GeneratorFunction%":yv,"%Int8Array%":typeof Int8Array=="undefined"?ut:Int8Array,"%Int16Array%":typeof Int16Array=="undefined"?ut:Int16Array,"%Int32Array%":typeof Int32Array=="undefined"?ut:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":mv&&cn?cn(cn([][Symbol.iterator]())):ut,"%JSON%":typeof JSON=="object"?JSON:ut,"%Map%":typeof Map=="undefined"?ut:Map,"%MapIteratorPrototype%":typeof Map=="undefined"||!mv||!cn?ut:cn(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Wze,"%Object.getOwnPropertyDescriptor%":M2,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise=="undefined"?ut:Promise,"%Proxy%":typeof Proxy=="undefined"?ut:Proxy,"%RangeError%":$ze,"%ReferenceError%":Jze,"%Reflect%":typeof Reflect=="undefined"?ut:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set=="undefined"?ut:Set,"%SetIteratorPrototype%":typeof Set=="undefined"||!mv||!cn?ut:cn(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer=="undefined"?ut:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":mv&&cn?cn(""[Symbol.iterator]()):ut,"%Symbol%":mv?Symbol:ut,"%SyntaxError%":bv,"%ThrowTypeError%":lNe,"%TypedArray%":fNe,"%TypeError%":gv,"%Uint8Array%":typeof Uint8Array=="undefined"?ut:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray=="undefined"?ut:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array=="undefined"?ut:Uint16Array,"%Uint32Array%":typeof Uint32Array=="undefined"?ut:Uint32Array,"%URIError%":Kze,"%WeakMap%":typeof WeakMap=="undefined"?ut:WeakMap,"%WeakRef%":typeof WeakRef=="undefined"?ut:WeakRef,"%WeakSet%":typeof WeakSet=="undefined"?ut:WeakSet,"%Function.prototype.call%":k2,"%Function.prototype.apply%":Ite,"%Object.defineProperty%":oNe,"%Object.getPrototypeOf%":sNe,"%Math.abs%":Qze,"%Math.floor%":eNe,"%Math.max%":rNe,"%Math.min%":tNe,"%Math.pow%":aNe,"%Math.round%":nNe,"%Math.sign%":iNe,"%Reflect.getPrototypeOf%":uNe};if(cn)try{null.error}catch(e){Rte=cn(cn(e)),Yf["%Error.prototype%"]=Rte}var Rte,cNe=function e(r){var t;if(r==="%AsyncFunction%")t=oT("async function () {}");else if(r==="%GeneratorFunction%")t=oT("function* () {}");else if(r==="%AsyncGeneratorFunction%")t=oT("async function* () {}");else if(r==="%AsyncGenerator%"){var a=e("%AsyncGeneratorFunction%");a&&(t=a.prototype)}else if(r==="%AsyncIteratorPrototype%"){var n=e("%AsyncGenerator%");n&&cn&&(t=cn(n.prototype))}return Yf[r]=t,t},Fte={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},S2=pv(),Q3=iT(),vNe=S2.call(k2,Array.prototype.concat),hNe=S2.call(Ite,Array.prototype.splice),zte=S2.call(k2,String.prototype.replace),eb=S2.call(k2,String.prototype.slice),dNe=S2.call(k2,RegExp.prototype.exec),pNe=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,mNe=/\\(\\)?/g,yNe=function(r){var t=eb(r,0,1),a=eb(r,-1);if(t==="%"&&a!=="%")throw new bv("invalid intrinsic syntax, expected closing `%`");if(a==="%"&&t!=="%")throw new bv("invalid intrinsic syntax, expected opening `%`");var n=[];return zte(r,pNe,function(i,o,l,s){n[n.length]=l?zte(s,mNe,"$1"):o||i}),n},gNe=function(r,t){var a=r,n;if(Q3(Fte,a)&&(n=Fte[a],a="%"+n[0]+"%"),Q3(Yf,a)){var i=Yf[a];if(i===yv&&(i=cNe(a)),typeof i=="undefined"&&!t)throw new gv("intrinsic "+r+" exists, but is not available. Please file an issue!");return{alias:n,name:a,value:i}}throw new bv("intrinsic "+r+" does not exist!")};Bte.exports=function(r,t){if(typeof r!="string"||r.length===0)throw new gv("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new gv('"allowMissing" argument must be a boolean');if(dNe(/^%?[^%]*%?$/,r)===null)throw new bv("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var a=yNe(r),n=a.length>0?a[0]:"",i=gNe("%"+n+"%",t),o=i.name,l=i.value,s=!1,u=i.alias;u&&(n=u[0],hNe(a,vNe([0,1],u)));for(var f=1,c=!0;f=a.length){var y=M2(l,v);c=!!y,c&&"get"in y&&!("originalValue"in y.get)?l=y.get:l=l[v]}else c=Q3(l,v),l=l[v];c&&!s&&(Yf[o]=l)}}return l}});var Vf=z((Nrr,Ute)=>{"use strict";var Ote=rb(),Hte=J3(),bNe=Hte([Ote("%String.prototype.indexOf%")]);Ute.exports=function(r,t){var a=Ote(r,!!t);return typeof a=="function"&&bNe(r,".prototype.")>-1?Hte([a]):a}});var Vte=z((Irr,Yte)=>{"use strict";var xNe=A2()(),_Ne=Vf(),sT=_Ne("Object.prototype.toString"),tb=function(r){return xNe&&r&&typeof r=="object"&&Symbol.toStringTag in r?!1:sT(r)==="[object Arguments]"},Gte=function(r){return tb(r)?!0:r!==null&&typeof r=="object"&&"length"in r&&typeof r.length=="number"&&r.length>=0&&sT(r)!=="[object Array]"&&"callee"in r&&sT(r.callee)==="[object Function]"},wNe=(function(){return tb(arguments)})();tb.isLegacyArguments=Gte;Yte.exports=wNe?tb:Gte});var Jte=z((Brr,$te)=>{"use strict";var jte=Vf(),ANe=A2()(),TNe=iT(),MNe=Gf(),cT;ANe?(Wte=jte("RegExp.prototype.exec"),uT={},ab=function(){throw uT},fT={toString:ab,valueOf:ab},typeof Symbol.toPrimitive=="symbol"&&(fT[Symbol.toPrimitive]=ab),cT=function(r){if(!r||typeof r!="object")return!1;var t=MNe(r,"lastIndex"),a=t&&TNe(t,"value");if(!a)return!1;try{Wte(r,fT)}catch(n){return n===uT}}):(Xte=jte("Object.prototype.toString"),Zte="[object RegExp]",cT=function(r){return!r||typeof r!="object"&&typeof r!="function"?!1:Xte(r)===Zte});var Wte,uT,ab,fT,Xte,Zte;$te.exports=cT});var Qte=z((Orr,Kte)=>{"use strict";var kNe=Vf(),SNe=Jte(),qNe=kNe("RegExp.prototype.exec"),LNe=dv();Kte.exports=function(r){if(!SNe(r))throw new LNe("`regex` must be a RegExp");return function(a){return qNe(r,a)!==null}}});var rae=z((Hrr,eae)=>{"use strict";var CNe=function*(){}.constructor;eae.exports=()=>CNe});var iae=z((Urr,nae)=>{"use strict";var aae=Vf(),DNe=Qte(),ENe=DNe(/^\s*(?:function)?\*/),PNe=A2()(),tae=K3(),RNe=aae("Object.prototype.toString"),FNe=aae("Function.prototype.toString"),zNe=rae();nae.exports=function(r){if(typeof r!="function")return!1;if(ENe(FNe(r)))return!0;if(!PNe){var t=RNe(r);return t==="[object GeneratorFunction]"}if(!tae)return!1;var a=zNe();return a&&tae(r)===a.prototype}});var uae=z((Grr,sae)=>{"use strict";var lae=Function.prototype.toString,xv=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,hT,nb;if(typeof xv=="function"&&typeof Object.defineProperty=="function")try{hT=Object.defineProperty({},"length",{get:function(){throw nb}}),nb={},xv(function(){throw 42},null,hT)}catch(e){e!==nb&&(xv=null)}else xv=null;var NNe=/^\s*class\b/,dT=function(r){try{var t=lae.call(r);return NNe.test(t)}catch(a){return!1}},vT=function(r){try{return dT(r)?!1:(lae.call(r),!0)}catch(t){return!1}},ib=Object.prototype.toString,INe="[object Object]",BNe="[object Function]",ONe="[object GeneratorFunction]",HNe="[object HTMLAllCollection]",UNe="[object HTML document.all class]",GNe="[object HTMLCollection]",YNe=typeof Symbol=="function"&&!!Symbol.toStringTag,VNe=!(0 in[,]),pT=function(){return!1};typeof document=="object"&&(oae=document.all,ib.call(oae)===ib.call(document.all)&&(pT=function(r){if((VNe||!r)&&(typeof r=="undefined"||typeof r=="object"))try{var t=ib.call(r);return(t===HNe||t===UNe||t===GNe||t===INe)&&r("")==null}catch(a){}return!1}));var oae;sae.exports=xv?function(r){if(pT(r))return!0;if(!r||typeof r!="function"&&typeof r!="object")return!1;try{xv(r,null,hT)}catch(t){if(t!==nb)return!1}return!dT(r)&&vT(r)}:function(r){if(pT(r))return!0;if(!r||typeof r!="function"&&typeof r!="object")return!1;if(YNe)return vT(r);if(dT(r))return!1;var t=ib.call(r);return t!==BNe&&t!==ONe&&!/^\[object HTML/.test(t)?!1:vT(r)}});var vae=z((Yrr,cae)=>{"use strict";var jNe=uae(),WNe=Object.prototype.toString,fae=Object.prototype.hasOwnProperty,XNe=function(r,t,a){for(var n=0,i=r.length;n=3&&(n=a),JNe(r)?XNe(r,t,n):typeof r=="string"?ZNe(r,t,n):$Ne(r,t,n)}});var dae=z((Vrr,hae)=>{"use strict";hae.exports=["Float16Array","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]});var mae=z((jrr,pae)=>{"use strict";var mT=dae(),KNe=typeof globalThis=="undefined"?window:globalThis;pae.exports=function(){for(var r=[],t=0;t{"use strict";var yae=T2(),QNe=eT(),_v=dv(),gae=Gf();bae.exports=function(r,t,a){if(!r||typeof r!="object"&&typeof r!="function")throw new _v("`obj` must be an object or a function`");if(typeof t!="string"&&typeof t!="symbol")throw new _v("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new _v("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new _v("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new _v("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new _v("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,i=arguments.length>4?arguments[4]:null,o=arguments.length>5?arguments[5]:null,l=arguments.length>6?arguments[6]:!1,s=!!gae&&gae(r,t);if(yae)yae(r,t,{configurable:o===null&&s?s.configurable:!o,enumerable:n===null&&s?s.enumerable:!n,value:a,writable:i===null&&s?s.writable:!i});else if(l||!n&&!i&&!o)r[t]=a;else throw new QNe("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")}});var bT=z((Xrr,_ae)=>{"use strict";var gT=T2(),xae=function(){return!!gT};xae.hasArrayLengthDefineBug=function(){if(!gT)return null;try{return gT([],"length",{value:1}).length!==1}catch(r){return!0}};_ae.exports=xae});var kae=z((Zrr,Mae)=>{"use strict";var eIe=rb(),wae=yT(),rIe=bT()(),Aae=Gf(),Tae=dv(),tIe=eIe("%Math.floor%");Mae.exports=function(r,t){if(typeof r!="function")throw new Tae("`fn` is not a function");if(typeof t!="number"||t<0||t>4294967295||tIe(t)!==t)throw new Tae("`length` must be a positive 32-bit integer");var a=arguments.length>2&&!!arguments[2],n=!0,i=!0;if("length"in r&&Aae){var o=Aae(r,"length");o&&!o.configurable&&(n=!1),o&&!o.writable&&(i=!1)}return(n||i||!a)&&(rIe?wae(r,"length",t,!0,!0):wae(r,"length",t)),r}});var qae=z(($rr,Sae)=>{"use strict";var aIe=pv(),nIe=$3(),iIe=aT();Sae.exports=function(){return iIe(aIe,nIe,arguments)}});var q2=z((Jrr,ob)=>{"use strict";var oIe=kae(),Lae=T2(),lIe=J3(),Cae=qae();ob.exports=function(r){var t=lIe(arguments),a=1+r.length-(arguments.length-1);return oIe(t,a>0?a:0,!0)};Lae?Lae(ob.exports,"apply",{value:Cae}):ob.exports.apply=Cae});var AT=z((Krr,Rae)=>{"use strict";var ub=vae(),sIe=mae(),Dae=q2(),_T=Vf(),sb=Gf(),lb=K3(),uIe=_T("Object.prototype.toString"),Pae=A2()(),Eae=typeof globalThis=="undefined"?window:globalThis,xT=sIe(),wT=_T("String.prototype.slice"),fIe=_T("Array.prototype.indexOf",!0)||function(r,t){for(var a=0;a-1}function dIe(e){if(!e||typeof e!="object")return!1;if(!Pae){var r=wT(uIe(e),8,-1);return hIe(r)?r:r!=="Object"?!1:vIe(e)}return sb?cIe(e):null}Rae.exports=dIe});var zae=z((Qrr,Fae)=>{"use strict";var pIe=AT();Fae.exports=function(r){return!!pIe(r)}});var kT=z(ft=>{"use strict";var mIe=Vte(),yIe=iae(),Zo=AT(),Nae=zae();function wv(e){return e.call.bind(e)}var Iae=typeof BigInt!="undefined",Bae=typeof Symbol!="undefined",mo=wv(Object.prototype.toString),gIe=wv(Number.prototype.valueOf),bIe=wv(String.prototype.valueOf),xIe=wv(Boolean.prototype.valueOf);Iae&&(Oae=wv(BigInt.prototype.valueOf));var Oae;Bae&&(Hae=wv(Symbol.prototype.valueOf));var Hae;function C2(e,r){if(typeof e!="object")return!1;try{return r(e),!0}catch(t){return!1}}ft.isArgumentsObject=mIe;ft.isGeneratorFunction=yIe;ft.isTypedArray=Nae;function _Ie(e){return typeof Promise!="undefined"&&e instanceof Promise||e!==null&&typeof e=="object"&&typeof e.then=="function"&&typeof e.catch=="function"}ft.isPromise=_Ie;function wIe(e){return typeof ArrayBuffer!="undefined"&&ArrayBuffer.isView?ArrayBuffer.isView(e):Nae(e)||Gae(e)}ft.isArrayBufferView=wIe;function AIe(e){return Zo(e)==="Uint8Array"}ft.isUint8Array=AIe;function TIe(e){return Zo(e)==="Uint8ClampedArray"}ft.isUint8ClampedArray=TIe;function MIe(e){return Zo(e)==="Uint16Array"}ft.isUint16Array=MIe;function kIe(e){return Zo(e)==="Uint32Array"}ft.isUint32Array=kIe;function SIe(e){return Zo(e)==="Int8Array"}ft.isInt8Array=SIe;function qIe(e){return Zo(e)==="Int16Array"}ft.isInt16Array=qIe;function LIe(e){return Zo(e)==="Int32Array"}ft.isInt32Array=LIe;function CIe(e){return Zo(e)==="Float32Array"}ft.isFloat32Array=CIe;function DIe(e){return Zo(e)==="Float64Array"}ft.isFloat64Array=DIe;function EIe(e){return Zo(e)==="BigInt64Array"}ft.isBigInt64Array=EIe;function PIe(e){return Zo(e)==="BigUint64Array"}ft.isBigUint64Array=PIe;function cb(e){return mo(e)==="[object Map]"}cb.working=typeof Map!="undefined"&&cb(new Map);function RIe(e){return typeof Map=="undefined"?!1:cb.working?cb(e):e instanceof Map}ft.isMap=RIe;function vb(e){return mo(e)==="[object Set]"}vb.working=typeof Set!="undefined"&&vb(new Set);function FIe(e){return typeof Set=="undefined"?!1:vb.working?vb(e):e instanceof Set}ft.isSet=FIe;function hb(e){return mo(e)==="[object WeakMap]"}hb.working=typeof WeakMap!="undefined"&&hb(new WeakMap);function zIe(e){return typeof WeakMap=="undefined"?!1:hb.working?hb(e):e instanceof WeakMap}ft.isWeakMap=zIe;function MT(e){return mo(e)==="[object WeakSet]"}MT.working=typeof WeakSet!="undefined"&&MT(new WeakSet);function NIe(e){return MT(e)}ft.isWeakSet=NIe;function db(e){return mo(e)==="[object ArrayBuffer]"}db.working=typeof ArrayBuffer!="undefined"&&db(new ArrayBuffer);function Uae(e){return typeof ArrayBuffer=="undefined"?!1:db.working?db(e):e instanceof ArrayBuffer}ft.isArrayBuffer=Uae;function pb(e){return mo(e)==="[object DataView]"}pb.working=typeof ArrayBuffer!="undefined"&&typeof DataView!="undefined"&&pb(new DataView(new ArrayBuffer(1),0,1));function Gae(e){return typeof DataView=="undefined"?!1:pb.working?pb(e):e instanceof DataView}ft.isDataView=Gae;var TT=typeof SharedArrayBuffer!="undefined"?SharedArrayBuffer:void 0;function L2(e){return mo(e)==="[object SharedArrayBuffer]"}function Yae(e){return typeof TT=="undefined"?!1:(typeof L2.working=="undefined"&&(L2.working=L2(new TT)),L2.working?L2(e):e instanceof TT)}ft.isSharedArrayBuffer=Yae;function IIe(e){return mo(e)==="[object AsyncFunction]"}ft.isAsyncFunction=IIe;function BIe(e){return mo(e)==="[object Map Iterator]"}ft.isMapIterator=BIe;function OIe(e){return mo(e)==="[object Set Iterator]"}ft.isSetIterator=OIe;function HIe(e){return mo(e)==="[object Generator]"}ft.isGeneratorObject=HIe;function UIe(e){return mo(e)==="[object WebAssembly.Module]"}ft.isWebAssemblyCompiledModule=UIe;function Vae(e){return C2(e,gIe)}ft.isNumberObject=Vae;function jae(e){return C2(e,bIe)}ft.isStringObject=jae;function Wae(e){return C2(e,xIe)}ft.isBooleanObject=Wae;function Xae(e){return Iae&&C2(e,Oae)}ft.isBigIntObject=Xae;function Zae(e){return Bae&&C2(e,Hae)}ft.isSymbolObject=Zae;function GIe(e){return Vae(e)||jae(e)||Wae(e)||Xae(e)||Zae(e)}ft.isBoxedPrimitive=GIe;function YIe(e){return typeof Uint8Array!="undefined"&&(Uae(e)||Yae(e))}ft.isAnyArrayBuffer=YIe;["isProxy","isExternal","isModuleNamespaceObject"].forEach(function(e){Object.defineProperty(ft,e,{enumerable:!1,value:function(){throw new Error(e+" is not supported in userland")}})})});var ST=z((rtr,$ae)=>{$ae.exports=function(r){return r&&typeof r=="object"&&typeof r.copy=="function"&&typeof r.fill=="function"&&typeof r.readUInt8=="function"}});var PT=z(ct=>{var Jae=Object.getOwnPropertyDescriptors||function(r){for(var t=Object.keys(r),a={},n=0;n=n)return l;switch(l){case"%s":return String(a[t++]);case"%d":return Number(a[t++]);case"%j":try{return JSON.stringify(a[t++])}catch(s){return"[Circular]"}default:return l}}),o=a[t];t=3&&(t.depth=arguments[2]),arguments.length>=4&&(t.colors=arguments[3]),DT(r)?t.showHidden=r:r&&ct._extend(t,r),Wf(t.showHidden)&&(t.showHidden=!1),Wf(t.depth)&&(t.depth=2),Wf(t.colors)&&(t.colors=!1),Wf(t.customInspect)&&(t.customInspect=!0),t.colors&&(t.stylize=jIe),bb(t,e,t.depth)}ct.inspect=lu;lu.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};lu.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function jIe(e,r){var t=lu.styles[r];return t?"\x1B["+lu.colors[t][0]+"m"+e+"\x1B["+lu.colors[t][1]+"m":e}function WIe(e,r){return e}function XIe(e){var r={};return e.forEach(function(t,a){r[t]=!0}),r}function bb(e,r,t){if(e.customInspect&&r&&gb(r.inspect)&&r.inspect!==ct.inspect&&!(r.constructor&&r.constructor.prototype===r)){var a=r.inspect(t,e);return wb(a)||(a=bb(e,a,t)),a}var n=ZIe(e,r);if(n)return n;var i=Object.keys(r),o=XIe(i);if(e.showHidden&&(i=Object.getOwnPropertyNames(r)),E2(r)&&(i.indexOf("message")>=0||i.indexOf("description")>=0))return qT(r);if(i.length===0){if(gb(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(D2(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(xb(r))return e.stylize(Date.prototype.toString.call(r),"date");if(E2(r))return qT(r)}var s="",u=!1,f=["{","}"];if(Qae(r)&&(u=!0,f=["[","]"]),gb(r)){var c=r.name?": "+r.name:"";s=" [Function"+c+"]"}if(D2(r)&&(s=" "+RegExp.prototype.toString.call(r)),xb(r)&&(s=" "+Date.prototype.toUTCString.call(r)),E2(r)&&(s=" "+qT(r)),i.length===0&&(!u||r.length==0))return f[0]+s+f[1];if(t<0)return D2(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special");e.seen.push(r);var v;return u?v=$Ie(e,r,t,o,i):v=i.map(function(d){return CT(e,r,t,o,d,u)}),e.seen.pop(),JIe(v,s,f)}function ZIe(e,r){if(Wf(r))return e.stylize("undefined","undefined");if(wb(r)){var t="'"+JSON.stringify(r).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(t,"string")}if(ene(r))return e.stylize(""+r,"number");if(DT(r))return e.stylize(""+r,"boolean");if(_b(r))return e.stylize("null","null")}function qT(e){return"["+Error.prototype.toString.call(e)+"]"}function $Ie(e,r,t,a,n){for(var i=[],o=0,l=r.length;o-1&&(i?l=l.split(` +`).map(function(u){return" "+u}).join(` +`).slice(2):l=` +`+l.split(` +`).map(function(u){return" "+u}).join(` +`))):l=e.stylize("[Circular]","special")),Wf(o)){if(i&&n.match(/^\d+$/))return l;o=JSON.stringify(""+n),o.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.slice(1,-1),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+l}function JIe(e,r,t){var a=0,n=e.reduce(function(i,o){return a++,o.indexOf(` +`)>=0&&a++,i+o.replace(/\u001b\[\d\d?m/g,"").length+1},0);return n>60?t[0]+(r===""?"":r+` + `)+" "+e.join(`, + `)+" "+t[1]:t[0]+r+" "+e.join(", ")+" "+t[1]}ct.types=kT();function Qae(e){return Array.isArray(e)}ct.isArray=Qae;function DT(e){return typeof e=="boolean"}ct.isBoolean=DT;function _b(e){return e===null}ct.isNull=_b;function KIe(e){return e==null}ct.isNullOrUndefined=KIe;function ene(e){return typeof e=="number"}ct.isNumber=ene;function wb(e){return typeof e=="string"}ct.isString=wb;function QIe(e){return typeof e=="symbol"}ct.isSymbol=QIe;function Wf(e){return e===void 0}ct.isUndefined=Wf;function D2(e){return Av(e)&&ET(e)==="[object RegExp]"}ct.isRegExp=D2;ct.types.isRegExp=D2;function Av(e){return typeof e=="object"&&e!==null}ct.isObject=Av;function xb(e){return Av(e)&&ET(e)==="[object Date]"}ct.isDate=xb;ct.types.isDate=xb;function E2(e){return Av(e)&&(ET(e)==="[object Error]"||e instanceof Error)}ct.isError=E2;ct.types.isNativeError=E2;function gb(e){return typeof e=="function"}ct.isFunction=gb;function eBe(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"||typeof e=="symbol"||typeof e=="undefined"}ct.isPrimitive=eBe;ct.isBuffer=ST();function ET(e){return Object.prototype.toString.call(e)}function LT(e){return e<10?"0"+e.toString(10):e.toString(10)}var rBe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function tBe(){var e=new Date,r=[LT(e.getHours()),LT(e.getMinutes()),LT(e.getSeconds())].join(":");return[e.getDate(),rBe[e.getMonth()],r].join(" ")}ct.log=function(){console.log("%s - %s",tBe(),ct.format.apply(ct,arguments))};ct.inherits=ss();ct._extend=function(e,r){if(!r||!Av(r))return e;for(var t=Object.keys(r),a=t.length;a--;)e[t[a]]=r[t[a]];return e};function rne(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var jf=typeof Symbol!="undefined"?Symbol("util.promisify.custom"):void 0;ct.promisify=function(r){if(typeof r!="function")throw new TypeError('The "original" argument must be of type Function');if(jf&&r[jf]){var t=r[jf];if(typeof t!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,jf,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var a,n,i=new Promise(function(s,u){a=s,n=u}),o=[],l=0;l{"use strict";function tne(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,a)}return t}function ane(e){for(var r=1;r0?this.tail.next=a:this.head=a,this.tail=a,++this.length}},{key:"unshift",value:function(t){var a={data:t,next:this.head};this.length===0&&(this.tail=a),this.head=a,++this.length}},{key:"shift",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(t){if(this.length===0)return"";for(var a=this.head,n=""+a.data;a=a.next;)n+=t+a.data;return n}},{key:"concat",value:function(t){if(this.length===0)return Ab.alloc(0);for(var a=Ab.allocUnsafe(t>>>0),n=this.head,i=0;n;)vBe(n.data,a,i),i+=n.data.length,n=n.next;return a}},{key:"consume",value:function(t,a){var n;return to.length?o.length:t;if(l===o.length?i+=o:i+=o.slice(0,t),t-=l,t===0){l===o.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=o.slice(l));break}++n}return this.length-=n,i}},{key:"_getBuffer",value:function(t){var a=Ab.allocUnsafe(t),n=this.head,i=1;for(n.data.copy(a),t-=n.data.length;n=n.next;){var o=n.data,l=t>o.length?o.length:t;if(o.copy(a,a.length-t,0,l),t-=l,t===0){l===o.length?(++i,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(l));break}++i}return this.length-=i,a}},{key:cBe,value:function(t,a){return RT(this,ane(ane({},a),{},{depth:0,customInspect:!1}))}}]),e})()});var zT=z((ntr,une)=>{"use strict";function hBe(e,r){var t=this,a=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return a||n?(r?r(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(FT,this,e)):process.nextTick(FT,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(i){!r&&i?t._writableState?t._writableState.errorEmitted?process.nextTick(Tb,t):(t._writableState.errorEmitted=!0,process.nextTick(sne,t,i)):process.nextTick(sne,t,i):r?(process.nextTick(Tb,t),r(i)):process.nextTick(Tb,t)}),this)}function sne(e,r){FT(e,r),Tb(e)}function Tb(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function dBe(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function FT(e,r){e.emit("error",r)}function pBe(e,r){var t=e._readableState,a=e._writableState;t&&t.autoDestroy||a&&a.autoDestroy?e.destroy(r):e.emit("error",r)}une.exports={destroy:hBe,undestroy:dBe,errorOrDestroy:pBe}});var Xf=z((itr,vne)=>{"use strict";function mBe(e,r){e.prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r}var cne={};function yo(e,r,t){t||(t=Error);function a(i,o,l){return typeof r=="string"?r:r(i,o,l)}var n=(function(i){mBe(o,i);function o(l,s,u){return i.call(this,a(l,s,u))||this}return o})(t);n.prototype.name=t.name,n.prototype.code=e,cne[e]=n}function fne(e,r){if(Array.isArray(e)){var t=e.length;return e=e.map(function(a){return String(a)}),t>2?"one of ".concat(r," ").concat(e.slice(0,t-1).join(", "),", or ")+e[t-1]:t===2?"one of ".concat(r," ").concat(e[0]," or ").concat(e[1]):"of ".concat(r," ").concat(e[0])}else return"of ".concat(r," ").concat(String(e))}function yBe(e,r,t){return e.substr(!t||t<0?0:+t,r.length)===r}function gBe(e,r,t){return(t===void 0||t>e.length)&&(t=e.length),e.substring(t-r.length,t)===r}function bBe(e,r,t){return typeof t!="number"&&(t=0),t+r.length>e.length?!1:e.indexOf(r,t)!==-1}yo("ERR_INVALID_OPT_VALUE",function(e,r){return'The value "'+r+'" is invalid for option "'+e+'"'},TypeError);yo("ERR_INVALID_ARG_TYPE",function(e,r,t){var a;typeof r=="string"&&yBe(r,"not ")?(a="must not be",r=r.replace(/^not /,"")):a="must be";var n;if(gBe(e," argument"))n="The ".concat(e," ").concat(a," ").concat(fne(r,"type"));else{var i=bBe(e,".")?"property":"argument";n='The "'.concat(e,'" ').concat(i," ").concat(a," ").concat(fne(r,"type"))}return n+=". Received type ".concat(typeof t),n},TypeError);yo("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");yo("ERR_METHOD_NOT_IMPLEMENTED",function(e){return"The "+e+" method is not implemented"});yo("ERR_STREAM_PREMATURE_CLOSE","Premature close");yo("ERR_STREAM_DESTROYED",function(e){return"Cannot call "+e+" after a stream was destroyed"});yo("ERR_MULTIPLE_CALLBACK","Callback called multiple times");yo("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");yo("ERR_STREAM_WRITE_AFTER_END","write after end");yo("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);yo("ERR_UNKNOWN_ENCODING",function(e){return"Unknown encoding: "+e},TypeError);yo("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");vne.exports.codes=cne});var NT=z((otr,hne)=>{"use strict";var xBe=Xf().codes.ERR_INVALID_OPT_VALUE;function _Be(e,r,t){return e.highWaterMark!=null?e.highWaterMark:r?e[t]:null}function wBe(e,r,t,a){var n=_Be(r,a,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var i=a?t:"highWaterMark";throw new xBe(i,n)}return Math.floor(n)}return e.objectMode?16:16*1024}hne.exports={getHighWaterMark:wBe}});var pne=z((ltr,dne)=>{dne.exports=ABe;function ABe(e,r){if(IT("noDeprecation"))return e;var t=!1;function a(){if(!t){if(IT("throwDeprecation"))throw new Error(r);IT("traceDeprecation")?console.trace(r):console.warn(r),t=!0}return e.apply(this,arguments)}return a}function IT(e){try{if(!window.localStorage)return!1}catch(t){return!1}var r=window.localStorage[e];return r==null?!1:String(r).toLowerCase()==="true"}});var HT=z((str,_ne)=>{"use strict";_ne.exports=Sa;function yne(e){var r=this;this.next=null,this.entry=null,this.finish=function(){$Be(r,e)}}var Tv;Sa.WritableState=R2;var TBe={deprecate:pne()},gne=GA(),kb=hv().Buffer,MBe=(typeof window!="undefined"||typeof window!="undefined"?window:typeof self!="undefined"?self:{}).Uint8Array||function(){};function kBe(e){return kb.from(e)}function SBe(e){return kb.isBuffer(e)||e instanceof MBe}var OT=zT(),qBe=NT(),LBe=qBe.getHighWaterMark,su=Xf().codes,CBe=su.ERR_INVALID_ARG_TYPE,DBe=su.ERR_METHOD_NOT_IMPLEMENTED,EBe=su.ERR_MULTIPLE_CALLBACK,PBe=su.ERR_STREAM_CANNOT_PIPE,RBe=su.ERR_STREAM_DESTROYED,FBe=su.ERR_STREAM_NULL_VALUES,zBe=su.ERR_STREAM_WRITE_AFTER_END,NBe=su.ERR_UNKNOWN_ENCODING,Mv=OT.errorOrDestroy;ss()(Sa,gne);function IBe(){}function R2(e,r,t){Tv=Tv||Zf(),e=e||{},typeof t!="boolean"&&(t=r instanceof Tv),this.objectMode=!!e.objectMode,t&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=LBe(this,e,"writableHighWaterMark",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=e.decodeStrings===!1;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){VBe(r,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new yne(this)}R2.prototype.getBuffer=function(){for(var r=this.bufferedRequest,t=[];r;)t.push(r),r=r.next;return t};(function(){try{Object.defineProperty(R2.prototype,"buffer",{get:TBe.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}})();var Mb;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(Mb=Function.prototype[Symbol.hasInstance],Object.defineProperty(Sa,Symbol.hasInstance,{value:function(r){return Mb.call(this,r)?!0:this!==Sa?!1:r&&r._writableState instanceof R2}})):Mb=function(r){return r instanceof this};function Sa(e){Tv=Tv||Zf();var r=this instanceof Tv;if(!r&&!Mb.call(Sa,this))return new Sa(e);this._writableState=new R2(e,this,r),this.writable=!0,e&&(typeof e.write=="function"&&(this._write=e.write),typeof e.writev=="function"&&(this._writev=e.writev),typeof e.destroy=="function"&&(this._destroy=e.destroy),typeof e.final=="function"&&(this._final=e.final)),gne.call(this)}Sa.prototype.pipe=function(){Mv(this,new PBe)};function BBe(e,r){var t=new zBe;Mv(e,t),process.nextTick(r,t)}function OBe(e,r,t,a){var n;return t===null?n=new FBe:typeof t!="string"&&!r.objectMode&&(n=new CBe("chunk",["string","Buffer"],t)),n?(Mv(e,n),process.nextTick(a,n),!1):!0}Sa.prototype.write=function(e,r,t){var a=this._writableState,n=!1,i=!a.objectMode&&SBe(e);return i&&!kb.isBuffer(e)&&(e=kBe(e)),typeof r=="function"&&(t=r,r=null),i?r="buffer":r||(r=a.defaultEncoding),typeof t!="function"&&(t=IBe),a.ending?BBe(this,t):(i||OBe(this,a,e,t))&&(a.pendingcb++,n=UBe(this,a,i,e,r,t)),n};Sa.prototype.cork=function(){this._writableState.corked++};Sa.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,!e.writing&&!e.corked&&!e.bufferProcessing&&e.bufferedRequest&&bne(this,e))};Sa.prototype.setDefaultEncoding=function(r){if(typeof r=="string"&&(r=r.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((r+"").toLowerCase())>-1))throw new NBe(r);return this._writableState.defaultEncoding=r,this};Object.defineProperty(Sa.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function HBe(e,r,t){return!e.objectMode&&e.decodeStrings!==!1&&typeof r=="string"&&(r=kb.from(r,t)),r}Object.defineProperty(Sa.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function UBe(e,r,t,a,n,i){if(!t){var o=HBe(r,a,n);a!==o&&(t=!0,n="buffer",a=o)}var l=r.objectMode?1:a.length;r.length+=l;var s=r.length{"use strict";var JBe=Object.keys||function(e){var r=[];for(var t in e)r.push(t);return r};Ane.exports=Dl;var wne=YT(),GT=HT();ss()(Dl,wne);for(UT=JBe(GT.prototype),Sb=0;Sb{var Lb=hv(),El=Lb.Buffer;function Tne(e,r){for(var t in e)r[t]=e[t]}El.from&&El.alloc&&El.allocUnsafe&&El.allocUnsafeSlow?Mne.exports=Lb:(Tne(Lb,VT),VT.Buffer=$f);function $f(e,r,t){return El(e,r,t)}$f.prototype=Object.create(El.prototype);Tne(El,$f);$f.from=function(e,r,t){if(typeof e=="number")throw new TypeError("Argument must not be a number");return El(e,r,t)};$f.alloc=function(e,r,t){if(typeof e!="number")throw new TypeError("Argument must be a number");var a=El(e);return r!==void 0?typeof t=="string"?a.fill(r,t):a.fill(r):a.fill(0),a};$f.allocUnsafe=function(e){if(typeof e!="number")throw new TypeError("Argument must be a number");return El(e)};$f.allocUnsafeSlow=function(e){if(typeof e!="number")throw new TypeError("Argument must be a number");return Lb.SlowBuffer(e)}});var XT=z(qne=>{"use strict";var WT=kne().Buffer,Sne=WT.isEncoding||function(e){switch(e=""+e,e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function eOe(e){if(!e)return"utf8";for(var r;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(r)return;e=(""+e).toLowerCase(),r=!0}}function rOe(e){var r=eOe(e);if(typeof r!="string"&&(WT.isEncoding===Sne||!Sne(e)))throw new Error("Unknown encoding: "+e);return r||e}qne.StringDecoder=F2;function F2(e){this.encoding=rOe(e);var r;switch(this.encoding){case"utf16le":this.text=lOe,this.end=sOe,r=4;break;case"utf8":this.fillLast=nOe,r=4;break;case"base64":this.text=uOe,this.end=fOe,r=3;break;default:this.write=cOe,this.end=vOe;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=WT.allocUnsafe(r)}F2.prototype.write=function(e){if(e.length===0)return"";var r,t;if(this.lastNeed){if(r=this.fillLast(e),r===void 0)return"";t=this.lastNeed,this.lastNeed=0}else t=0;return t>5===6?2:e>>4===14?3:e>>3===30?4:e>>6===2?-1:-2}function tOe(e,r,t){var a=r.length-1;if(a=0?(n>0&&(e.lastNeed=n-1),n):--a=0?(n>0&&(e.lastNeed=n-2),n):--a=0?(n>0&&(n===2?n=0:e.lastNeed=n-3),n):0))}function aOe(e,r,t){if((r[0]&192)!==128)return e.lastNeed=0,"\uFFFD";if(e.lastNeed>1&&r.length>1){if((r[1]&192)!==128)return e.lastNeed=1,"\uFFFD";if(e.lastNeed>2&&r.length>2&&(r[2]&192)!==128)return e.lastNeed=2,"\uFFFD"}}function nOe(e){var r=this.lastTotal-this.lastNeed,t=aOe(this,e,r);if(t!==void 0)return t;if(this.lastNeed<=e.length)return e.copy(this.lastChar,r,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,r,0,e.length),this.lastNeed-=e.length}function iOe(e,r){var t=tOe(this,e,r);if(!this.lastNeed)return e.toString("utf8",r);this.lastTotal=t;var a=e.length-(t-this.lastNeed);return e.copy(this.lastChar,0,a),e.toString("utf8",r,a)}function oOe(e){var r=e&&e.length?this.write(e):"";return this.lastNeed?r+"\uFFFD":r}function lOe(e,r){if((e.length-r)%2===0){var t=e.toString("utf16le",r);if(t){var a=t.charCodeAt(t.length-1);if(a>=55296&&a<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",r,e.length-1)}function sOe(e){var r=e&&e.length?this.write(e):"";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return r+this.lastChar.toString("utf16le",0,t)}return r}function uOe(e,r){var t=(e.length-r)%3;return t===0?e.toString("base64",r):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",r,e.length-t))}function fOe(e){var r=e&&e.length?this.write(e):"";return this.lastNeed?r+this.lastChar.toString("base64",0,3-this.lastNeed):r}function cOe(e){return e.toString(this.encoding)}function vOe(e){return e&&e.length?this.write(e):""}});var Cb=z((ctr,Dne)=>{"use strict";var Lne=Xf().codes.ERR_STREAM_PREMATURE_CLOSE;function hOe(e){var r=!1;return function(){if(!r){r=!0;for(var t=arguments.length,a=new Array(t),n=0;n{"use strict";var Db;function uu(e,r,t){return r=mOe(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function mOe(e){var r=yOe(e,"string");return typeof r=="symbol"?r:String(r)}function yOe(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var a=t.call(e,r||"default");if(typeof a!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}var gOe=Cb(),fu=Symbol("lastResolve"),Jf=Symbol("lastReject"),z2=Symbol("error"),Eb=Symbol("ended"),Kf=Symbol("lastPromise"),ZT=Symbol("handlePromise"),Qf=Symbol("stream");function cu(e,r){return{value:e,done:r}}function bOe(e){var r=e[fu];if(r!==null){var t=e[Qf].read();t!==null&&(e[Kf]=null,e[fu]=null,e[Jf]=null,r(cu(t,!1)))}}function xOe(e){process.nextTick(bOe,e)}function _Oe(e,r){return function(t,a){e.then(function(){if(r[Eb]){t(cu(void 0,!0));return}r[ZT](t,a)},a)}}var wOe=Object.getPrototypeOf(function(){}),AOe=Object.setPrototypeOf((Db={get stream(){return this[Qf]},next:function(){var r=this,t=this[z2];if(t!==null)return Promise.reject(t);if(this[Eb])return Promise.resolve(cu(void 0,!0));if(this[Qf].destroyed)return new Promise(function(o,l){process.nextTick(function(){r[z2]?l(r[z2]):o(cu(void 0,!0))})});var a=this[Kf],n;if(a)n=new Promise(_Oe(a,this));else{var i=this[Qf].read();if(i!==null)return Promise.resolve(cu(i,!1));n=new Promise(this[ZT])}return this[Kf]=n,n}},uu(Db,Symbol.asyncIterator,function(){return this}),uu(Db,"return",function(){var r=this;return new Promise(function(t,a){r[Qf].destroy(null,function(n){if(n){a(n);return}t(cu(void 0,!0))})})}),Db),wOe),TOe=function(r){var t,a=Object.create(AOe,(t={},uu(t,Qf,{value:r,writable:!0}),uu(t,fu,{value:null,writable:!0}),uu(t,Jf,{value:null,writable:!0}),uu(t,z2,{value:null,writable:!0}),uu(t,Eb,{value:r._readableState.endEmitted,writable:!0}),uu(t,ZT,{value:function(i,o){var l=a[Qf].read();l?(a[Kf]=null,a[fu]=null,a[Jf]=null,i(cu(l,!1))):(a[fu]=i,a[Jf]=o)},writable:!0}),t));return a[Kf]=null,gOe(r,function(n){if(n&&n.code!=="ERR_STREAM_PREMATURE_CLOSE"){var i=a[Jf];i!==null&&(a[Kf]=null,a[fu]=null,a[Jf]=null,i(n)),a[z2]=n;return}var o=a[fu];o!==null&&(a[Kf]=null,a[fu]=null,a[Jf]=null,o(cu(void 0,!0))),a[Eb]=!0}),r.on("readable",xOe.bind(null,a)),a};Ene.exports=TOe});var Fne=z((htr,Rne)=>{Rne.exports=function(){throw new Error("Readable.from is not available in the browser")}});var YT=z((ptr,Vne)=>{"use strict";Vne.exports=Tt;var kv;Tt.ReadableState=Bne;var dtr=Wu().EventEmitter,Ine=function(r,t){return r.listeners(t).length},I2=GA(),Pb=hv().Buffer,MOe=(typeof window!="undefined"||typeof window!="undefined"?window:typeof self!="undefined"?self:{}).Uint8Array||function(){};function kOe(e){return Pb.from(e)}function SOe(e){return Pb.isBuffer(e)||e instanceof MOe}var $T=PT(),nt;$T&&$T.debuglog?nt=$T.debuglog("stream"):nt=function(){};var qOe=lne(),aM=zT(),LOe=NT(),COe=LOe.getHighWaterMark,Rb=Xf().codes,DOe=Rb.ERR_INVALID_ARG_TYPE,EOe=Rb.ERR_STREAM_PUSH_AFTER_EOF,POe=Rb.ERR_METHOD_NOT_IMPLEMENTED,ROe=Rb.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Sv,JT,KT;ss()(Tt,I2);var N2=aM.errorOrDestroy,QT=["error","close","destroy","pause","resume"];function FOe(e,r,t){if(typeof e.prependListener=="function")return e.prependListener(r,t);!e._events||!e._events[r]?e.on(r,t):Array.isArray(e._events[r])?e._events[r].unshift(t):e._events[r]=[t,e._events[r]]}function Bne(e,r,t){kv=kv||Zf(),e=e||{},typeof t!="boolean"&&(t=r instanceof kv),this.objectMode=!!e.objectMode,t&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=COe(this,e,"readableHighWaterMark",t),this.buffer=new qOe,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(Sv||(Sv=XT().StringDecoder),this.decoder=new Sv(e.encoding),this.encoding=e.encoding)}function Tt(e){if(kv=kv||Zf(),!(this instanceof Tt))return new Tt(e);var r=this instanceof kv;this._readableState=new Bne(e,this,r),this.readable=!0,e&&(typeof e.read=="function"&&(this._read=e.read),typeof e.destroy=="function"&&(this._destroy=e.destroy)),I2.call(this)}Object.defineProperty(Tt.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(r){this._readableState&&(this._readableState.destroyed=r)}});Tt.prototype.destroy=aM.destroy;Tt.prototype._undestroy=aM.undestroy;Tt.prototype._destroy=function(e,r){r(e)};Tt.prototype.push=function(e,r){var t=this._readableState,a;return t.objectMode?a=!0:typeof e=="string"&&(r=r||t.defaultEncoding,r!==t.encoding&&(e=Pb.from(e,r),r=""),a=!0),One(this,e,r,!1,a)};Tt.prototype.unshift=function(e){return One(this,e,null,!0,!1)};function One(e,r,t,a,n){nt("readableAddChunk",r);var i=e._readableState;if(r===null)i.reading=!1,IOe(e,i);else{var o;if(n||(o=zOe(i,r)),o)N2(e,o);else if(i.objectMode||r&&r.length>0)if(typeof r!="string"&&!i.objectMode&&Object.getPrototypeOf(r)!==Pb.prototype&&(r=kOe(r)),a)i.endEmitted?N2(e,new ROe):eM(e,i,r,!0);else if(i.ended)N2(e,new EOe);else{if(i.destroyed)return!1;i.reading=!1,i.decoder&&!t?(r=i.decoder.write(r),i.objectMode||r.length!==0?eM(e,i,r,!1):tM(e,i)):eM(e,i,r,!1)}else a||(i.reading=!1,tM(e,i))}return!i.ended&&(i.length=zne?e=zne:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function Nne(e,r){return e<=0||r.length===0&&r.ended?0:r.objectMode?1:e!==e?r.flowing&&r.length?r.buffer.head.data.length:r.length:(e>r.highWaterMark&&(r.highWaterMark=NOe(e)),e<=r.length?e:r.ended?r.length:(r.needReadable=!0,0))}Tt.prototype.read=function(e){nt("read",e),e=parseInt(e,10);var r=this._readableState,t=e;if(e!==0&&(r.emittedReadable=!1),e===0&&r.needReadable&&((r.highWaterMark!==0?r.length>=r.highWaterMark:r.length>0)||r.ended))return nt("read: emitReadable",r.length,r.ended),r.length===0&&r.ended?rM(this):Fb(this),null;if(e=Nne(e,r),e===0&&r.ended)return r.length===0&&rM(this),null;var a=r.needReadable;nt("need readable",a),(r.length===0||r.length-e0?n=Gne(e,r):n=null,n===null?(r.needReadable=r.length<=r.highWaterMark,e=0):(r.length-=e,r.awaitDrain=0),r.length===0&&(r.ended||(r.needReadable=!0),t!==e&&r.ended&&rM(this)),n!==null&&this.emit("data",n),n};function IOe(e,r){if(nt("onEofChunk"),!r.ended){if(r.decoder){var t=r.decoder.end();t&&t.length&&(r.buffer.push(t),r.length+=r.objectMode?1:t.length)}r.ended=!0,r.sync?Fb(e):(r.needReadable=!1,r.emittedReadable||(r.emittedReadable=!0,Hne(e)))}}function Fb(e){var r=e._readableState;nt("emitReadable",r.needReadable,r.emittedReadable),r.needReadable=!1,r.emittedReadable||(nt("emitReadable",r.flowing),r.emittedReadable=!0,process.nextTick(Hne,e))}function Hne(e){var r=e._readableState;nt("emitReadable_",r.destroyed,r.length,r.ended),!r.destroyed&&(r.length||r.ended)&&(e.emit("readable"),r.emittedReadable=!1),r.needReadable=!r.flowing&&!r.ended&&r.length<=r.highWaterMark,nM(e)}function tM(e,r){r.readingMore||(r.readingMore=!0,process.nextTick(BOe,e,r))}function BOe(e,r){for(;!r.reading&&!r.ended&&(r.length1&&Yne(a.pipes,e)!==-1)&&!u&&(nt("false write response, pause",a.awaitDrain),a.awaitDrain++),t.pause())}function v(m){nt("onerror",m),y(),e.removeListener("error",v),Ine(e,"error")===0&&N2(e,m)}FOe(e,"error",v);function d(){e.removeListener("finish",p),y()}e.once("close",d);function p(){nt("onfinish"),e.removeListener("close",d),y()}e.once("finish",p);function y(){nt("unpipe"),t.unpipe(e)}return e.emit("pipe",t),a.flowing||(nt("pipe resume"),t.resume()),e};function OOe(e){return function(){var t=e._readableState;nt("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Ine(e,"data")&&(t.flowing=!0,nM(e))}}Tt.prototype.unpipe=function(e){var r=this._readableState,t={hasUnpiped:!1};if(r.pipesCount===0)return this;if(r.pipesCount===1)return e&&e!==r.pipes?this:(e||(e=r.pipes),r.pipes=null,r.pipesCount=0,r.flowing=!1,e&&e.emit("unpipe",this,t),this);if(!e){var a=r.pipes,n=r.pipesCount;r.pipes=null,r.pipesCount=0,r.flowing=!1;for(var i=0;i0,a.flowing!==!1&&this.resume()):e==="readable"&&!a.endEmitted&&!a.readableListening&&(a.readableListening=a.needReadable=!0,a.flowing=!1,a.emittedReadable=!1,nt("on readable",a.length,a.reading),a.length?Fb(this):a.reading||process.nextTick(HOe,this)),t};Tt.prototype.addListener=Tt.prototype.on;Tt.prototype.removeListener=function(e,r){var t=I2.prototype.removeListener.call(this,e,r);return e==="readable"&&process.nextTick(Une,this),t};Tt.prototype.removeAllListeners=function(e){var r=I2.prototype.removeAllListeners.apply(this,arguments);return(e==="readable"||e===void 0)&&process.nextTick(Une,this),r};function Une(e){var r=e._readableState;r.readableListening=e.listenerCount("readable")>0,r.resumeScheduled&&!r.paused?r.flowing=!0:e.listenerCount("data")>0&&e.resume()}function HOe(e){nt("readable nexttick read 0"),e.read(0)}Tt.prototype.resume=function(){var e=this._readableState;return e.flowing||(nt("resume"),e.flowing=!e.readableListening,UOe(this,e)),e.paused=!1,this};function UOe(e,r){r.resumeScheduled||(r.resumeScheduled=!0,process.nextTick(GOe,e,r))}function GOe(e,r){nt("resume",r.reading),r.reading||e.read(0),r.resumeScheduled=!1,e.emit("resume"),nM(e),r.flowing&&!r.reading&&e.read(0)}Tt.prototype.pause=function(){return nt("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(nt("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function nM(e){var r=e._readableState;for(nt("flow",r.flowing);r.flowing&&e.read()!==null;);}Tt.prototype.wrap=function(e){var r=this,t=this._readableState,a=!1;e.on("end",function(){if(nt("wrapped end"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&r.push(o)}r.push(null)}),e.on("data",function(o){if(nt("wrapped data"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var l=r.push(o);l||(a=!0,e.pause())}});for(var n in e)this[n]===void 0&&typeof e[n]=="function"&&(this[n]=(function(l){return function(){return e[l].apply(e,arguments)}})(n));for(var i=0;i=r.length?(r.decoder?t=r.buffer.join(""):r.buffer.length===1?t=r.buffer.first():t=r.buffer.concat(r.length),r.buffer.clear()):t=r.buffer.consume(e,r.decoder),t}function rM(e){var r=e._readableState;nt("endReadable",r.endEmitted),r.endEmitted||(r.ended=!0,process.nextTick(YOe,r,e))}function YOe(e,r){if(nt("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&e.length===0&&(e.endEmitted=!0,r.readable=!1,r.emit("end"),e.autoDestroy)){var t=r._writableState;(!t||t.autoDestroy&&t.finished)&&r.destroy()}}typeof Symbol=="function"&&(Tt.from=function(e,r){return KT===void 0&&(KT=Fne()),KT(Tt,e,r)});function Yne(e,r){for(var t=0,a=e.length;t{"use strict";Wne.exports=fs;var zb=Xf().codes,VOe=zb.ERR_METHOD_NOT_IMPLEMENTED,jOe=zb.ERR_MULTIPLE_CALLBACK,WOe=zb.ERR_TRANSFORM_ALREADY_TRANSFORMING,XOe=zb.ERR_TRANSFORM_WITH_LENGTH_0,Nb=Zf();ss()(fs,Nb);function ZOe(e,r){var t=this._transformState;t.transforming=!1;var a=t.writecb;if(a===null)return this.emit("error",new jOe);t.writechunk=null,t.writecb=null,r!=null&&this.push(r),a(e);var n=this._readableState;n.reading=!1,(n.needReadable||n.length{"use strict";Zne.exports=B2;var Xne=iM();ss()(B2,Xne);function B2(e){if(!(this instanceof B2))return new B2(e);Xne.call(this,e)}B2.prototype._transform=function(e,r,t){t(null,e)}});var rie=z((gtr,eie)=>{"use strict";var oM;function JOe(e){var r=!1;return function(){r||(r=!0,e.apply(void 0,arguments))}}var Qne=Xf().codes,KOe=Qne.ERR_MISSING_ARGS,QOe=Qne.ERR_STREAM_DESTROYED;function Jne(e){if(e)throw e}function eHe(e){return e.setHeader&&typeof e.abort=="function"}function rHe(e,r,t,a){a=JOe(a);var n=!1;e.on("close",function(){n=!0}),oM===void 0&&(oM=Cb()),oM(e,{readable:r,writable:t},function(o){if(o)return a(o);n=!0,a()});var i=!1;return function(o){if(!n&&!i){if(i=!0,eHe(e))return e.abort();if(typeof e.destroy=="function")return e.destroy();a(o||new QOe("pipe"))}}}function Kne(e){e()}function tHe(e,r){return e.pipe(r)}function aHe(e){return!e.length||typeof e[e.length-1]!="function"?Jne:e.pop()}function nHe(){for(var e=arguments.length,r=new Array(e),t=0;t0;return rHe(o,s,u,function(f){n||(n=f),f&&i.forEach(Kne),!s&&(i.forEach(Kne),a(n))})});return r.reduce(tHe)}eie.exports=nHe});var aie=z((btr,tie)=>{tie.exports=go;var lM=Wu().EventEmitter,iHe=ss();iHe(go,lM);go.Readable=YT();go.Writable=HT();go.Duplex=Zf();go.Transform=iM();go.PassThrough=$ne();go.finished=Cb();go.pipeline=rie();go.Stream=go;function go(){lM.call(this)}go.prototype.pipe=function(e,r){var t=this;function a(f){e.writable&&e.write(f)===!1&&t.pause&&t.pause()}t.on("data",a);function n(){t.readable&&t.resume&&t.resume()}e.on("drain",n),!e._isStdio&&(!r||r.end!==!1)&&(t.on("end",o),t.on("close",l));var i=!1;function o(){i||(i=!0,e.end())}function l(){i||(i=!0,typeof e.destroy=="function"&&e.destroy())}function s(f){if(u(),lM.listenerCount(this,"error")===0)throw f}t.on("error",s),e.on("error",s);function u(){t.removeListener("data",a),e.removeListener("drain",n),t.removeListener("end",o),t.removeListener("close",l),t.removeListener("error",s),e.removeListener("error",s),t.removeListener("end",u),t.removeListener("close",u),e.removeListener("close",u)}return t.on("end",u),t.on("close",u),e.on("close",u),e.emit("pipe",t),e}});var Lv=z(vt=>{var nie=Object.getOwnPropertyDescriptors||function(r){for(var t=Object.keys(r),a={},n=0;n=n)return l;switch(l){case"%s":return String(a[t++]);case"%d":return Number(a[t++]);case"%j":try{return JSON.stringify(a[t++])}catch(s){return"[Circular]"}default:return l}}),o=a[t];t=3&&(t.depth=arguments[2]),arguments.length>=4&&(t.colors=arguments[3]),cM(r)?t.showHidden=r:r&&vt._extend(t,r),rc(t.showHidden)&&(t.showHidden=!1),rc(t.depth)&&(t.depth=2),rc(t.colors)&&(t.colors=!1),rc(t.customInspect)&&(t.customInspect=!0),t.colors&&(t.stylize=lHe),Hb(t,e,t.depth)}vt.inspect=vu;vu.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};vu.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function lHe(e,r){var t=vu.styles[r];return t?"\x1B["+vu.colors[t][0]+"m"+e+"\x1B["+vu.colors[t][1]+"m":e}function sHe(e,r){return e}function uHe(e){var r={};return e.forEach(function(t,a){r[t]=!0}),r}function Hb(e,r,t){if(e.customInspect&&r&&Ob(r.inspect)&&r.inspect!==vt.inspect&&!(r.constructor&&r.constructor.prototype===r)){var a=r.inspect(t,e);return Yb(a)||(a=Hb(e,a,t)),a}var n=fHe(e,r);if(n)return n;var i=Object.keys(r),o=uHe(i);if(e.showHidden&&(i=Object.getOwnPropertyNames(r)),H2(r)&&(i.indexOf("message")>=0||i.indexOf("description")>=0))return sM(r);if(i.length===0){if(Ob(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(O2(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(Ub(r))return e.stylize(Date.prototype.toString.call(r),"date");if(H2(r))return sM(r)}var s="",u=!1,f=["{","}"];if(oie(r)&&(u=!0,f=["[","]"]),Ob(r)){var c=r.name?": "+r.name:"";s=" [Function"+c+"]"}if(O2(r)&&(s=" "+RegExp.prototype.toString.call(r)),Ub(r)&&(s=" "+Date.prototype.toUTCString.call(r)),H2(r)&&(s=" "+sM(r)),i.length===0&&(!u||r.length==0))return f[0]+s+f[1];if(t<0)return O2(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special");e.seen.push(r);var v;return u?v=cHe(e,r,t,o,i):v=i.map(function(d){return fM(e,r,t,o,d,u)}),e.seen.pop(),vHe(v,s,f)}function fHe(e,r){if(rc(r))return e.stylize("undefined","undefined");if(Yb(r)){var t="'"+JSON.stringify(r).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(t,"string")}if(lie(r))return e.stylize(""+r,"number");if(cM(r))return e.stylize(""+r,"boolean");if(Gb(r))return e.stylize("null","null")}function sM(e){return"["+Error.prototype.toString.call(e)+"]"}function cHe(e,r,t,a,n){for(var i=[],o=0,l=r.length;o-1&&(i?l=l.split(` +`).map(function(u){return" "+u}).join(` +`).slice(2):l=` +`+l.split(` +`).map(function(u){return" "+u}).join(` +`))):l=e.stylize("[Circular]","special")),rc(o)){if(i&&n.match(/^\d+$/))return l;o=JSON.stringify(""+n),o.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.slice(1,-1),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+l}function vHe(e,r,t){var a=0,n=e.reduce(function(i,o){return a++,o.indexOf(` +`)>=0&&a++,i+o.replace(/\u001b\[\d\d?m/g,"").length+1},0);return n>60?t[0]+(r===""?"":r+` + `)+" "+e.join(`, + `)+" "+t[1]:t[0]+r+" "+e.join(", ")+" "+t[1]}vt.types=kT();function oie(e){return Array.isArray(e)}vt.isArray=oie;function cM(e){return typeof e=="boolean"}vt.isBoolean=cM;function Gb(e){return e===null}vt.isNull=Gb;function hHe(e){return e==null}vt.isNullOrUndefined=hHe;function lie(e){return typeof e=="number"}vt.isNumber=lie;function Yb(e){return typeof e=="string"}vt.isString=Yb;function dHe(e){return typeof e=="symbol"}vt.isSymbol=dHe;function rc(e){return e===void 0}vt.isUndefined=rc;function O2(e){return qv(e)&&vM(e)==="[object RegExp]"}vt.isRegExp=O2;vt.types.isRegExp=O2;function qv(e){return typeof e=="object"&&e!==null}vt.isObject=qv;function Ub(e){return qv(e)&&vM(e)==="[object Date]"}vt.isDate=Ub;vt.types.isDate=Ub;function H2(e){return qv(e)&&(vM(e)==="[object Error]"||e instanceof Error)}vt.isError=H2;vt.types.isNativeError=H2;function Ob(e){return typeof e=="function"}vt.isFunction=Ob;function pHe(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"||typeof e=="symbol"||typeof e=="undefined"}vt.isPrimitive=pHe;vt.isBuffer=ST();function vM(e){return Object.prototype.toString.call(e)}function uM(e){return e<10?"0"+e.toString(10):e.toString(10)}var mHe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function yHe(){var e=new Date,r=[uM(e.getHours()),uM(e.getMinutes()),uM(e.getSeconds())].join(":");return[e.getDate(),mHe[e.getMonth()],r].join(" ")}vt.log=function(){console.log("%s - %s",yHe(),vt.format.apply(vt,arguments))};vt.inherits=ss();vt._extend=function(e,r){if(!r||!qv(r))return e;for(var t=Object.keys(r),a=t.length;a--;)e[t[a]]=r[t[a]];return e};function sie(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var ec=typeof Symbol!="undefined"?Symbol("util.promisify.custom"):void 0;vt.promisify=function(r){if(typeof r!="function")throw new TypeError('The "original" argument must be of type Function');if(ec&&r[ec]){var t=r[ec];if(typeof t!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,ec,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var a,n,i=new Promise(function(s,u){a=s,n=u}),o=[],l=0;l{"use strict";function hu(e){"@babel/helpers - typeof";return hu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},hu(e)}function uie(e,r){for(var t=0;t2?"one of ".concat(r," ").concat(e.slice(0,t-1).join(", "),", or ")+e[t-1]:t===2?"one of ".concat(r," ").concat(e[0]," or ").concat(e[1]):"of ".concat(r," ").concat(e[0])}else return"of ".concat(r," ").concat(String(e))}function LHe(e,r,t){return e.substr(!t||t<0?0:+t,r.length)===r}function CHe(e,r,t){return(t===void 0||t>e.length)&&(t=e.length),e.substring(t-r.length,t)===r}function DHe(e,r,t){return typeof t!="number"&&(t=0),t+r.length>e.length?!1:e.indexOf(r,t)!==-1}U2("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError);U2("ERR_INVALID_ARG_TYPE",function(e,r,t){Cv===void 0&&(Cv=jb()),Cv(typeof e=="string","'name' must be a string");var a;typeof r=="string"&&LHe(r,"not ")?(a="must not be",r=r.replace(/^not /,"")):a="must be";var n;if(CHe(e," argument"))n="The ".concat(e," ").concat(a," ").concat(fie(r,"type"));else{var i=DHe(e,".")?"property":"argument";n='The "'.concat(e,'" ').concat(i," ").concat(a," ").concat(fie(r,"type"))}return n+=". Received type ".concat(hu(t)),n},TypeError);U2("ERR_INVALID_ARG_VALUE",function(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"is invalid";hM===void 0&&(hM=Lv());var a=hM.inspect(r);return a.length>128&&(a="".concat(a.slice(0,128),"...")),"The argument '".concat(e,"' ").concat(t,". Received ").concat(a)},TypeError,RangeError);U2("ERR_INVALID_RETURN_VALUE",function(e,r,t){var a;return t&&t.constructor&&t.constructor.name?a="instance of ".concat(t.constructor.name):a="type ".concat(hu(t)),"Expected ".concat(e,' to be returned from the "').concat(r,'"')+" function but got ".concat(a,".")},TypeError);U2("ERR_MISSING_ARGS",function(){for(var e=arguments.length,r=new Array(e),t=0;t0,"At least one arg needs to be specified");var a="The ",n=r.length;switch(r=r.map(function(i){return'"'.concat(i,'"')}),n){case 1:a+="".concat(r[0]," argument");break;case 2:a+="".concat(r[0]," and ").concat(r[1]," arguments");break;default:a+=r.slice(0,n-1).join(", "),a+=", and ".concat(r[n-1]," arguments");break}return"".concat(a," must be specified")},TypeError);vie.exports.codes=cie});var wie=z((wtr,_ie)=>{"use strict";function hie(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,a)}return t}function die(e){for(var r=1;re.length)&&(t=e.length),e.substring(t-r.length,t)===r}function UHe(e,r){if(r=Math.floor(r),e.length==0||r==0)return"";var t=e.length*r;for(r=Math.floor(Math.log(r)/Math.log(2));r;)e+=e,r--;return e+=e.substring(0,t-e.length),e}var $o="",G2="",Y2="",bn="",tc={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"},GHe=10;function yie(e){var r=Object.keys(e),t=Object.create(Object.getPrototypeOf(e));return r.forEach(function(a){t[a]=e[a]}),Object.defineProperty(t,"message",{value:e.message}),t}function V2(e){return gM(e,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}function YHe(e,r,t){var a="",n="",i=0,o="",l=!1,s=V2(e),u=s.split(` +`),f=V2(r).split(` +`),c=0,v="";if(t==="strictEqual"&&ui(e)==="object"&&ui(r)==="object"&&e!==null&&r!==null&&(t="strictEqualObject"),u.length===1&&f.length===1&&u[0]!==f[0]){var d=u[0].length+f[0].length;if(d<=GHe){if((ui(e)!=="object"||e===null)&&(ui(r)!=="object"||r===null)&&(e!==0||r!==0))return"".concat(tc[t],` + +`)+"".concat(u[0]," !== ").concat(f[0],` +`)}else if(t!=="strictEqualObject"){var p=process.stderr&&process.stderr.isTTY?process.stderr.columns:80;if(d2&&(v=` + `.concat(UHe(" ",c),"^"),c=0)}}}for(var y=u[u.length-1],m=f[f.length-1];y===m&&(c++<2?o=` + `.concat(y).concat(o):a=y,u.pop(),f.pop(),!(u.length===0||f.length===0));)y=u[u.length-1],m=f[f.length-1];var b=Math.max(u.length,f.length);if(b===0){var A=s.split(` +`);if(A.length>30)for(A[26]="".concat($o,"...").concat(bn);A.length>27;)A.pop();return"".concat(tc.notIdentical,` + +`).concat(A.join(` +`),` +`)}c>3&&(o=` +`.concat($o,"...").concat(bn).concat(o),l=!0),a!==""&&(o=` + `.concat(a).concat(o),a="");var w=0,x=tc[t]+` +`.concat(G2,"+ actual").concat(bn," ").concat(Y2,"- expected").concat(bn),_=" ".concat($o,"...").concat(bn," Lines skipped");for(c=0;c1&&c>2&&(k>4?(n+=` +`.concat($o,"...").concat(bn),l=!0):k>3&&(n+=` + `.concat(f[c-2]),w++),n+=` + `.concat(f[c-1]),w++),i=c,a+=` +`.concat(Y2,"-").concat(bn," ").concat(f[c]),w++;else if(f.length1&&c>2&&(k>4?(n+=` +`.concat($o,"...").concat(bn),l=!0):k>3&&(n+=` + `.concat(u[c-2]),w++),n+=` + `.concat(u[c-1]),w++),i=c,n+=` +`.concat(G2,"+").concat(bn," ").concat(u[c]),w++;else{var T=f[c],q=u[c],C=q!==T&&(!mie(q,",")||q.slice(0,-1)!==T);C&&mie(T,",")&&T.slice(0,-1)===q&&(C=!1,q+=","),C?(k>1&&c>2&&(k>4?(n+=` +`.concat($o,"...").concat(bn),l=!0):k>3&&(n+=` + `.concat(u[c-2]),w++),n+=` + `.concat(u[c-1]),w++),i=c,n+=` +`.concat(G2,"+").concat(bn," ").concat(q),a+=` +`.concat(Y2,"-").concat(bn," ").concat(T),w+=2):(n+=a,a="",(k===1||c===0)&&(n+=` + `.concat(q),w++))}if(w>20&&c30)for(d[26]="".concat($o,"...").concat(bn);d.length>27;)d.pop();d.length===1?i=t.call(this,"".concat(v," ").concat(d[0])):i=t.call(this,"".concat(v,` + +`).concat(d.join(` +`),` +`))}else{var p=V2(u),y="",m=tc[l];l==="notDeepEqual"||l==="notEqual"?(p="".concat(tc[l],` + +`).concat(p),p.length>1024&&(p="".concat(p.slice(0,1021),"..."))):(y="".concat(V2(f)),p.length>512&&(p="".concat(p.slice(0,509),"...")),y.length>512&&(y="".concat(y.slice(0,509),"...")),l==="deepEqual"||l==="equal"?p="".concat(m,` + +`).concat(p,` + +should equal + +`):y=" ".concat(l," ").concat(y)),i=t.call(this,"".concat(p).concat(y))}return Error.stackTraceLimit=c,i.generatedMessage=!o,Object.defineProperty(mM(i),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),i.code="ERR_ASSERTION",i.actual=u,i.expected=f,i.operator=l,Error.captureStackTrace&&Error.captureStackTrace(mM(i),s),i.stack,i.name="AssertionError",bie(i)}return RHe(a,[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:r,value:function(i,o){return gM(this,die(die({},o),{},{customInspect:!1,depth:0}))}}]),a})(yM(Error),gM.custom);_ie.exports=VHe});var bM=z((Atr,Tie)=>{"use strict";var Aie=Object.prototype.toString;Tie.exports=function(r){var t=Aie.call(r),a=t==="[object Arguments]";return a||(a=t!=="[object Array]"&&r!==null&&typeof r=="object"&&typeof r.length=="number"&&r.length>=0&&Aie.call(r.callee)==="[object Function]"),a}});var Pie=z((Ttr,Eie)=>{"use strict";var Die;Object.keys||(X2=Object.prototype.hasOwnProperty,xM=Object.prototype.toString,Mie=bM(),_M=Object.prototype.propertyIsEnumerable,kie=!_M.call({toString:null},"toString"),Sie=_M.call(function(){},"prototype"),Z2=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Xb=function(e){var r=e.constructor;return r&&r.prototype===e},qie={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},Lie=(function(){if(typeof window=="undefined")return!1;for(var e in window)try{if(!qie["$"+e]&&X2.call(window,e)&&window[e]!==null&&typeof window[e]=="object")try{Xb(window[e])}catch(r){return!0}}catch(r){return!0}return!1})(),Cie=function(e){if(typeof window=="undefined"||!Lie)return Xb(e);try{return Xb(e)}catch(r){return!1}},Die=function(r){var t=r!==null&&typeof r=="object",a=xM.call(r)==="[object Function]",n=Mie(r),i=t&&xM.call(r)==="[object String]",o=[];if(!t&&!a&&!n)throw new TypeError("Object.keys called on a non-object");var l=Sie&&a;if(i&&r.length>0&&!X2.call(r,0))for(var s=0;s0)for(var u=0;u{"use strict";var jHe=Array.prototype.slice,WHe=bM(),Rie=Object.keys,Zb=Rie?function(r){return Rie(r)}:Pie(),Fie=Object.keys;Zb.shim=function(){if(Object.keys){var r=(function(){var t=Object.keys(arguments);return t&&t.length===arguments.length})(1,2);r||(Object.keys=function(a){return WHe(a)?Fie(jHe.call(a)):Fie(a)})}else Object.keys=Zb;return Object.keys||Zb};zie.exports=Zb});var Hie=z((ktr,Oie)=>{"use strict";var XHe=wM(),Iie=V3()(),Bie=Vf(),$b=j3(),ZHe=Bie("Array.prototype.push"),Nie=Bie("Object.prototype.propertyIsEnumerable"),$He=Iie?$b.getOwnPropertySymbols:null;Oie.exports=function(r,t){if(r==null)throw new TypeError("target must be an object");var a=$b(r);if(arguments.length===1)return a;for(var n=1;n{"use strict";var AM=Hie(),JHe=function(){if(!Object.assign)return!1;for(var e="abcdefghijklmnopqrst",r=e.split(""),t={},a=0;a{"use strict";var Yie=function(e){return e!==e};Vie.exports=function(r,t){return r===0&&t===0?1/r===1/t:!!(r===t||Yie(r)&&Yie(t))}});var Jb=z((Ltr,jie)=>{"use strict";var QHe=TM();jie.exports=function(){return typeof Object.is=="function"?Object.is:QHe}});var $ie=z((Ctr,Zie)=>{"use strict";var Wie=rb(),Xie=q2(),eUe=Xie(Wie("String.prototype.indexOf"));Zie.exports=function(r,t){var a=Wie(r,!!t);return typeof a=="function"&&eUe(r,".prototype.")>-1?Xie(a):a}});var $2=z((Dtr,eoe)=>{"use strict";var rUe=wM(),tUe=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",aUe=Object.prototype.toString,nUe=Array.prototype.concat,Jie=yT(),iUe=function(e){return typeof e=="function"&&aUe.call(e)==="[object Function]"},Kie=bT()(),oUe=function(e,r,t,a){if(r in e){if(a===!0){if(e[r]===t)return}else if(!iUe(a)||!a())return}Kie?Jie(e,r,t,!0):Jie(e,r,t)},Qie=function(e,r){var t=arguments.length>2?arguments[2]:{},a=rUe(r);tUe&&(a=nUe.call(a,Object.getOwnPropertySymbols(r)));for(var n=0;n{"use strict";var lUe=Jb(),sUe=$2();roe.exports=function(){var r=lUe();return sUe(Object,{is:r},{is:function(){return Object.is!==r}}),r}});var ooe=z((Ptr,ioe)=>{"use strict";var uUe=$2(),fUe=q2(),cUe=TM(),aoe=Jb(),vUe=toe(),noe=fUe(aoe(),Object);uUe(noe,{getPolyfill:aoe,implementation:cUe,shim:vUe});ioe.exports=noe});var MM=z((Rtr,loe)=>{"use strict";loe.exports=function(r){return r!==r}});var kM=z((Ftr,soe)=>{"use strict";var hUe=MM();soe.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:hUe}});var foe=z((ztr,uoe)=>{"use strict";var dUe=$2(),pUe=kM();uoe.exports=function(){var r=pUe();return dUe(Number,{isNaN:r},{isNaN:function(){return Number.isNaN!==r}}),r}});var doe=z((Ntr,hoe)=>{"use strict";var mUe=q2(),yUe=$2(),gUe=MM(),coe=kM(),bUe=foe(),voe=mUe(coe(),Number);yUe(voe,{getPolyfill:coe,implementation:gUe,shim:bUe});hoe.exports=voe});var Roe=z((Itr,Poe)=>{"use strict";function poe(e,r){return AUe(e)||wUe(e,r)||_Ue(e,r)||xUe()}function xUe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _Ue(e,r){if(e){if(typeof e=="string")return moe(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);if(t==="Object"&&e.constructor&&(t=e.constructor.name),t==="Map"||t==="Set")return Array.from(e);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return moe(e,r)}}function moe(e,r){(r==null||r>e.length)&&(r=e.length);for(var t=0,a=new Array(r);t10)return!0;for(var r=0;r57)return!0}return e.length===10&&e>=Math.pow(2,32)}function ex(e){return Object.keys(e).filter(EUe).concat(tx(e).filter(Object.prototype.propertyIsEnumerable.bind(e)))}function Loe(e,r){if(e===r)return 0;for(var t=e.length,a=r.length,n=0,i=Math.min(t,a);n{"use strict";function Jo(e){"@babel/helpers - typeof";return Jo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},Jo(e)}function Foe(e,r){for(var t=0;t1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n{var r1=1e3,t1=r1*60,a1=t1*60,n1=a1*24,nGe=n1*365.25;Qoe.exports=function(e,r){r=r||{};var t=typeof e;if(t==="string"&&e.length>0)return iGe(e);if(t==="number"&&isNaN(e)===!1)return r.long?lGe(e):oGe(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function iGe(e){if(e=String(e),!(e.length>100)){var r=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(r){var t=parseFloat(r[1]),a=(r[2]||"ms").toLowerCase();switch(a){case"years":case"year":case"yrs":case"yr":case"y":return t*nGe;case"days":case"day":case"d":return t*n1;case"hours":case"hour":case"hrs":case"hr":case"h":return t*a1;case"minutes":case"minute":case"mins":case"min":case"m":return t*t1;case"seconds":case"second":case"secs":case"sec":case"s":return t*r1;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function oGe(e){return e>=n1?Math.round(e/n1)+"d":e>=a1?Math.round(e/a1)+"h":e>=t1?Math.round(e/t1)+"m":e>=r1?Math.round(e/r1)+"s":e+"ms"}function lGe(e){return fx(e,n1,"day")||fx(e,a1,"hour")||fx(e,t1,"minute")||fx(e,r1,"second")||e+" ms"}function fx(e,r,t){if(!(e{zt=rle.exports=PM.debug=PM.default=PM;zt.coerce=vGe;zt.disable=fGe;zt.enable=uGe;zt.enabled=cGe;zt.humanize=ele();zt.names=[];zt.skips=[];zt.formatters={};var EM;function sGe(e){var r=0,t;for(t in e)r=(r<<5)-r+e.charCodeAt(t),r|=0;return zt.colors[Math.abs(r)%zt.colors.length]}function PM(e){function r(){if(r.enabled){var t=r,a=+new Date,n=a-(EM||a);t.diff=n,t.prev=EM,t.curr=a,EM=a;for(var i=new Array(arguments.length),o=0;o{jn=nle.exports=tle();jn.log=pGe;jn.formatArgs=dGe;jn.save=mGe;jn.load=ale;jn.useColors=hGe;jn.storage=typeof chrome!="undefined"&&typeof chrome.storage!="undefined"?chrome.storage.local:yGe();jn.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];function hGe(){return typeof window!="undefined"&&window.process&&window.process.type==="renderer"?!0:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}jn.formatters.j=function(e){try{return JSON.stringify(e)}catch(r){return"[UnexpectedJSONParseError]: "+r.message}};function dGe(e){var r=this.useColors;if(e[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+e[0]+(r?"%c ":" ")+"+"+jn.humanize(this.diff),!!r){var t="color: "+this.color;e.splice(1,0,t,"color: inherit");var a=0,n=0;e[0].replace(/%[a-zA-Z%]/g,function(i){i!=="%%"&&(a++,i==="%c"&&(n=a))}),e.splice(n,0,t)}}function pGe(){return typeof console=="object"&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function mGe(e){try{e==null?jn.storage.removeItem("debug"):jn.storage.debug=e}catch(r){}}function ale(){var e;try{e=jn.storage.debug}catch(r){}return!e&&typeof process!="undefined"&&"env"in process&&(e=process.env.DEBUG),e}jn.enable(ale());function yGe(){try{return window.localStorage}catch(e){}}});var hle=z((Htr,vle)=>{var Ev=jb(),yu=ile()("stream-parser");vle.exports=bGe;var lle=-1,cx=0,gGe=1,sle=2;function bGe(e){var r=e&&typeof e._transform=="function",t=e&&typeof e._write=="function";if(!r&&!t)throw new Error("must pass a Writable or Transform stream in");yu("extending Parser into stream"),e._bytes=xGe,e._skipBytes=_Ge,r&&(e._passthrough=wGe),r?e._transform=TGe:e._write=AGe}function i1(e){yu("initializing parser stream"),e._parserBytesLeft=0,e._parserBuffers=[],e._parserBuffered=0,e._parserState=lle,e._parserCallback=null,typeof e.push=="function"&&(e._parserOutput=e.push.bind(e)),e._parserInit=!0}function xGe(e,r){Ev(!this._parserCallback,'there is already a "callback" set!'),Ev(isFinite(e)&&e>0,'can only buffer a finite number of bytes > 0, got "'+e+'"'),this._parserInit||i1(this),yu("buffering %o bytes",e),this._parserBytesLeft=e,this._parserCallback=r,this._parserState=cx}function _Ge(e,r){Ev(!this._parserCallback,'there is already a "callback" set!'),Ev(e>0,'can only skip > 0 bytes, got "'+e+'"'),this._parserInit||i1(this),yu("skipping %o bytes",e),this._parserBytesLeft=e,this._parserCallback=r,this._parserState=gGe}function wGe(e,r){Ev(!this._parserCallback,'There is already a "callback" set!'),Ev(e>0,'can only pass through > 0 bytes, got "'+e+'"'),this._parserInit||i1(this),yu("passing through %o bytes",e),this._parserBytesLeft=e,this._parserCallback=r,this._parserState=sle}function AGe(e,r,t){this._parserInit||i1(this),yu("write(%o bytes)",e.length),typeof r=="function"&&(t=r),fle(this,e,null,t)}function TGe(e,r,t){this._parserInit||i1(this),yu("transform(%o bytes)",e.length),typeof r!="function"&&(r=this._parserOutput),fle(this,e,r,t)}function ule(e,r,t,a){return e._parserBytesLeft<=0?a(new Error("got data but not currently parsing anything")):r.length<=e._parserBytesLeft?function(){return ole(e,r,t,a)}:function(){var n=r.slice(0,e._parserBytesLeft);return ole(e,n,t,function(i){if(i)return a(i);if(r.length>n.length)return function(){return ule(e,r.slice(n.length),t,a)}})}}function ole(e,r,t,a){if(e._parserBytesLeft-=r.length,yu("%o bytes left for stream piece",e._parserBytesLeft),e._parserState===cx?(e._parserBuffers.push(r),e._parserBuffered+=r.length):e._parserState===sle&&t(r),e._parserBytesLeft===0){var n=e._parserCallback;if(n&&e._parserState===cx&&e._parserBuffers.length>1&&(r=Buffer.concat(e._parserBuffers,e._parserBuffered)),e._parserState!==cx&&(r=null),e._parserCallback=null,e._parserBuffered=0,e._parserState=lle,e._parserBuffers.splice(0),n){var i=[];r&&i.push(r),t&&i.push(t);var o=n.length>i.length;o&&i.push(cle(a));var l=n.apply(e,i);if(!o||a===l)return a}}else return a}var fle=cle(ule);function cle(e){return function(){for(var r=e.apply(this,arguments);typeof r=="function";)r=r();return r}}});var dle=z(Ei=>{"use strict";Ei.readUInt16LE=function(e,r){return e[r]|e[r+1]<<8};Ei.readUInt16BE=function(e,r){return e[r]<<8|e[r+1]};Ei.readInt16LE=function(e,r){return Ei.readUInt16LE(e,r)<<16>>16};Ei.readInt16BE=function(e,r){return Ei.readUInt16BE(e,r)<<16>>16};Ei.readUInt32LE=function(e,r){return(e[r]|e[r+1]<<8|e[r+2]<<16)+e[r+3]*16777216};Ei.readUInt32BE=function(e,r){return e[r]*16777216+(e[r+1]<<16|e[r+2]<<8|e[r+3])};Ei.readInt32LE=function(e,r){return Ei.readUInt32LE(e,r)|0};Ei.readInt32BE=function(e,r){return Ei.readUInt32BE(e,r)|0}});var _t=z(Pi=>{"use strict";var ple=aie().Transform,MGe=hle(),gu=dle();function o1(){ple.call(this,{readableObjectMode:!0})}o1.prototype=Object.create(ple.prototype);o1.prototype.constructor=o1;MGe(o1.prototype);Pi.ParserStream=o1;Pi.sliceEq=function(e,r,t){for(var a=r,n=0;n{"use strict";var Pv=_t().readUInt16BE,FM=_t().readUInt32BE;function l1(e,r){if(e.length<4+r)return null;var t=FM(e,r);return e.length>4&15,a=e[4]&15,n=e[5]>>4&15,i=Pv(e,6),o=8,l=0;li.width||n.width===i.width&&n.height>i.height?n:i}),t=e.reduce(function(n,i){return n.height>i.height||n.height===i.height&&n.width>i.width?n:i}),a;return r.width>t.height||r.width===t.height&&r.height>t.width?a=r:a=t,a}hx.exports.readSizeFromMeta=function(e){var r={sizes:[],transforms:[],item_inf:{},item_loc:{}};if(CGe(e,r),!!r.sizes.length){var t=DGe(r.sizes),a=1;r.transforms.forEach(function(i){var o={1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},l={1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if(i.type==="imir"&&(i.value===0?a=l[a]:(a=l[a],a=o[a],a=o[a])),i.type==="irot")for(var s=0;s{"use strict";function dx(e,r){var t=new Error(e);return t.code=r,t}function EGe(e){try{return decodeURIComponent(escape(e))}catch(r){return e}}function cs(e,r,t){this.input=e.subarray(r,t),this.start=r;var a=String.fromCharCode.apply(null,this.input.subarray(0,4));if(a!=="II*\0"&&a!=="MM\0*")throw dx("invalid TIFF signature","EBADDATA");this.big_endian=a[0]==="M"}cs.prototype.each=function(e){this.aborted=!1;var r=this.read_uint32(4);for(this.ifds_to_read=[{id:0,offset:r}];this.ifds_to_read.length>0&&!this.aborted;){var t=this.ifds_to_read.shift();t.offset&&this.scan_ifd(t.id,t.offset,e)}};cs.prototype.read_uint16=function(e){var r=this.input;if(e+2>r.length)throw dx("unexpected EOF","EBADDATA");return this.big_endian?r[e]*256+r[e+1]:r[e]+r[e+1]*256};cs.prototype.read_uint32=function(e){var r=this.input;if(e+4>r.length)throw dx("unexpected EOF","EBADDATA");return this.big_endian?r[e]*16777216+r[e+1]*65536+r[e+2]*256+r[e+3]:r[e]+r[e+1]*256+r[e+2]*65536+r[e+3]*16777216};cs.prototype.is_subifd_link=function(e,r){return e===0&&r===34665||e===0&&r===34853||e===34665&&r===40965};cs.prototype.exif_format_length=function(e){switch(e){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}};cs.prototype.exif_format_read=function(e,r){var t;switch(e){case 1:case 2:return t=this.input[r],t;case 6:return t=this.input[r],t|(t&128)*33554430;case 3:return t=this.read_uint16(r),t;case 8:return t=this.read_uint16(r),t|(t&32768)*131070;case 4:return t=this.read_uint32(r),t;case 9:return t=this.read_uint32(r),t|0;case 5:case 10:case 11:case 12:return null;case 7:return null;default:return null}};cs.prototype.scan_ifd=function(e,r,t){var a=this.read_uint16(r);r+=2;for(var n=0;nthis.input.length)throw dx("unexpected EOF","EBADDATA");for(var v=[],d=f,p=0;p0&&(this.ifds_to_read.push({id:i,offset:v[0]}),c=!0);var m={is_big_endian:this.big_endian,ifd:e,tag:i,format:o,count:l,entry_offset:r+this.start,data_length:u,data_offset:f+this.start,value:v,is_subifd_link:c};if(t(m)===!1){this.aborted=!0;return}r+=12}e===0&&this.ifds_to_read.push({id:1,offset:this.read_uint32(r)})};zM.exports.ExifParser=cs;zM.exports.get_orientation=function(e){var r=0;try{return new cs(e,0,e.length).each(function(t){if(t.ifd===0&&t.tag===274&&Array.isArray(t.value))return r=t.value[0],!1}),r}catch(t){return-1}}});var gle=z((jtr,yle)=>{"use strict";var PGe=_t().str2arr,RGe=_t().sliceEq,FGe=_t().readUInt32BE,mx=mle(),zGe=px(),NGe=PGe("ftyp");yle.exports=function(e){if(RGe(e,4,NGe)){var r=mx.unbox(e,0);if(r){var t=mx.getMimeType(r.data);if(t){for(var a,n=r.end;;){var i=mx.unbox(e,n);if(!i)break;if(n=i.end,i.boxtype==="mdat")return;if(i.boxtype==="meta"){a=i.data;break}}if(a){var o=mx.readSizeFromMeta(a);if(o){var l={width:o.width,height:o.height,type:t.type,mime:t.mime,wUnits:"px",hUnits:"px"};if(o.variants.length>1&&(l.variants=o.variants),o.orientation&&(l.orientation=o.orientation),o.exif_location&&o.exif_location.offset+o.exif_location.length<=e.length){var s=FGe(e,o.exif_location.offset),u=e.slice(o.exif_location.offset+s+4,o.exif_location.offset+o.exif_location.length),f=zGe.get_orientation(u);f>0&&(l.orientation=f)}return l}}}}}}});var wle=z((Wtr,_le)=>{"use strict";var IGe=_t().str2arr,BGe=_t().sliceEq,ble=_t().readInt16LE,xle=_t().readInt32LE,OGe=_t().readUInt32LE,HGe=IGe("BM");_le.exports=function(e){if(!(e.length<26)&&BGe(e,0,HGe)){var r,t,a=OGe(e,14);if(a===12)t=ble(e,18),r=ble(e,20);else if(a>12)t=xle(e,18),r=xle(e,22);else return;return{width:t,height:Math.abs(r),type:"bmp",mime:"image/bmp",wUnits:"px",hUnits:"px"}}}});var Sle=z((Xtr,kle)=>{"use strict";var Mle=_t().str2arr,Ale=_t().sliceEq,Tle=_t().readUInt16LE,UGe=Mle("GIF87a"),GGe=Mle("GIF89a");kle.exports=function(e){if(!(e.length<10)&&!(!Ale(e,0,UGe)&&!Ale(e,0,GGe)))return{width:Tle(e,6),height:Tle(e,8),type:"gif",mime:"image/gif",wUnits:"px",hUnits:"px"}}});var Lle=z((Ztr,qle)=>{"use strict";var NM=_t().readUInt16LE,YGe=0,VGe=1,IM=16;qle.exports=function(e){var r=NM(e,0),t=NM(e,2),a=NM(e,4);if(!(r!==YGe||t!==VGe||!a)&&!(e.length<6+a*IM)){for(var n=[],i={width:0,height:0},o=0;oi.width||s>i.height)&&(i=u)}return{width:i.width,height:i.height,variants:n,type:"ico",mime:"image/x-icon",wUnits:"px",hUnits:"px"}}}});var Dle=z(($tr,Cle)=>{"use strict";var BM=_t().readUInt16BE,jGe=_t().str2arr,WGe=_t().sliceEq,XGe=px(),ZGe=jGe("Exif\0\0");Cle.exports=function(e){if(!(e.length<2)&&!(e[0]!==255||e[1]!==216||e[2]!==255))for(var r=2;;){for(;;){if(e.length-r<2)return;if(e[r++]===255)break}for(var t=e[r++],a;t===255;)t=e[r++];if(t>=208&&t<=217||t===1)a=0;else if(t>=192&&t<=254){if(e.length-r<2)return;a=BM(e,r)-2,r+=2}else return;if(t===217||t===218)return;var n;if(t===225&&a>=10&&WGe(e,r,ZGe)&&(n=XGe.get_orientation(e.slice(r+6,r+a))),a>=5&&t>=192&&t<=207&&t!==196&&t!==200&&t!==204){if(e.length-r0&&(i.orientation=n),i}r+=a}}});var zle=z((Jtr,Fle)=>{"use strict";var Rle=_t().str2arr,Ele=_t().sliceEq,Ple=_t().readUInt32BE,$Ge=Rle(`\x89PNG\r + +`),JGe=Rle("IHDR");Fle.exports=function(e){if(!(e.length<24)&&Ele(e,0,$Ge)&&Ele(e,12,JGe))return{width:Ple(e,16),height:Ple(e,20),type:"png",mime:"image/png",wUnits:"px",hUnits:"px"}}});var Ble=z((Ktr,Ile)=>{"use strict";var KGe=_t().str2arr,QGe=_t().sliceEq,Nle=_t().readUInt32BE,eYe=KGe("8BPS\0");Ile.exports=function(e){if(!(e.length<22)&&QGe(e,0,eYe))return{width:Nle(e,18),height:Nle(e,14),type:"psd",mime:"image/vnd.adobe.photoshop",wUnits:"px",hUnits:"px"}}});var UM=z(HM=>{"use strict";HM.MAX_DATA_LENGTH=1024*10;var OM="[a-zA-Z_:][a-zA-Z0-9:._-]*",Hle="[^\"'=<>`\\x00-\\x20]+",rYe="'[^']*'",tYe='"[^"]*"',aYe="(?:"+Hle+"|"+rYe+"|"+tYe+")",nYe="(?:\\s+"+OM+"(?:\\s*=\\s*"+aYe+")?)",iYe="<[?][\\s\\S]*?[?]>",oYe="",lYe="",sYe="]*(?:\\[[\\s\\S]*?\\][^>]*)?>",uYe=new RegExp("^(?:\\s+|"+iYe+"|"+oYe+"|"+lYe+"|"+sYe+")*"),fYe=new RegExp("^<("+OM+")("+nYe+"*)\\s*/?>"),Ole=new RegExp("\\s+("+OM+")(?:\\s*=\\s*(?:("+Hle+`)|'([^']*)'|"([^"]*)"))?`,"g"),cYe=/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function Rv(e){return typeof e=="number"&&isFinite(e)&&e>0}function Pl(e){var r=e.slice(-2),t=r.match(cYe);return t===null?"px":t[0]}HM.parse=function(e){var r=e.match(uYe)[0],t=fYe.exec(r.length?e.slice(r.length):e);if(t){var a=t[1];if(!(a!=="svg"&&a.slice(-4)!==":svg")){var n={},i;for(Ole.lastIndex=0;(i=Ole.exec(t[2]))!==null;)n[i[1]]=i[2]!==void 0?i[2]:i[3]!==void 0?i[3]:i[4];var o=n.width,l=n.height,s=n.viewBox||n.viewbox;o&&o.indexOf("%")!==-1&&(o=void 0),l&&l.indexOf("%")!==-1&&(l=void 0);var u=parseFloat(o),f=parseFloat(l);if(o&&l)return!Rv(u)||!Rv(f)?void 0:{width:u,height:f,type:"svg",mime:"image/svg+xml",wUnits:Pl(o),hUnits:Pl(l)};var c=(s||"").trim().split(/[\s,]+/),v=parseFloat(c[2]),d=parseFloat(c[3]);if(!(!Rv(v)||!Rv(d))&&Pl(c[2])===Pl(c[3])){var p=v/d;return o?Rv(u)?{width:u,height:u/p,type:"svg",mime:"image/svg+xml",wUnits:Pl(o),hUnits:Pl(o)}:void 0:l?Rv(f)?{width:f*p,height:f,type:"svg",mime:"image/svg+xml",wUnits:Pl(l),hUnits:Pl(l)}:void 0:{width:v,height:d,type:"svg",mime:"image/svg+xml",wUnits:Pl(c[2]),hUnits:Pl(c[3])}}}}}});var Gle=z((ear,Ule)=>{"use strict";var vYe=UM().parse,hYe=UM().MAX_DATA_LENGTH;Ule.exports=function(e){var r=0;e[0]===239&&e[1]===187&&e[2]===191&&(r=3);for(var t="",a=Math.min(e.length,r+hYe),n=r;n{"use strict";var jle=_t().str2arr,Yle=_t().sliceEq,dYe=_t().readUInt16LE,pYe=_t().readUInt16BE,mYe=_t().readUInt32LE,yYe=_t().readUInt32BE,gYe=jle("II*\0"),bYe=jle("MM\0*");function yx(e,r,t){return t?pYe(e,r):dYe(e,r)}function GM(e,r,t){return t?yYe(e,r):mYe(e,r)}function Vle(e,r,t){var a=yx(e,r+2,t),n=GM(e,r+4,t);return n!==1||a!==3&&a!==4?null:a===3?yx(e,r+8,t):GM(e,r+8,t)}Wle.exports=function(e){if(!(e.length<8)&&!(!Yle(e,0,gYe)&&!Yle(e,0,bYe))){var r=e[0]===77,t=GM(e,4,r)-8;if(!(t<0)){var a=t+8;if(!(e.length-a<2)){var n=yx(e,a+0,r)*12;if(!(n<=0)&&(a+=2,!(e.length-a{"use strict";var Jle=_t().str2arr,Zle=_t().sliceEq,$le=_t().readUInt16LE,YM=_t().readUInt32LE,xYe=px(),_Ye=Jle("RIFF"),wYe=Jle("WEBP");function AYe(e,r){if(!(e[r+3]!==157||e[r+4]!==1||e[r+5]!==42))return{width:$le(e,r+6)&16383,height:$le(e,r+8)&16383,type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}function TYe(e,r){if(e[r]===47){var t=YM(e,r+1);return{width:(t&16383)+1,height:(t>>14&16383)+1,type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}}function MYe(e,r){return{width:(e[r+6]<<16|e[r+5]<<8|e[r+4])+1,height:(e[r+9]<<16|e[r+8]<<8|e[r+7])+1,type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}Kle.exports=function(e){if(!(e.length<16)&&!(!Zle(e,0,_Ye)||!Zle(e,8,wYe))){var r=12,t=null,a=0,n=YM(e,4)+8;if(!(n>e.length)){for(;r+8=10?t=t||AYe(e,r+8):i==="VP8L"&&o>=5?t=t||TYe(e,r+8):i==="VP8X"&&o>=10?t=t||MYe(e,r+8):i==="EXIF"&&(a=xYe.get_orientation(e.slice(r+8,r+8+o)),r=1/0),r+=8+o}if(t)return a>0&&(t.orientation=a),t}}}});var rse=z((aar,ese)=>{"use strict";ese.exports={avif:gle(),bmp:wle(),gif:Sle(),ico:Lle(),jpeg:Dle(),png:zle(),psd:Ble(),svg:Gle(),tiff:Xle(),webp:Qle()}});var tse=z((nar,jM)=>{"use strict";var VM=rse();function kYe(e){for(var r=Object.keys(VM),t=0;t0&&a.height>0?a:null}return null}jM.exports=function(r){return kYe(r)};jM.exports.parsers=VM});var nse=z(ase=>{"use strict";var SYe=tse(),qYe=Kl().IMAGE_URL_PREFIX,LYe=hv().Buffer;ase.getImageSize=function(e){var r=e.replace(qYe,""),t=new LYe(r,"base64");return SYe(t)}});var lse=z((oar,ose)=>{"use strict";var ise=ke(),CYe=(sv(),ze(_2)),DYe=Br(),gx=Yr(),EYe=ke().maxRowLength,PYe=nse().getImageSize;ose.exports=function(r,t){var a,n;if(t._hasZ)a=t.z.length,n=EYe(t.z);else if(t._hasSource){var i=PYe(t.source);a=i.height,n=i.width}var o=gx.getFromId(r,t.xaxis||"x"),l=gx.getFromId(r,t.yaxis||"y"),s=o.d2c(t.x0)-t.dx/2,u=l.d2c(t.y0)-t.dy/2,f,c=[s,s+n*t.dx],v=[u,u+a*t.dy];if(o&&o.type==="log")for(f=0;f{"use strict";var NYe=Pr(),ac=ke(),sse=ac.strTranslate,IYe=(Vl(),ze(Yl)),BYe=(sv(),ze(_2)),OYe=j9(),HYe=(m3(),ze(p3)).STYLE;use.exports=function(r,t,a,n){var i=t.xaxis,o=t.yaxis,l=!r._context._exportedPlot&&OYe();ac.makeTraceGroups(n,a,"im").each(function(s){var u=NYe.select(this),f=s[0],c=f.trace,v=(c.zsmooth==="fast"||c.zsmooth===!1&&l)&&!c._hasZ&&c._hasSource&&i.type==="linear"&&o.type==="linear";c._realImage=v;var d=f.z,p=f.x0,y=f.y0,m=f.w,b=f.h,A=c.dx,w=c.dy,x,_,k,T,q,C;for(C=0;x===void 0&&C0;)_=i.c2p(p+C*A),C--;for(C=0;T===void 0&&C0;)q=o.c2p(y+C*w),C--;if(_V[0];if(W||j){var J=x+P/2,te=T+R/2;Y+="transform:"+sse(J+"px",te+"px")+"scale("+(W?-1:1)+","+(j?-1:1)+")"+sse(-J+"px",-te+"px")+";"}}U.attr("style",Y);var ae=new Promise(function(se){if(c._hasZ)se();else if(c._hasSource)if(c._canvas&&c._canvas.el.width===m&&c._canvas.el.height===b&&c._canvas.source===c.source)se();else{var $=document.createElement("canvas");$.width=m,$.height=b;var fe=$.getContext("2d",{willReadFrequently:!0});c._image=c._image||new Image;var ie=c._image;ie.onload=function(){fe.drawImage(ie,0,0),c._canvas={el:$,source:c.source},se()},ie.setAttribute("src",c.source)}}).then(function(){var se,$;if(c._hasZ)$=O(function(ue,ce){var oe=d[ce][ue];return ac.isTypedArray(oe)&&(oe=Array.from(oe)),oe}),se=$.toDataURL("image/png");else if(c._hasSource)if(v)se=c.source;else{var fe=c._canvas.el.getContext("2d",{willReadFrequently:!0}),ie=fe.getImageData(0,0,m,b).data;$=O(function(ue,ce){var oe=4*(ce*m+ue);return[ie[oe],ie[oe+1],ie[oe+2],ie[oe+3]]}),se=$.toDataURL("image/png")}U.attr({"xlink:href":se,height:R,width:P,x,y:T})});r._promises.push(ae)})}});var vse=z((sar,cse)=>{"use strict";var UYe=Pr();cse.exports=function(r){UYe.select(r).selectAll(".im image").style("opacity",function(t){return t[0].trace.opacity})}});var mse=z((uar,pse)=>{"use strict";var hse=Un(),dse=ke(),bx=dse.isArrayOrTypedArray,GYe=(sv(),ze(_2));pse.exports=function(r,t,a){var n=r.cd[0],i=n.trace,o=r.xa,l=r.ya;if(!(hse.inbox(t-n.x0,t-(n.x0+n.w*i.dx),0)>0||hse.inbox(a-n.y0,a-(n.y0+n.h*i.dy),0)>0)){var s=Math.floor((t-n.x0)/i.dx),u=Math.floor(Math.abs(a-n.y0)/i.dy),f;if(i._hasZ?f=n.z[u][s]:i._hasSource&&(f=i._canvas.el.getContext("2d",{willReadFrequently:!0}).getImageData(s,u,1,1).data),!!f){var c=n.hi||i.hoverinfo,v;if(c){var d=c.split("+");d.indexOf("all")!==-1&&(d=["color"]),d.indexOf("color")!==-1&&(v=!0)}var p=GYe.colormodel[i.colormodel],y=p.colormodel||i.colormodel,m=y.length,b=i._scaler(f),A=p.suffix,w=[];(i.hovertemplate||v)&&(w.push("["+[b[0]+A[0],b[1]+A[1],b[2]+A[2]].join(", ")),m===4&&w.push(", "+b[3]+A[3]),w.push("]"),w=w.join(""),r.extraText=y.toUpperCase()+": "+w);var x;bx(i.hovertext)&&bx(i.hovertext[u])?x=i.hovertext[u][s]:bx(i.text)&&bx(i.text[u])&&(x=i.text[u][s]);var _=l.c2p(n.y0+(u+.5)*i.dy),k=n.x0+(s+.5)*i.dx,T=n.y0+(u+.5)*i.dy,q="["+f.slice(0,i.colormodel.length).join(", ")+"]";return[dse.extendFlat(r,{index:[u,s],x0:o.c2p(n.x0+s*i.dx),x1:o.c2p(n.x0+(s+1)*i.dx),y0:_,y1:_,color:b,xVal:k,xLabelVal:k,yVal:T,yLabelVal:T,zLabelVal:q,text:x,hovertemplateLabels:{zLabel:q,colorLabel:w,"color[0]Label":b[0]+A[0],"color[1]Label":b[1]+A[1],"color[2]Label":b[2]+A[2],"color[3]Label":b[3]+A[3]}})]}}}});var gse=z((far,yse)=>{"use strict";yse.exports=function(r,t){return"xVal"in t&&(r.x=t.xVal),"yVal"in t&&(r.y=t.yVal),t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),r.color=t.color,r.colormodel=t.trace.colormodel,r.z||(r.z=t.color),r}});var xse=z((car,bse)=>{"use strict";bse.exports={attributes:(HA(),ze(OA)).default,supplyDefaults:ire(),calc:lse(),plot:fse(),style:vse(),hoverPoints:mse(),eventData:gse(),moduleType:"trace",name:"image",basePlotModule:io(),categories:["cartesian","svg","2dMap","noSortingByValue"],animatable:!1,meta:{}}});var wse=z((har,_se)=>{"use strict";_se.exports=xse()});var WM=z((dar,Tse)=>{"use strict";var xx=On(),YYe=H0().attributes,VYe=Ca(),jYe=Ii(),{hovertemplateAttrs:WYe,texttemplateAttrs:XYe,templatefallbackAttrs:Ase}=di(),bu=Mt().extendFlat,ZYe=Bi().pattern,_x=VYe({editType:"plot",arrayOk:!0,colorEditType:"plot"});Tse.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:jYe.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},pattern:ZYe,editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:bu({},xx.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:WYe({},{keys:["label","color","value","percent","text"]}),hovertemplatefallback:Ase(),texttemplate:XYe({editType:"plot"},{keys:["label","color","value","percent","text"]}),texttemplatefallback:Ase({editType:"plot"}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"plot"},textfont:bu({},_x,{}),insidetextorientation:{valType:"enumerated",values:["horizontal","radial","tangential","auto"],dflt:"auto",editType:"plot"},insidetextfont:bu({},_x,{}),outsidetextfont:bu({},_x,{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},showlegend:bu({},xx.showlegend,{arrayOk:!0}),legend:bu({},xx.legend,{arrayOk:!0}),legendrank:bu({},xx.legendrank,{arrayOk:!0}),title:{text:{valType:"string",dflt:"",editType:"plot"},font:bu({},_x,{}),position:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"plot"},editType:"plot"},domain:YYe({name:"pie",trace:!0,editType:"calc"}),hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"}}});var qse=z((par,Sse)=>{"use strict";var $Ye=Br(),s1=ke(),JYe=WM(),KYe=H0().defaults,QYe=Rf().handleText,eVe=ke().coercePattern;function Mse(e,r){var t=s1.isArrayOrTypedArray(e),a=s1.isArrayOrTypedArray(r),n=Math.min(t?e.length:1/0,a?r.length:1/0);if(isFinite(n)||(n=0),n&&a){for(var i,o=0;o0){i=!0;break}}i||(n=0)}return{hasLabels:t,hasValues:a,len:n}}function kse(e,r,t,a,n){var i=a("marker.line.width");i&&a("marker.line.color",n?void 0:t.paper_bgcolor);var o=a("marker.colors");eVe(a,"marker.pattern",o),e.marker&&!r.marker.pattern.fgcolor&&(r.marker.pattern.fgcolor=e.marker.colors),r.marker.pattern.bgcolor||(r.marker.pattern.bgcolor=t.paper_bgcolor)}function rVe(e,r,t,a){function n(A,w){return s1.coerce(e,r,JYe,A,w)}var i=n("labels"),o=n("values"),l=Mse(i,o),s=l.len;if(r._hasLabels=l.hasLabels,r._hasValues=l.hasValues,!r._hasLabels&&r._hasValues&&(n("label0"),n("dlabel")),!s){r.visible=!1;return}r._length=s,kse(e,r,a,n,!0),n("scalegroup");var u=n("text"),f=n("texttemplate");n("texttemplatefallback");var c;if(f||(c=n("textinfo",s1.isArrayOrTypedArray(u)?"text+percent":"percent")),n("hovertext"),n("hovertemplate"),n("hovertemplatefallback"),f||c&&c!=="none"){var v=n("textposition");QYe(e,r,a,n,v,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1});var d=Array.isArray(v)||v==="auto",p=d||v==="outside";p&&n("automargin"),(v==="inside"||v==="auto"||Array.isArray(v))&&n("insidetextorientation")}else c==="none"&&n("textposition","none");KYe(r,a,n);var y=n("hole"),m=n("title.text");if(m){var b=n("title.position",y?"middle center":"top center");!y&&b==="middle center"&&(r.title.position="top center"),s1.coerceFont(n,"title.font",a.font)}n("sort"),n("direction"),n("rotation"),n("pull")}Sse.exports={handleLabelsAndValues:Mse,handleMarkerDefaults:kse,supplyDefaults:rVe}});var XM=z((mar,Lse)=>{"use strict";Lse.exports={hiddenlabels:{valType:"data_array",editType:"calc"},piecolorway:{valType:"colorlist",editType:"calc"},extendpiecolors:{valType:"boolean",dflt:!0,editType:"calc"}}});var Dse=z((yar,Cse)=>{"use strict";var tVe=ke(),aVe=XM();Cse.exports=function(r,t){function a(n,i){return tVe.coerce(r,t,aVe,n,i)}a("hiddenlabels"),a("piecolorway",t.colorway),a("extendpiecolors")}});var ZM=z((gar,Rse)=>{"use strict";var nVe=Br(),Fv=qr(),iVe={};function oVe(e,r){var t=[],a=e._fullLayout,n=a.hiddenlabels||[],i=r.labels,o=r.marker.colors||[],l=r.values,s=r._length,u=r._hasValues&&s,f,c;if(r.dlabel)for(i=new Array(s),f=0;f=0});var x=r.type==="funnelarea"?y:r.sort;return x&&t.sort(function(_,k){return k.v-_.v}),t[0]&&(t[0].vTotal=p),t}function Ese(e){return function(t,a){if(!t||!Fv.isValid(t))return!1;let n=Fv.rgbaString(t);return e[a]||(e[a]=n),n}}function lVe(e,r){var t=(r||{}).type;t||(t="pie");var a=e._fullLayout,n=e.calcdata,i=a[t+"colorway"],o=a["_"+t+"colormap"];a["extend"+t+"colors"]&&(i=Pse(i,iVe));for(var l=0,s=0;s{"use strict";var sVe=Ro().appendArrayMultiPointValues;Fse.exports=function(r,t){var a={curveNumber:t.index,pointNumbers:r.pts,data:t._input,fullData:t,label:r.label,color:r.color,value:r.v,percent:r.percent,text:r.text,bbox:r.bbox,v:r.v};return r.pts.length===1&&(a.pointNumber=a.i=r.pts[0]),sVe(a,t,r.pts),t.type==="funnelarea"&&(delete a.v,delete a.i),a}});var nue=z((xar,aue)=>{"use strict";var fi=Pr(),uVe=ma(),wx=Un(),Use=qr(),vs=Jr(),vn=ke(),fVe=vn.strScale,Nse=vn.strTranslate,$M=Fa(),Gse=a2(),cVe=Gse.recordMinTextSize,vVe=Gse.clearMinTextSize,Yse=(Id(),ze(Nd)).TEXTPAD,Dr=Om(),Ax=zse(),Ise=ke().isValidTextValue;function hVe(e,r){var t=e._context.staticPlot,a=e._fullLayout,n=a._size;vVe("pie",a),Wse(r,e),eue(r,n);var i=vn.makeTraceGroups(a._pielayer,r,"trace").each(function(o){var l=fi.select(this),s=o[0],u=s.trace;wVe(o),l.attr("stroke-linejoin","round"),l.each(function(){var f=fi.select(this).selectAll("g.slice").data(o);f.enter().append("g").classed("slice",!0),f.exit().remove();var c=[[[],[]],[[],[]]],v=!1;f.each(function(x,_){if(x.hidden){fi.select(this).selectAll("path,g").remove();return}x.pointNumber=x.i,x.curveNumber=u.index,c[x.pxmid[1]<0?0:1][x.pxmid[0]<0?0:1].push(x);var k=s.cx,T=s.cy,q=fi.select(this),C=q.selectAll("path.surface").data([x]);if(C.enter().append("path").classed("surface",!0).style({"pointer-events":t?"none":"all"}),q.call(Vse,e,o),u.pull){var E=+Dr.castOption(u.pull,x.pts)||0;E>0&&(k+=E*x.pxmid[0],T+=E*x.pxmid[1])}x.cxFinal=k,x.cyFinal=T;function P(G,V,W,j){var J=j*(V[0]-G[0]),te=j*(V[1]-G[1]);return"a"+j*s.r+","+j*s.r+" 0 "+x.largeArc+(W?" 1 ":" 0 ")+J+","+te}var R=u.hole;if(x.v===s.vTotal){var N="M"+(k+x.px0[0])+","+(T+x.px0[1])+P(x.px0,x.pxmid,!0,1)+P(x.pxmid,x.px0,!0,1)+"Z";R?C.attr("d","M"+(k+R*x.px0[0])+","+(T+R*x.px0[1])+P(x.px0,x.pxmid,!1,R)+P(x.pxmid,x.px0,!1,R)+"Z"+N):C.attr("d",N)}else{var I=P(x.px0,x.px1,!0,1);if(R){var O=1-R;C.attr("d","M"+(k+R*x.px1[0])+","+(T+R*x.px1[1])+P(x.px1,x.px0,!1,R)+"l"+O*x.px0[0]+","+O*x.px0[1]+I+"Z")}else C.attr("d","M"+k+","+T+"l"+x.px0[0]+","+x.px0[1]+I+"Z")}rue(e,x,s);var U=Dr.castOption(u.textposition,x.pts),Y=q.selectAll("g.slicetext").data(x.text&&U!=="none"?[0]:[]);Y.enter().append("g").classed("slicetext",!0),Y.exit().remove(),Y.each(function(){var G=vn.ensureSingle(fi.select(this),"text","",function($){$.attr("data-notex",1)}),V=vn.ensureUniformFontSize(e,U==="outside"?pVe(u,x,a.font):jse(u,x,a.font));G.text(x.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(vs.font,V).call($M.convertToTspans,e);var W=vs.bBox(G.node()),j;if(U==="outside")j=Hse(W,x);else if(j=Xse(W,x,s),U==="auto"&&j.scale<1){var J=vn.ensureUniformFontSize(e,u.outsidetextfont);G.call(vs.font,J),W=vs.bBox(G.node()),j=Hse(W,x)}var te=j.textPosAngle,ae=te===void 0?x.pxmid:Tx(s.r,te);if(j.targetX=k+ae[0]*j.rCenter+(j.x||0),j.targetY=T+ae[1]*j.rCenter+(j.y||0),tue(j,W),j.outside){var se=j.targetY;x.yLabelMin=se-W.height/2,x.yLabelMid=se,x.yLabelMax=se+W.height/2,x.labelExtraX=0,x.labelExtraY=0,v=!0}j.fontSize=V.size,cVe(u.type,j,a),o[_].transform=j,vn.setTransormAndDisplay(G,j)})});var d=fi.select(this).selectAll("g.titletext").data(u.title.text?[0]:[]);if(d.enter().append("g").classed("titletext",!0),d.exit().remove(),d.each(function(){var x=vn.ensureSingle(fi.select(this),"text","",function(T){T.attr("data-notex",1)}),_=u.title.text;u._meta&&(_=vn.templateString(_,u._meta)),x.text(_).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(vs.font,u.title.font).call($M.convertToTspans,e);var k;u.title.position==="middle center"?k=gVe(s):k=Kse(s,n),x.attr("transform",Nse(k.x,k.y)+fVe(Math.min(1,k.scale))+Nse(k.tx,k.ty))}),v&&xVe(c,u),dVe(f,u),v&&u.automargin){var p=vs.bBox(l.node()),y=u.domain,m=n.w*(y.x[1]-y.x[0]),b=n.h*(y.y[1]-y.y[0]),A=(.5*m-s.r)/n.w,w=(.5*b-s.r)/n.h;uVe.autoMargin(e,"pie."+u.uid+".automargin",{xl:y.x[0]-A,xr:y.x[1]+A,yb:y.y[0]-w,yt:y.y[1]+w,l:Math.max(s.cx-s.r-p.left,0),r:Math.max(p.right-(s.cx+s.r),0),b:Math.max(p.bottom-(s.cy+s.r),0),t:Math.max(s.cy-s.r-p.top,0),pad:5})}})});setTimeout(function(){i.selectAll("tspan").each(function(){var o=fi.select(this);o.attr("dy")&&o.attr("dy",o.attr("dy"))})},0)}function dVe(e,r){e.each(function(t){var a=fi.select(this);if(!t.labelExtraX&&!t.labelExtraY){a.select("path.textline").remove();return}var n=a.select("g.slicetext text");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,vn.setTransormAndDisplay(n,t.transform);var i=t.cxFinal+t.pxmid[0],o=t.cyFinal+t.pxmid[1],l="M"+i+","+o,s=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var u=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(u)>Math.abs(f)?l+="l"+f*t.pxmid[0]/t.pxmid[1]+","+f+"H"+(i+t.labelExtraX+s):l+="l"+t.labelExtraX+","+u+"v"+(f-u)+"h"+s}else l+="V"+(t.yLabelMid+t.labelExtraY)+"h"+s;vn.ensureSingle(a,"path","textline").call(Use.stroke,r.outsidetextfont.color).attr({"stroke-width":Math.min(2,r.outsidetextfont.size/8),d:l,fill:"none"})})}function Vse(e,r,t){var a=t[0],n=a.cx,i=a.cy,o=a.trace,l=o.type==="funnelarea";"_hasHoverLabel"in o||(o._hasHoverLabel=!1),"_hasHoverEvent"in o||(o._hasHoverEvent=!1),e.on("mouseover",function(s){var u=r._fullLayout,f=r._fullData[o.index];if(!(r._dragging||u.hovermode===!1)){var c=f.hoverinfo;if(Array.isArray(c)&&(c=wx.castHoverinfo({hoverinfo:[Dr.castOption(c,s.pts)],_module:o._module},u,0)),c==="all"&&(c="label+text+value+percent+name"),f.hovertemplate||c!=="none"&&c!=="skip"&&c){var v=s.rInscribed||0,d=n+s.pxmid[0]*(1-v),p=i+s.pxmid[1]*(1-v),y=u.separators,m=[];if(c&&c.indexOf("label")!==-1&&m.push(s.label),s.text=Dr.castOption(f.hovertext||f.text,s.pts),c&&c.indexOf("text")!==-1){var b=s.text;vn.isValidTextValue(b)&&m.push(b)}s.value=s.v,s.valueLabel=Dr.formatPieValue(s.v,y),c&&c.indexOf("value")!==-1&&m.push(s.valueLabel),s.percent=s.v/a.vTotal,s.percentLabel=Dr.formatPiePercent(s.percent,y),c&&c.indexOf("percent")!==-1&&m.push(s.percentLabel);var A=f.hoverlabel,w=A.font,x=[];wx.loneHover({trace:o,x0:d-v*a.r,x1:d+v*a.r,y:p,_x0:l?n+s.TL[0]:d-v*a.r,_x1:l?n+s.TR[0]:d+v*a.r,_y0:l?i+s.TL[1]:p-v*a.r,_y1:l?i+s.BL[1]:p+v*a.r,text:m.join("
"),name:f.hovertemplate||c.indexOf("name")!==-1?f.name:void 0,idealAlign:s.pxmid[0]<0?"left":"right",color:Dr.castOption(A.bgcolor,s.pts)||s.color,borderColor:Dr.castOption(A.bordercolor,s.pts),fontFamily:Dr.castOption(w.family,s.pts),fontSize:Dr.castOption(w.size,s.pts),fontColor:Dr.castOption(w.color,s.pts),nameLength:Dr.castOption(A.namelength,s.pts),textAlign:Dr.castOption(A.align,s.pts),hovertemplate:Dr.castOption(f.hovertemplate,s.pts),hovertemplateLabels:s,eventData:[Ax(s,f)]},{container:u._hoverlayer.node(),outerContainer:u._paper.node(),gd:r,inOut_bbox:x}),s.bbox=x[0],o._hasHoverLabel=!0}o._hasHoverEvent=!0,r.emit("plotly_hover",{points:[Ax(s,f)],event:fi.event})}}),e.on("mouseout",function(s){var u=r._fullLayout,f=r._fullData[o.index],c=fi.select(this).datum();o._hasHoverEvent&&(s.originalEvent=fi.event,r.emit("plotly_unhover",{points:[Ax(c,f)],event:fi.event}),o._hasHoverEvent=!1),o._hasHoverLabel&&(wx.loneUnhover(u._hoverlayer.node()),o._hasHoverLabel=!1)}),e.on("click",function(s){var u=r._fullLayout,f=r._fullData[o.index];r._dragging||u.hovermode===!1||(r._hoverdata=[Ax(s,f)],wx.click(r,fi.event))})}function pVe(e,r,t){var a=Dr.castOption(e.outsidetextfont.color,r.pts)||Dr.castOption(e.textfont.color,r.pts)||t.color,n=Dr.castOption(e.outsidetextfont.family,r.pts)||Dr.castOption(e.textfont.family,r.pts)||t.family,i=Dr.castOption(e.outsidetextfont.size,r.pts)||Dr.castOption(e.textfont.size,r.pts)||t.size,o=Dr.castOption(e.outsidetextfont.weight,r.pts)||Dr.castOption(e.textfont.weight,r.pts)||t.weight,l=Dr.castOption(e.outsidetextfont.style,r.pts)||Dr.castOption(e.textfont.style,r.pts)||t.style,s=Dr.castOption(e.outsidetextfont.variant,r.pts)||Dr.castOption(e.textfont.variant,r.pts)||t.variant,u=Dr.castOption(e.outsidetextfont.textcase,r.pts)||Dr.castOption(e.textfont.textcase,r.pts)||t.textcase,f=Dr.castOption(e.outsidetextfont.lineposition,r.pts)||Dr.castOption(e.textfont.lineposition,r.pts)||t.lineposition,c=Dr.castOption(e.outsidetextfont.shadow,r.pts)||Dr.castOption(e.textfont.shadow,r.pts)||t.shadow;return{color:a,family:n,size:i,weight:o,style:l,variant:s,textcase:u,lineposition:f,shadow:c}}function jse(e,r,t){var a=Dr.castOption(e.insidetextfont.color,r.pts);!a&&e._input.textfont&&(a=Dr.castOption(e._input.textfont.color,r.pts));var n=Dr.castOption(e.insidetextfont.family,r.pts)||Dr.castOption(e.textfont.family,r.pts)||t.family,i=Dr.castOption(e.insidetextfont.size,r.pts)||Dr.castOption(e.textfont.size,r.pts)||t.size,o=Dr.castOption(e.insidetextfont.weight,r.pts)||Dr.castOption(e.textfont.weight,r.pts)||t.weight,l=Dr.castOption(e.insidetextfont.style,r.pts)||Dr.castOption(e.textfont.style,r.pts)||t.style,s=Dr.castOption(e.insidetextfont.variant,r.pts)||Dr.castOption(e.textfont.variant,r.pts)||t.variant,u=Dr.castOption(e.insidetextfont.textcase,r.pts)||Dr.castOption(e.textfont.textcase,r.pts)||t.textcase,f=Dr.castOption(e.insidetextfont.lineposition,r.pts)||Dr.castOption(e.textfont.lineposition,r.pts)||t.lineposition,c=Dr.castOption(e.insidetextfont.shadow,r.pts)||Dr.castOption(e.textfont.shadow,r.pts)||t.shadow;return{color:a||Use.contrast(r.color),family:n,size:i,weight:o,style:l,variant:s,textcase:u,lineposition:f,shadow:c}}function Wse(e,r){for(var t,a,n=0;n=-4;A-=2)b(Math.PI*A,"tan");for(A=4;A>=-4;A-=2)b(Math.PI*(A+1),"tan")}if(c||d){for(A=4;A>=-4;A-=2)b(Math.PI*(A+1.5),"rad");for(A=4;A>=-4;A-=2)b(Math.PI*(A+.5),"rad")}}if(l||p||c){var w=Math.sqrt(e.width*e.width+e.height*e.height);if(m={scale:n*a*2/w,rCenter:1-n,rotate:0},m.textPosAngle=(r.startangle+r.stopangle)/2,m.scale>=1)return m;y.push(m)}(p||d)&&(m=Bse(e,a,o,s,u),m.textPosAngle=(r.startangle+r.stopangle)/2,y.push(m)),(p||v)&&(m=Ose(e,a,o,s,u),m.textPosAngle=(r.startangle+r.stopangle)/2,y.push(m));for(var x=0,_=0,k=0;k=1)break}return y[x]}function mVe(e,r){var t=e.startangle,a=e.stopangle;return t>r&&r>a||t0?1:-1)/2,y:i/(1+t*t/(a*a)),outside:!0}}function gVe(e){var r=Math.sqrt(e.titleBox.width*e.titleBox.width+e.titleBox.height*e.titleBox.height);return{x:e.cx,y:e.cy,scale:e.trace.hole*e.r*2/r,tx:0,ty:-e.titleBox.height/2+e.trace.title.font.size}}function Kse(e,r){var t=1,a=1,n,i=e.trace,o={x:e.cx,y:e.cy},l={tx:0,ty:0};l.ty+=i.title.font.size,n=Qse(i),i.title.position.indexOf("top")!==-1?(o.y-=(1+n)*e.r,l.ty-=e.titleBox.height):i.title.position.indexOf("bottom")!==-1&&(o.y+=(1+n)*e.r);var s=bVe(e.r,e.trace.aspectratio),u=r.w*(i.domain.x[1]-i.domain.x[0])/2;return i.title.position.indexOf("left")!==-1?(u=u+s,o.x-=(1+n)*s,l.tx+=e.titleBox.width/2):i.title.position.indexOf("center")!==-1?u*=2:i.title.position.indexOf("right")!==-1&&(u=u+s,o.x+=(1+n)*s,l.tx-=e.titleBox.width/2),t=u/e.titleBox.width,a=JM(e,r)/e.titleBox.height,{x:o.x,y:o.y,scale:Math.min(t,a),tx:l.tx,ty:l.ty}}function bVe(e,r){return e/(r===void 0?1:r)}function JM(e,r){var t=e.trace,a=r.h*(t.domain.y[1]-t.domain.y[0]);return Math.min(e.titleBox.height,a/2)}function Qse(e){var r=e.pull;if(!r)return 0;var t;if(vn.isArrayOrTypedArray(r))for(r=0,t=0;tr&&(r=e.pull[t]);return r}function xVe(e,r){var t,a,n,i,o,l,s,u,f,c,v,d,p;function y(w,x){return w.pxmid[1]-x.pxmid[1]}function m(w,x){return x.pxmid[1]-w.pxmid[1]}function b(w,x){x||(x={});var _=x.labelExtraY+(a?x.yLabelMax:x.yLabelMin),k=a?w.yLabelMin:w.yLabelMax,T=a?w.yLabelMax:w.yLabelMin,q=w.cyFinal+o(w.px0[1],w.px1[1]),C=_-k,E,P,R,N,I,O;if(C*s>0&&(w.labelExtraY=C),!!vn.isArrayOrTypedArray(r.pull))for(P=0;P=(Dr.castOption(r.pull,R.pts)||0))&&((w.pxmid[1]-R.pxmid[1])*s>0?(N=R.cyFinal+o(R.px0[1],R.px1[1]),C=N-k-w.labelExtraY,C*s>0&&(w.labelExtraY+=C)):(T+w.labelExtraY-q)*s>0&&(E=3*l*Math.abs(P-c.indexOf(w)),I=R.cxFinal+i(R.px0[0],R.px1[0]),O=I+E-(w.cxFinal+w.pxmid[0])-w.labelExtraX,O*l>0&&(w.labelExtraX+=O)))}for(a=0;a<2;a++)for(n=a?y:m,o=a?Math.max:Math.min,s=a?1:-1,t=0;t<2;t++){for(i=t?Math.max:Math.min,l=t?1:-1,u=e[a][t],u.sort(n),f=e[1-a][t],c=f.concat(u),d=[],v=0;v1?(u=t.r,f=u/n.aspectratio):(f=t.r,u=f*n.aspectratio),u*=(1+n.baseratio)/2,s=u*f}o=Math.min(o,s/t.vTotal)}for(a=0;ar.vTotal/2?1:0,u.halfangle=Math.PI*Math.min(u.v/r.vTotal,.5),u.ring=1-a.hole,u.rInscribed=yVe(u,r))}function Tx(e,r){return[e*Math.sin(r),-e*Math.cos(r)]}function rue(e,r,t){var a=e._fullLayout,n=t.trace,i=n.texttemplate,o=n.textinfo;if(!i&&o&&o!=="none"){var l=o.split("+"),s=function(x){return l.indexOf(x)!==-1},u=s("label"),f=s("text"),c=s("value"),v=s("percent"),d=a.separators,p;if(p=u?[r.label]:[],f){var y=Dr.getFirstFilled(n.text,r.pts);Ise(y)&&p.push(y)}c&&p.push(Dr.formatPieValue(r.v,d)),v&&p.push(Dr.formatPiePercent(r.v/t.vTotal,d)),r.text=p.join("
")}function m(x){return{label:x.label,value:x.v,valueLabel:Dr.formatPieValue(x.v,a.separators),percent:x.v/t.vTotal,percentLabel:Dr.formatPiePercent(x.v/t.vTotal,a.separators),color:x.color,text:x.text,customdata:vn.castOption(n,x.i,"customdata")}}if(i){var b=vn.castOption(n,r.i,"texttemplate");if(!b)r.text="";else{var A=m(r),w=Dr.getFirstFilled(n.text,r.pts);(Ise(w)||w==="")&&(A.text=w),r.text=vn.texttemplateString({data:[A,n._meta],fallback:n.texttemplatefallback,labels:A,locale:e._fullLayout._d3locale,template:b})}}}function tue(e,r){var t=e.rotate*Math.PI/180,a=Math.cos(t),n=Math.sin(t),i=(r.left+r.right)/2,o=(r.top+r.bottom)/2;e.textX=i*a-o*n,e.textY=i*n+o*a,e.noCenter=!0}aue.exports={plot:hVe,formatSliceLabel:rue,transformInsideText:Xse,determineInsideTextFont:jse,positionTitleOutside:Kse,prerenderTitles:Wse,layoutAreas:eue,attachFxHandlers:Vse,computeTransform:tue}});var lue=z((_ar,oue)=>{"use strict";var iue=Pr(),AVe=Hm(),TVe=a2().resizeText;oue.exports=function(r){var t=r._fullLayout._pielayer.selectAll(".trace");TVe(r,t,"pie"),t.each(function(a){var n=a[0],i=n.trace,o=iue.select(this);o.style({opacity:i.opacity}),o.selectAll("path.surface").each(function(l){iue.select(this).call(AVe,l,i,r)})})}});var uue=z(zv=>{"use strict";var sue=ma();zv.name="pie";zv.plot=function(e,r,t,a){sue.plotBasePlot(zv.name,e,r,t,a)};zv.clean=function(e,r,t,a){sue.cleanBasePlot(zv.name,e,r,t,a)}});var cue=z((Aar,fue)=>{"use strict";fue.exports={attributes:WM(),supplyDefaults:qse().supplyDefaults,supplyLayoutDefaults:Dse(),layoutAttributes:XM(),calc:ZM().calc,crossTraceCalc:ZM().crossTraceCalc,plot:nue().plot,style:lue(),styleOne:Hm(),moduleType:"trace",name:"pie",basePlotModule:uue(),categories:["pie-like","pie","showLegend"],meta:{}}});var hue=z((Tar,vue)=>{"use strict";vue.exports=cue()});var xn=z((Mar,pue)=>{"use strict";var due=Object.getOwnPropertySymbols,MVe=Object.prototype.hasOwnProperty,kVe=Object.prototype.propertyIsEnumerable;function SVe(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function qVe(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var r={},t=0;t<10;t++)r["_"+String.fromCharCode(t)]=t;var a=Object.getOwnPropertyNames(r).map(function(i){return r[i]});if(a.join("")!=="0123456789")return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(i){n[i]=i}),Object.keys(Object.assign({},n)).join("")==="abcdefghijklmnopqrst"}catch(i){return!1}}pue.exports=qVe()?Object.assign:function(e,r){for(var t,a=SVe(e),n,i=1;i{var kx=xn();function mue(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}kx(mue.prototype,{instance:function(e,r){e=(e||"gregorian").toLowerCase(),r=r||"";var t=this._localCals[e+"-"+r];if(!t&&this.calendars[e]&&(t=new this.calendars[e](r),this._localCals[e+"-"+r]=t),!t)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,e);return t},newDate:function(e,r,t,a,n){return a=(e!=null&&e.year?e.calendar():typeof a=="string"?this.instance(a,n):a)||this.instance(),a.newDate(e,r,t)},substituteDigits:function(e){return function(r){return(r+"").replace(/[0-9]/g,function(t){return e[t]})}},substituteChineseDigits:function(e,r){return function(t){for(var a="",n=0;t>0;){var i=t%10;a=(i===0?"":e[i]+r[n])+a,n++,t=Math.floor(t/10)}return a.indexOf(e[1]+r[1])===0&&(a=a.substr(1)),a||e[0]}}});function KM(e,r,t,a){if(this._calendar=e,this._year=r,this._month=t,this._day=a,this._calendar._validateLevel===0&&!this._calendar.isValid(this._year,this._month,this._day))throw(Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function Mx(e,r){return e=""+e,"000000".substring(0,r-e.length)+e}kx(KM.prototype,{newDate:function(e,r,t){return this._calendar.newDate(e==null?this:e,r,t)},year:function(e){return arguments.length===0?this._year:this.set(e,"y")},month:function(e){return arguments.length===0?this._month:this.set(e,"m")},day:function(e){return arguments.length===0?this._day:this.set(e,"d")},date:function(e,r,t){if(!this._calendar.isValid(e,r,t))throw(Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=e,this._month=r,this._day=t,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(e,r){return this._calendar.add(this,e,r)},set:function(e,r){return this._calendar.set(this,e,r)},compareTo:function(e){if(this._calendar.name!==e._calendar.name)throw(Gr.local.differentCalendars||Gr.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,e._calendar.local.name);var r=this._year!==e._year?this._year-e._year:this._month!==e._month?this.monthOfYear()-e.monthOfYear():this._day-e._day;return r===0?0:r<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(e){return this._calendar.fromJD(e)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(e){return this._calendar.fromJSDate(e)},toString:function(){return(this.year()<0?"-":"")+Mx(Math.abs(this.year()),4)+"-"+Mx(this.month(),2)+"-"+Mx(this.day(),2)}});function QM(){this.shortYearCutoff="+10"}kx(QM.prototype,{_validateLevel:0,newDate:function(e,r,t){return e==null?this.today():(e.year&&(this._validate(e,r,t,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate),t=e.day(),r=e.month(),e=e.year()),new KM(this,e,r,t))},today:function(){return this.fromJSDate(new Date)},epoch:function(e){var r=this._validate(e,this.minMonth,this.minDay,Gr.local.invalidYear||Gr.regionalOptions[""].invalidYear);return r.year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Gr.local.invalidYear||Gr.regionalOptions[""].invalidYear);return(r.year()<0?"-":"")+Mx(Math.abs(r.year()),4)},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,Gr.local.invalidYear||Gr.regionalOptions[""].invalidYear),12},monthOfYear:function(e,r){var t=this._validate(e,r,this.minDay,Gr.local.invalidMonth||Gr.regionalOptions[""].invalidMonth);return(t.month()+this.monthsInYear(t)-this.firstMonth)%this.monthsInYear(t)+this.minMonth},fromMonthOfYear:function(e,r){var t=(r+this.firstMonth-2*this.minMonth)%this.monthsInYear(e)+this.minMonth;return this._validate(e,t,this.minDay,Gr.local.invalidMonth||Gr.regionalOptions[""].invalidMonth),t},daysInYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Gr.local.invalidYear||Gr.regionalOptions[""].invalidYear);return this.leapYear(r)?366:365},dayOfYear:function(e,r,t){var a=this._validate(e,r,t,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate);return a.toJD()-this.newDate(a.year(),this.fromMonthOfYear(a.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(e,r,t){var a=this._validate(e,r,t,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(a))+2)%this.daysInWeek()},extraInfo:function(e,r,t){return this._validate(e,r,t,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate),{}},add:function(e,r,t){return this._validate(e,this.minMonth,this.minDay,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate),this._correctAdd(e,this._add(e,r,t),r,t)},_add:function(e,r,t){if(this._validateLevel++,t==="d"||t==="w"){var a=e.toJD()+r*(t==="w"?this.daysInWeek():1),n=e.calendar().fromJD(a);return this._validateLevel--,[n.year(),n.month(),n.day()]}try{var i=e.year()+(t==="y"?r:0),o=e.monthOfYear()+(t==="m"?r:0),n=e.day(),l=function(f){for(;oc-1+f.minMonth;)i++,o-=c,c=f.monthsInYear(i)};t==="y"?(e.month()!==this.fromMonthOfYear(i,o)&&(o=this.newDate(i,e.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(i)),n=Math.min(n,this.daysInMonth(i,this.fromMonthOfYear(i,o)))):t==="m"&&(l(this),n=Math.min(n,this.daysInMonth(i,this.fromMonthOfYear(i,o))));var s=[i,this.fromMonthOfYear(i,o),n];return this._validateLevel--,s}catch(u){throw this._validateLevel--,u}},_correctAdd:function(e,r,t,a){if(!this.hasYearZero&&(a==="y"||a==="m")&&(r[0]===0||e.year()>0!=r[0]>0)){var n={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[a],i=t<0?-1:1;r=this._add(e,t*n[0]+i*n[1],n[2])}return e.date(r[0],r[1],r[2])},set:function(e,r,t){this._validate(e,this.minMonth,this.minDay,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate);var a=t==="y"?r:e.year(),n=t==="m"?r:e.month(),i=t==="d"?r:e.day();return(t==="y"||t==="m")&&(i=Math.min(i,this.daysInMonth(a,n))),e.date(a,n,i)},isValid:function(e,r,t){this._validateLevel++;var a=this.hasYearZero||e!==0;if(a){var n=this.newDate(e,r,this.minDay);a=r>=this.minMonth&&r-this.minMonth=this.minDay&&t-this.minDay13.5?13:1),u=n-(s>2.5?4716:4715);return u<=0&&u--,this.newDate(u,s,l)},toJSDate:function(e,r,t){var a=this._validate(e,r,t,Gr.local.invalidDate||Gr.regionalOptions[""].invalidDate),n=new Date(a.year(),a.month()-1,a.day());return n.setHours(0),n.setMinutes(0),n.setSeconds(0),n.setMilliseconds(0),n.setHours(n.getHours()>12?n.getHours()+2:0),n},fromJSDate:function(e){return this.newDate(e.getFullYear(),e.getMonth()+1,e.getDate())}});var Gr=yue.exports=new mue;Gr.cdate=KM;Gr.baseCalendar=QM;Gr.calendars.gregorian=ek});var gue=z(()=>{var rk=xn(),Za=_n();rk(Za.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"});Za.local=Za.regionalOptions[""];rk(Za.cdate.prototype,{formatDate:function(e,r){return typeof e!="string"&&(r=e,e=""),this._calendar.formatDate(e||"",this,r)}});rk(Za.baseCalendar.prototype,{UNIX_EPOCH:Za.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:1440*60,TICKS_EPOCH:Za.instance().jdEpoch,TICKS_PER_DAY:1440*60*1e7,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(e,r,t){if(typeof e!="string"&&(t=r,r=e,e=""),!r)return"";if(r.calendar()!==this)throw Za.local.invalidFormat||Za.regionalOptions[""].invalidFormat;e=e||this.local.dateFormat,t=t||{};for(var a=t.dayNamesShort||this.local.dayNamesShort,n=t.dayNames||this.local.dayNames,i=t.monthNumbers||this.local.monthNumbers,o=t.monthNamesShort||this.local.monthNamesShort,l=t.monthNames||this.local.monthNames,s=t.calculateWeek||this.local.calculateWeek,u=function(x,_){for(var k=1;w+k1},f=function(x,_,k,T){var q=""+_;if(u(x,T))for(;q.length1},A=function(R,N){var I=b(R,N),O=[2,3,I?4:2,I?4:2,10,11,20]["oyYJ@!".indexOf(R)+1],U=new RegExp("^-?\\d{1,"+O+"}"),Y=r.substring(q).match(U);if(!Y)throw(Za.local.missingNumberAt||Za.regionalOptions[""].missingNumberAt).replace(/\{0\}/,q);return q+=Y[0].length,parseInt(Y[0],10)},w=this,x=function(){if(typeof l=="function"){b("m");var R=l.call(w,r.substring(q));return q+=R.length,R}return A("m")},_=function(R,N,I,O){for(var U=b(R,O)?I:N,Y=0;Y-1){v=1,d=p;for(var P=this.daysInMonth(c,v);d>P;P=this.daysInMonth(c,v))v++,d-=P}return f>-1?this.fromJD(f):this.newDate(c,v,d)},determineDate:function(e,r,t,a,n){t&&typeof t!="object"&&(n=a,a=t,t=null),typeof a!="string"&&(n=a,a="");var i=this,o=function(l){try{return i.parseDate(a,l,n)}catch(c){}l=l.toLowerCase();for(var s=(l.match(/^c/)&&t?t.newDate():null)||i.today(),u=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,f=u.exec(l);f;)s.add(parseInt(f[1],10),f[2]||"d"),f=u.exec(l);return s};return r=r?r.newDate():null,e=e==null?r:typeof e=="string"?o(e):typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?r:i.today().add(e,"d"):i.newDate(e),e}})});var bue=z(()=>{var xu=_n(),LVe=xn(),tk=xu.instance();function Sx(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}Sx.prototype=new xu.baseCalendar;LVe(Sx.prototype,{name:"Chinese",jdEpoch:17214255e-1,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(e,r){if(typeof e=="string"){var t=e.match(DVe);return t?t[0]:""}var a=this._validateYear(e),n=e.month(),i=""+this.toChineseMonth(a,n);return r&&i.length<2&&(i="0"+i),this.isIntercalaryMonth(a,n)&&(i+="i"),i},monthNames:function(e){if(typeof e=="string"){var r=e.match(EVe);return r?r[0]:""}var t=this._validateYear(e),a=e.month(),n=this.toChineseMonth(t,a),i=["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"][n-1];return this.isIntercalaryMonth(t,a)&&(i="\u95F0"+i),i},monthNamesShort:function(e){if(typeof e=="string"){var r=e.match(PVe);return r?r[0]:""}var t=this._validateYear(e),a=e.month(),n=this.toChineseMonth(t,a),i=["\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u5341\u4E00","\u5341\u4E8C"][n-1];return this.isIntercalaryMonth(t,a)&&(i="\u95F0"+i),i},parseMonth:function(e,r){e=this._validateYear(e);var t=parseInt(r),a;if(isNaN(t))r[0]==="\u95F0"&&(a=!0,r=r.substring(1)),r[r.length-1]==="\u6708"&&(r=r.substring(0,r.length-1)),t=1+["\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u5341\u4E00","\u5341\u4E8C"].indexOf(r);else{var n=r[r.length-1];a=n==="i"||n==="I"}var i=this.toMonthIndex(e,t,a);return i},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(e,r){if(e.year&&(e=e.year()),typeof e!="number"||e<1888||e>2111)throw r.replace(/\{0\}/,this.local.name);return e},toMonthIndex:function(e,r,t){var a=this.intercalaryMonth(e),n=t&&r!==a;if(n||r<1||r>12)throw xu.local.invalidMonth.replace(/\{0\}/,this.local.name);var i;return a?!t&&r<=a?i=r-1:i=r:i=r-1,i},toChineseMonth:function(e,r){e.year&&(e=e.year(),r=e.month());var t=this.intercalaryMonth(e),a=t?12:11;if(r<0||r>a)throw xu.local.invalidMonth.replace(/\{0\}/,this.local.name);var n;return t?r>13;return t},isIntercalaryMonth:function(e,r){e.year&&(e=e.year(),r=e.month());var t=this.intercalaryMonth(e);return!!t&&t===r},leapYear:function(e){return this.intercalaryMonth(e)!==0},weekOfYear:function(e,r,t){var a=this._validateYear(e,xu.local.invalidyear),n=wu[a-wu[0]],i=n>>9&4095,o=n>>5&15,l=n&31,s;s=tk.newDate(i,o,l),s.add(4-(s.dayOfWeek()||7),"d");var u=this.toJD(e,r,t)-s.toJD();return 1+Math.floor(u/7)},monthsInYear:function(e){return this.leapYear(e)?13:12},daysInMonth:function(e,r){e.year&&(r=e.month(),e=e.year()),e=this._validateYear(e);var t=_u[e-_u[0]],a=t>>13,n=a?12:11;if(r>n)throw xu.local.invalidMonth.replace(/\{0\}/,this.local.name);var i=t&1<<12-r?30:29;return i},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,i,t,xu.local.invalidDate);e=this._validateYear(a.year()),r=a.month(),t=a.day();var n=this.isIntercalaryMonth(e,r),i=this.toChineseMonth(e,r),o=FVe(e,i,t,n);return tk.toJD(o.year,o.month,o.day)},fromJD:function(e){var r=tk.fromJD(e),t=RVe(r.year(),r.month(),r.day()),a=this.toMonthIndex(t.year,t.month,t.isIntercalary);return this.newDate(t.year,a,t.day)},fromString:function(e){var r=e.match(CVe),t=this._validateYear(+r[1]),a=+r[2],n=!!r[3],i=this.toMonthIndex(t,a,n),o=+r[4];return this.newDate(t,i,o)},add:function(e,r,t){var a=e.year(),n=e.month(),i=this.isIntercalaryMonth(a,n),o=this.toChineseMonth(a,n),l=Object.getPrototypeOf(Sx.prototype).add.call(this,e,r,t);if(t==="y"){var s=l.year(),u=l.month(),f=this.isIntercalaryMonth(s,o),c=i&&f?this.toMonthIndex(s,o,!0):this.toMonthIndex(s,o,!1);c!==u&&l.month(c)}return l}});var CVe=/^\s*(-?\d\d\d\d|\d\d)[-/](\d?\d)([iI]?)[-/](\d?\d)/m,DVe=/^\d?\d[iI]?/m,EVe=/^闰?十?[一二三四五六七八九]?月/m,PVe=/^闰?十?[一二三四五六七八九]?/m;xu.calendars.chinese=Sx;var _u=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],wu=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904];function RVe(e,r,t,a){var n,i;if(typeof e=="object")n=e,i=r||{};else{var o=typeof e=="number"&&e>=1888&&e<=2111;if(!o)throw new Error("Solar year outside range 1888-2111");var l=typeof r=="number"&&r>=1&&r<=12;if(!l)throw new Error("Solar month outside range 1 - 12");var s=typeof t=="number"&&t>=1&&t<=31;if(!s)throw new Error("Solar day outside range 1 - 31");n={year:e,month:r,day:t},i=a||{}}var u=wu[n.year-wu[0]],f=n.year<<9|n.month<<5|n.day;i.year=f>=u?n.year:n.year-1,u=wu[i.year-wu[0]];var c=u>>9&4095,v=u>>5&15,d=u&31,p,y=new Date(c,v-1,d),m=new Date(n.year,n.month-1,n.day);p=Math.round((m-y)/(24*3600*1e3));var b=_u[i.year-_u[0]],A;for(A=0;A<13;A++){var w=b&1<<12-A?30:29;if(p>13;return!x||A=1888&&e<=2111;if(!l)throw new Error("Lunar year outside range 1888-2111");var s=typeof r=="number"&&r>=1&&r<=12;if(!s)throw new Error("Lunar month outside range 1 - 12");var u=typeof t=="number"&&t>=1&&t<=30;if(!u)throw new Error("Lunar day outside range 1 - 30");var f;typeof a=="object"?(f=!1,i=a):(f=!!a,i=n||{}),o={year:e,month:r,day:t,isIntercalary:f}}var c;c=o.day-1;var v=_u[o.year-_u[0]],d=v>>13,p;d&&(o.month>d||o.isIntercalary)?p=o.month:p=o.month-1;for(var y=0;y>9&4095,w=b>>5&15,x=b&31,_=new Date(A,w-1,x+c);return i.year=_.getFullYear(),i.month=1+_.getMonth(),i.day=_.getDate(),i}});var xue=z(()=>{var nc=_n(),zVe=xn();function ak(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}ak.prototype=new nc.baseCalendar;zVe(ak.prototype,{name:"Coptic",jdEpoch:18250295e-1,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Coptic",epochs:["BAM","AM"],monthNames:["Thout","Paopi","Hathor","Koiak","Tobi","Meshir","Paremhat","Paremoude","Pashons","Paoni","Epip","Mesori","Pi Kogi Enavot"],monthNamesShort:["Tho","Pao","Hath","Koi","Tob","Mesh","Pat","Pad","Pash","Pao","Epi","Meso","PiK"],dayNames:["Tkyriaka","Pesnau","Pshoment","Peftoou","Ptiou","Psoou","Psabbaton"],dayNamesShort:["Tky","Pes","Psh","Pef","Pti","Pso","Psa"],dayNamesMin:["Tk","Pes","Psh","Pef","Pt","Pso","Psa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,nc.local.invalidYear),t=r.year()+(r.year()<0?1:0);return t%4===3||t%4===-1},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,nc.local.invalidYear||nc.regionalOptions[""].invalidYear),13},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,nc.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===13&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,nc.local.invalidDate);return e=a.year(),e<0&&e++,a.day()+(a.month()-1)*30+(e-1)*365+Math.floor(e/4)+this.jdEpoch-1},fromJD:function(e){var r=Math.floor(e)+.5-this.jdEpoch,t=Math.floor((r-Math.floor((r+366)/1461))/365)+1;t<=0&&t--,r=Math.floor(e)+.5-this.newDate(t,1,1).toJD();var a=Math.floor(r/30)+1,n=r-(a-1)*30+1;return this.newDate(t,a,n)}});nc.calendars.coptic=ak});var _ue=z(()=>{var hs=_n(),NVe=xn();function nk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}nk.prototype=new hs.baseCalendar;NVe(nk.prototype,{name:"Discworld",jdEpoch:17214255e-1,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Discworld",epochs:["BUC","UC"],monthNames:["Ick","Offle","February","March","April","May","June","Grune","August","Spune","Sektober","Ember","December"],monthNamesShort:["Ick","Off","Feb","Mar","Apr","May","Jun","Gru","Aug","Spu","Sek","Emb","Dec"],dayNames:["Sunday","Octeday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Oct","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Oc","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:2,isRTL:!1}},leapYear:function(e){return this._validate(e,this.minMonth,this.minDay,hs.local.invalidYear),!1},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,hs.local.invalidYear),13},daysInYear:function(e){return this._validate(e,this.minMonth,this.minDay,hs.local.invalidYear),400},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/8)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,hs.local.invalidMonth);return this.daysPerMonth[t.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(e,r,t){var a=this._validate(e,r,t,hs.local.invalidDate);return(a.day()+1)%8},weekDay:function(e,r,t){var a=this.dayOfWeek(e,r,t);return a>=2&&a<=6},extraInfo:function(e,r,t){var a=this._validate(e,r,t,hs.local.invalidDate);return{century:IVe[Math.floor((a.year()-1)/100)+1]||""}},toJD:function(e,r,t){var a=this._validate(e,r,t,hs.local.invalidDate);return e=a.year()+(a.year()<0?1:0),r=a.month(),t=a.day(),t+(r>1?16:0)+(r>2?(r-2)*32:0)+(e-1)*400+this.jdEpoch-1},fromJD:function(e){e=Math.floor(e+.5)-Math.floor(this.jdEpoch)-1;var r=Math.floor(e/400)+1;e-=(r-1)*400,e+=e>15?16:0;var t=Math.floor(e/32)+1,a=e-(t-1)*32+1;return this.newDate(r<=0?r-1:r,t,a)}});var IVe={20:"Fruitbat",21:"Anchovy"};hs.calendars.discworld=nk});var wue=z(()=>{var ic=_n(),BVe=xn();function ik(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}ik.prototype=new ic.baseCalendar;BVe(ik.prototype,{name:"Ethiopian",jdEpoch:17242205e-1,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,ic.local.invalidYear),t=r.year()+(r.year()<0?1:0);return t%4===3||t%4===-1},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,ic.local.invalidYear||ic.regionalOptions[""].invalidYear),13},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,ic.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===13&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,ic.local.invalidDate);return e=a.year(),e<0&&e++,a.day()+(a.month()-1)*30+(e-1)*365+Math.floor(e/4)+this.jdEpoch-1},fromJD:function(e){var r=Math.floor(e)+.5-this.jdEpoch,t=Math.floor((r-Math.floor((r+366)/1461))/365)+1;t<=0&&t--,r=Math.floor(e)+.5-this.newDate(t,1,1).toJD();var a=Math.floor(r/30)+1,n=r-(a-1)*30+1;return this.newDate(t,a,n)}});ic.calendars.ethiopian=ik});var Aue=z(()=>{var Au=_n(),OVe=xn();function ok(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}ok.prototype=new Au.baseCalendar;OVe(ok.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Au.local.invalidYear);return this._leapYear(r.year())},_leapYear:function(e){return e=e<0?e+1:e,qx(e*7+1,19)<7},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,Au.local.invalidYear),this._leapYear(e.year?e.year():e)?13:12},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Au.local.invalidYear);return e=r.year(),this.toJD(e===-1?1:e+1,7,1)-this.toJD(e,7,1)},daysInMonth:function(e,r){return e.year&&(r=e.month(),e=e.year()),this._validate(e,r,this.minDay,Au.local.invalidMonth),r===12&&this.leapYear(e)||r===8&&qx(this.daysInYear(e),10)===5?30:r===9&&qx(this.daysInYear(e),10)===3?29:this.daysPerMonth[r-1]},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==6},extraInfo:function(e,r,t){var a=this._validate(e,r,t,Au.local.invalidDate);return{yearType:(this.leapYear(a)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(a)%10-3]}},toJD:function(e,r,t){var a=this._validate(e,r,t,Au.local.invalidDate);e=a.year(),r=a.month(),t=a.day();var n=e<=0?e+1:e,i=this.jdEpoch+this._delay1(n)+this._delay2(n)+t+1;if(r<7){for(var o=7;o<=this.monthsInYear(e);o++)i+=this.daysInMonth(e,o);for(var o=1;o=this.toJD(r===-1?1:r+1,7,1);)r++;for(var t=ethis.toJD(r,t,this.daysInMonth(r,t));)t++;var a=e-this.toJD(r,t,1)+1;return this.newDate(r,t,a)}});function qx(e,r){return e-r*Math.floor(e/r)}Au.calendars.hebrew=ok});var Tue=z(()=>{var u1=_n(),HVe=xn();function lk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}lk.prototype=new u1.baseCalendar;HVe(lk.prototype,{name:"Islamic",jdEpoch:19484395e-1,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-kham\u012Bs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,u1.local.invalidYear);return(r.year()*11+14)%30<11},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){return this.leapYear(e)?355:354},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,u1.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===12&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==5},toJD:function(e,r,t){var a=this._validate(e,r,t,u1.local.invalidDate);return e=a.year(),r=a.month(),t=a.day(),e=e<=0?e+1:e,t+Math.ceil(29.5*(r-1))+(e-1)*354+Math.floor((3+11*e)/30)+this.jdEpoch-1},fromJD:function(e){e=Math.floor(e)+.5;var r=Math.floor((30*(e-this.jdEpoch)+10646)/10631);r=r<=0?r-1:r;var t=Math.min(12,Math.ceil((e-29-this.toJD(r,1,1))/29.5)+1),a=e-this.toJD(r,t,1)+1;return this.newDate(r,t,a)}});u1.calendars.islamic=lk});var Mue=z(()=>{var f1=_n(),UVe=xn();function sk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}sk.prototype=new f1.baseCalendar;UVe(sk.prototype,{name:"Julian",jdEpoch:17214235e-1,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,f1.local.invalidYear),t=r.year()<0?r.year()+1:r.year();return t%4===0},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(4-(a.dayOfWeek()||7),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,f1.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,f1.local.invalidDate);return e=a.year(),r=a.month(),t=a.day(),e<0&&e++,r<=2&&(e--,r+=12),Math.floor(365.25*(e+4716))+Math.floor(30.6001*(r+1))+t-1524.5},fromJD:function(e){var r=Math.floor(e+.5),t=r+1524,a=Math.floor((t-122.1)/365.25),n=Math.floor(365.25*a),i=Math.floor((t-n)/30.6001),o=i-Math.floor(i<14?1:13),l=a-Math.floor(o>2?4716:4715),s=t-n-Math.floor(30.6001*i);return l<=0&&l--,this.newDate(l,o,s)}});f1.calendars.julian=sk});var Sue=z(()=>{var _o=_n(),GVe=xn();function fk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}fk.prototype=new _o.baseCalendar;GVe(fk.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(e){return this._validate(e,this.minMonth,this.minDay,_o.local.invalidYear),!1},formatYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,_o.local.invalidYear);e=r.year();var t=Math.floor(e/400);e=e%400,e+=e<0?400:0;var a=Math.floor(e/20);return t+"."+a+"."+e%20},forYear:function(e){if(e=e.split("."),e.length<3)throw"Invalid Mayan year";for(var r=0,t=0;t19||t>0&&a<0)throw"Invalid Mayan year";r=r*20+a}return r},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,_o.local.invalidYear),18},weekOfYear:function(e,r,t){return this._validate(e,r,t,_o.local.invalidDate),0},daysInYear:function(e){return this._validate(e,this.minMonth,this.minDay,_o.local.invalidYear),360},daysInMonth:function(e,r){return this._validate(e,r,this.minDay,_o.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(e,r,t){var a=this._validate(e,r,t,_o.local.invalidDate);return a.day()},weekDay:function(e,r,t){return this._validate(e,r,t,_o.local.invalidDate),!0},extraInfo:function(e,r,t){var a=this._validate(e,r,t,_o.local.invalidDate),n=a.toJD(),i=this._toHaab(n),o=this._toTzolkin(n);return{haabMonthName:this.local.haabMonths[i[0]-1],haabMonth:i[0],haabDay:i[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(e){e-=this.jdEpoch;var r=uk(e+8+340,365);return[Math.floor(r/20)+1,uk(r,20)]},_toTzolkin:function(e){return e-=this.jdEpoch,[kue(e+20,20),kue(e+4,13)]},toJD:function(e,r,t){var a=this._validate(e,r,t,_o.local.invalidDate);return a.day()+a.month()*20+a.year()*360+this.jdEpoch},fromJD:function(e){e=Math.floor(e)+.5-this.jdEpoch;var r=Math.floor(e/360);e=e%360,e+=e<0?360:0;var t=Math.floor(e/20),a=e%20;return this.newDate(r,t,a)}});function uk(e,r){return e-r*Math.floor(e/r)}function kue(e,r){return uk(e-1,r)+1}_o.calendars.mayan=fk});var Lue=z(()=>{var oc=_n(),YVe=xn();function ck(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}ck.prototype=new oc.baseCalendar;var que=oc.instance("gregorian");YVe(ck.prototype,{name:"Nanakshahi",jdEpoch:22576735e-1,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,oc.local.invalidYear||oc.regionalOptions[""].invalidYear);return que.leapYear(r.year()+(r.year()<1?1:0)+1469)},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(1-(a.dayOfWeek()||7),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,oc.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===12&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(n,r,t){var a=this._validate(n,r,t,oc.local.invalidMonth),n=a.year();n<0&&n++;for(var i=a.day(),o=1;o=this.toJD(r+1,1,1);)r++;for(var t=e-Math.floor(this.toJD(r,1,1)+.5)+1,a=1;t>this.daysInMonth(r,a);)t-=this.daysInMonth(r,a),a++;return this.newDate(r,a,t)}});oc.calendars.nanakshahi=ck});var Cue=z(()=>{var lc=_n(),VVe=xn();function vk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}vk.prototype=new lc.baseCalendar;VVe(vk.prototype,{name:"Nepali",jdEpoch:17007095e-1,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(e){return this.daysInYear(e)!==this.daysPerYear},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,lc.local.invalidYear);if(e=r.year(),typeof this.NEPALI_CALENDAR_DATA[e]=="undefined")return this.daysPerYear;for(var t=0,a=this.minMonth;a<=12;a++)t+=this.NEPALI_CALENDAR_DATA[e][a];return t},daysInMonth:function(e,r){return e.year&&(r=e.month(),e=e.year()),this._validate(e,r,this.minDay,lc.local.invalidMonth),typeof this.NEPALI_CALENDAR_DATA[e]=="undefined"?this.daysPerMonth[r-1]:this.NEPALI_CALENDAR_DATA[e][r]},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==6},toJD:function(e,r,t){var a=this._validate(e,r,t,lc.local.invalidDate);e=a.year(),r=a.month(),t=a.day();var n=lc.instance(),i=0,o=r,l=e;this._createMissingCalendarData(e);var s=e-(o>9||o===9&&t>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(r!==9&&(i=t,o--);o!==9;)o<=0&&(o=12,l--),i+=this.NEPALI_CALENDAR_DATA[l][o],o--;return r===9?(i+=t-this.NEPALI_CALENDAR_DATA[l][0],i<0&&(i+=n.daysInYear(s))):i+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],n.newDate(s,1,1).add(i,"d").toJD()},fromJD:function(e){var r=lc.instance(),t=r.fromJD(e),a=t.year(),n=t.dayOfYear(),i=a+56;this._createMissingCalendarData(i);for(var o=9,l=this.NEPALI_CALENDAR_DATA[i][0],s=this.NEPALI_CALENDAR_DATA[i][o]-l+1;n>s;)o++,o>12&&(o=1,i++),s+=this.NEPALI_CALENDAR_DATA[i][o];var u=this.NEPALI_CALENDAR_DATA[i][o]-(s-n);return this.newDate(i,o,u)},_createMissingCalendarData:function(e){var r=this.daysPerMonth.slice(0);r.unshift(17);for(var t=e-1;t{var Nv=_n(),jVe=xn();function Cx(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}function Lx(e){var r=e-475;e<0&&r++;var t=.242197,a=t*r,n=t*(r+1),i=a-Math.floor(a),o=n-Math.floor(n);return i>o}Cx.prototype=new Nv.baseCalendar;jVe(Cx.prototype,{name:"Persian",jdEpoch:19483205e-1,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Persian",epochs:["BP","AP"],monthNames:["Farvardin","Ordibehesht","Khordad","Tir","Mordad","Shahrivar","Mehr","Aban","Azar","Dey","Bahman","Esfand"],monthNamesShort:["Far","Ord","Kho","Tir","Mor","Sha","Meh","Aba","Aza","Dey","Bah","Esf"],dayNames:["Yekshanbeh","Doshanbeh","Seshanbeh","Chah\u0101rshanbeh","Panjshanbeh","Jom'eh","Shanbeh"],dayNamesShort:["Yek","Do","Se","Cha","Panj","Jom","Sha"],dayNamesMin:["Ye","Do","Se","Ch","Pa","Jo","Sh"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Nv.local.invalidYear);return Lx(r.year())},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-((a.dayOfWeek()+1)%7),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,Nv.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===12&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==5},toJD:function(e,r,t){var a=this._validate(e,r,t,Nv.local.invalidDate);e=a.year(),r=a.month(),t=a.day();var n=0;if(e>0)for(var i=1;i0?e-1:e)*365+n+this.jdEpoch-1},fromJD:function(e){e=Math.floor(e)+.5;var r=475+(e-this.toJD(475,1,1))/365.242197,t=Math.floor(r);t<=0&&t--,e>this.toJD(t,12,Lx(t)?30:29)&&(t++,t===0&&t++);var a=e-this.toJD(t,1,1)+1,n=a<=186?Math.ceil(a/31):Math.ceil((a-6)/30),i=e-this.toJD(t,n,1)+1;return this.newDate(t,n,i)}});Nv.calendars.persian=Cx;Nv.calendars.jalali=Cx});var Eue=z(()=>{var sc=_n(),WVe=xn(),Dx=sc.instance();function hk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}hk.prototype=new sc.baseCalendar;WVe(hk.prototype,{name:"Taiwan",jdEpoch:24194025e-1,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,sc.local.invalidYear),t=this._t2gYear(r.year());return Dx.leapYear(t)},weekOfYear:function(n,r,t){var a=this._validate(n,this.minMonth,this.minDay,sc.local.invalidYear),n=this._t2gYear(a.year());return Dx.weekOfYear(n,a.month(),a.day())},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,sc.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(n,r,t){var a=this._validate(n,r,t,sc.local.invalidDate),n=this._t2gYear(a.year());return Dx.toJD(n,a.month(),a.day())},fromJD:function(e){var r=Dx.fromJD(e),t=this._g2tYear(r.year());return this.newDate(t,r.month(),r.day())},_t2gYear:function(e){return e+this.yearsOffset+(e>=-this.yearsOffset&&e<=-1?1:0)},_g2tYear:function(e){return e-this.yearsOffset-(e>=1&&e<=this.yearsOffset?1:0)}});sc.calendars.taiwan=hk});var Pue=z(()=>{var uc=_n(),XVe=xn(),Ex=uc.instance();function dk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}dk.prototype=new uc.baseCalendar;XVe(dk.prototype,{name:"Thai",jdEpoch:15230985e-1,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,uc.local.invalidYear),t=this._t2gYear(r.year());return Ex.leapYear(t)},weekOfYear:function(n,r,t){var a=this._validate(n,this.minMonth,this.minDay,uc.local.invalidYear),n=this._t2gYear(a.year());return Ex.weekOfYear(n,a.month(),a.day())},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,uc.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(n,r,t){var a=this._validate(n,r,t,uc.local.invalidDate),n=this._t2gYear(a.year());return Ex.toJD(n,a.month(),a.day())},fromJD:function(e){var r=Ex.fromJD(e),t=this._g2tYear(r.year());return this.newDate(t,r.month(),r.day())},_t2gYear:function(e){return e-this.yearsOffset-(e>=1&&e<=this.yearsOffset?1:0)},_g2tYear:function(e){return e+this.yearsOffset+(e>=-this.yearsOffset&&e<=-1?1:0)}});uc.calendars.thai=dk});var Rue=z(()=>{var fc=_n(),ZVe=xn();function pk(e){this.local=this.regionalOptions[e||""]||this.regionalOptions[""]}pk.prototype=new fc.baseCalendar;ZVe(pk.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thal\u0101th\u0101\u2019","Yawm al-Arba\u2018\u0101\u2019","Yawm al-Kham\u012Bs","Yawm al-Jum\u2018a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,fc.local.invalidYear);return this.daysInYear(r.year())===355},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),"d"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){for(var r=0,t=1;t<=12;t++)r+=this.daysInMonth(e,t);return r},daysInMonth:function(e,r){for(var t=this._validate(e,r,this.minDay,fc.local.invalidMonth),a=t.toJD()-24e5+.5,n=0,i=0;ia)return Tu[n]-Tu[n-1];n++}return 30},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==5},toJD:function(e,r,t){var a=this._validate(e,r,t,fc.local.invalidDate),n=12*(a.year()-1)+a.month()-15292,i=a.day()+Tu[n-1]-1;return i+24e5-.5},fromJD:function(e){for(var r=e-24e5+.5,t=0,a=0;ar);a++)t++;var n=t+15292,i=Math.floor((n-1)/12),o=i+1,l=n-12*i,s=r-Tu[t-1]+1;return this.newDate(o,l,s)},isValid:function(e,r,t){var a=fc.baseCalendar.prototype.isValid.apply(this,arguments);return a&&(e=e.year!=null?e.year:e,a=e>=1276&&e<=1500),a},_validate:function(e,r,t,a){var n=fc.baseCalendar.prototype._validate.apply(this,arguments);if(n.year<1276||n.year>1500)throw a.replace(/\{0\}/,this.local.name);return n}});fc.calendars.ummalqura=pk;var Tu=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]});var zue=z((anr,Fue)=>{"use strict";Fue.exports=_n();gue();bue();xue();_ue();wue();Aue();Tue();Mue();Sue();Lue();Cue();Due();Eue();Pue();Rue()});var Gue=z((nnr,Uue)=>{"use strict";var Iue=zue(),c1=ke(),Bue=(jt(),ze(Zt)),$Ve=Bue.EPOCHJD,JVe=Bue.ONEDAY,gk={valType:"enumerated",values:c1.sortObjectKeys(Iue.calendars),editType:"calc",dflt:"gregorian"},Oue=function(e,r,t,a){var n={};return n[t]=gk,c1.coerce(e,r,n,t,a)},KVe=function(e,r,t,a){for(var n=0;n{"use strict";Yue.exports=Gue()});var nje=z((onr,Wue)=>{var jue=SX();jue.register([LZ(),m$(),NJ(),nK(),gK(),gQ(),EQ(),_ee(),$ee(),wse(),hue(),Vue()]);Wue.exports=jue});return nje();})(); +/*! Bundled license information: + +native-promise-only/lib/npo.src.js: + (*! Native Promise Only + v0.8.1 (c) Kyle Simpson + MIT License: http://getify.mit-license.org + *) + +polybooljs/index.js: + (* + * @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc + * @license MIT + * @preserve Project Home: https://github.com/voidqk/polybooljs + *) + +ieee754/index.js: + (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *) + +buffer/index.js: + (*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + *) + +safe-buffer/index.js: + (*! safe-buffer. MIT License. Feross Aboukhadijeh *) + +assert/build/internal/util/comparisons.js: + (*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + *) + +object-assign/index.js: + (* + object-assign + (c) Sindre Sorhus + @license MIT + *) +*/ + +window.Plotly = Plotly; +return Plotly; +})); \ No newline at end of file diff --git a/gui/vendor/plotly.css b/gui/vendor/plotly.css new file mode 100644 index 00000000..415af14b --- /dev/null +++ b/gui/vendor/plotly.css @@ -0,0 +1,49 @@ +/* Static copy of the runtime rules installed by plotly-cartesian.min.js 4.1.2. + Keeping them same-origin lets the application retain style-src 'self'. */ +.js-plotly-plot .plotly,.js-plotly-plot .plotly div{direction:ltr;font-family:"Open Sans",verdana,arial,sans-serif;margin:0;padding:0;border:0} +.js-plotly-plot .plotly input,.js-plotly-plot .plotly button{font-family:"Open Sans",verdana,arial,sans-serif} +.js-plotly-plot .plotly input:focus,.js-plotly-plot .plotly button:focus{outline:none} +.js-plotly-plot .plotly a{text-decoration:none} +.js-plotly-plot .plotly a:hover{text-decoration:none} +.js-plotly-plot .plotly .crisp{shape-rendering:crispedges} +.js-plotly-plot .plotly .user-select-none{user-select:none} +.js-plotly-plot .plotly svg a{fill:#447adb} +.js-plotly-plot .plotly svg a:hover{fill:#3c6dc5} +.js-plotly-plot .plotly .main-svg{position:absolute;top:0;left:0;pointer-events:none} +.js-plotly-plot .plotly .main-svg .draglayer{pointer-events:all} +.js-plotly-plot .plotly .cursor-default{cursor:default} +.js-plotly-plot .plotly .cursor-pointer{cursor:pointer} +.js-plotly-plot .plotly .cursor-crosshair{cursor:crosshair} +.js-plotly-plot .plotly .cursor-move{cursor:move} +.js-plotly-plot .plotly .cursor-col-resize{cursor:col-resize} +.js-plotly-plot .plotly .cursor-row-resize{cursor:row-resize} +.js-plotly-plot .plotly .cursor-ns-resize{cursor:ns-resize} +.js-plotly-plot .plotly .cursor-ew-resize{cursor:ew-resize} +.js-plotly-plot .plotly .cursor-sw-resize{cursor:sw-resize} +.js-plotly-plot .plotly .cursor-s-resize{cursor:s-resize} +.js-plotly-plot .plotly .cursor-se-resize{cursor:se-resize} +.js-plotly-plot .plotly .cursor-w-resize{cursor:w-resize} +.js-plotly-plot .plotly .cursor-e-resize{cursor:e-resize} +.js-plotly-plot .plotly .cursor-nw-resize{cursor:nw-resize} +.js-plotly-plot .plotly .cursor-n-resize{cursor:n-resize} +.js-plotly-plot .plotly .cursor-ne-resize{cursor:ne-resize} +.js-plotly-plot .plotly .cursor-grab{cursor:grab} +.js-plotly-plot .plotly .modebar{position:absolute;top:2px;right:2px} +.js-plotly-plot .plotly .ease-bg{transition:background-color .3s} +.js-plotly-plot .plotly .modebar--hover>:not(.watermark){opacity:0;transition:opacity .3s} +.js-plotly-plot .plotly:hover .modebar--hover .modebar-group,.js-plotly-plot .plotly:focus-within .modebar--hover .modebar-group{opacity:1} +.js-plotly-plot .plotly .modebar-group{float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap} +.js-plotly-plot .plotly .modebar-group a{display:grid;place-content:center} +.js-plotly-plot .plotly .modebar-btn{position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;border:none;background:transparent} +.js-plotly-plot .plotly .modebar-btn svg{position:relative} +.js-plotly-plot .plotly .modebar-btn:focus-visible{outline:1px solid #000;outline-offset:1px;border-radius:3px} +.js-plotly-plot .plotly .modebar.vertical{display:flex;flex-flow:column wrap;align-content:flex-end;max-height:100%} +.js-plotly-plot .plotly .modebar.vertical svg{top:-1px} +.js-plotly-plot .plotly .modebar.vertical .modebar-group{display:block;float:none;padding-left:0;padding-bottom:8px} +.js-plotly-plot .plotly .modebar.vertical .modebar-group .modebar-btn{display:block;text-align:center} +.js-plotly-plot .plotly [data-title]::before,.js-plotly-plot .plotly [data-title]::after{position:absolute;transform:translate3d(0,0,0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%} +.js-plotly-plot .plotly [data-title]:hover::before,.js-plotly-plot .plotly [data-title]:hover::after{display:block;opacity:1} +.js-plotly-plot .plotly [data-title]::before{content:"";background:transparent;border:6px solid transparent;border-bottom-color:#69738a;z-index:1002;margin-top:-12px;margin-right:-6px} +.js-plotly-plot .plotly [data-title]::after{content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px} +.js-plotly-plot .plotly .vertical [data-title]::before,.js-plotly-plot .plotly .vertical [data-title]::after{top:0;right:200%} +.js-plotly-plot .plotly .vertical [data-title]::before{border-color:transparent transparent transparent #69738a;margin-top:8px;margin-right:-30px} diff --git a/gui/visualization.js b/gui/visualization.js new file mode 100644 index 00000000..7e9c46f0 --- /dev/null +++ b/gui/visualization.js @@ -0,0 +1,49 @@ +import { sequenceOffset } from './protocol.js'; + +export function visualizationUrl(row, request) { + // Native seq1 is target and seq2 is query; both structures run 5′ to 3′. + const structures = row.hybridDP?.split('&'); + if (structures?.length !== 2) throw new Error('The interaction has no dot-bracket structure.'); + const sequences = [], fullStructures = [], starts = []; + for (const [index, strand] of ['target', 'query'].entries()) { + const number = index + 1, start = request.parameters[index ? 'qIdxPos0' : 'tIdxPos0']; + const record = request[strand].records.find((record) => record.id.replaceAll(';', '_') === row[`id${number}`]); + if (!record) throw new Error('The interaction sequence was not found in this run.'); + if (start === 0) throw new Error('vaRRI requires nonzero sequence start indices. Choose a nonzero start index to visualize this pair.'); + const offset = sequenceOffset(row[`start${number}`], start), structure = structures[index]; + const end = sequenceOffset(row[`end${number}`], start); + if (offset < 0 || end >= record.sequence.length || structure.length !== end - offset + 1 || /[^.()]/.test(structure)) throw new Error('The interaction structure does not match its sequence coordinates.'); + sequences.push(record.sequence); starts.push(start); + fullStructures.push('.'.repeat(offset) + structure + '.'.repeat(record.sequence.length - end - 1)); + } + const url = new URL('https://backofenlab.github.io/vaRRI/'); + url.search = new URLSearchParams({ + sequence: sequences.join('&'), structure: fullStructures.join('&'), + seqName1: row.id1, seqName2: row.id2, startIndex1: starts[0], startIndex2: starts[1], + showRenderingOnly: 'true', forceLayout: 'false', forceLayoutLinearRRI: 'true', + cropping: 2 + }); + return url.href; +} + +export class InteractionVisualization { + constructor(root) { + this.frame = root.querySelector('[data-role=varri-frame]'); this.link = root.querySelector('[data-role=varri-link]'); + this.status = root.querySelector('[data-role=visualization-status]'); + } + clear() { + this.frame.removeAttribute('src'); this.frame.hidden = true; + this.link.removeAttribute('href'); this.link.hidden = true; + this.status.textContent = 'Select View on an interaction to visualize it.'; + } + show(row, request) { + this.clear(); + try { + const url = visualizationUrl(row, request); + this.frame.src = url; this.frame.hidden = false; + const fullUrl = new URL(url); fullUrl.searchParams.delete('showRenderingOnly'); + this.link.href = fullUrl.href; this.link.hidden = false; + this.status.textContent = `${row.id1} (${row.start1}–${row.end1}) & ${row.id2} (${row.start2}–${row.end2}), ${row.E.toFixed(2)} kcal/mol. If the viewer is unavailable, use Open in vaRRI to retry.`; + } catch (error) { this.status.textContent = error.message; } + } +} diff --git a/scripts/wasm/build.sh b/scripts/wasm/build.sh new file mode 100644 index 00000000..10499d68 --- /dev/null +++ b/scripts/wasm/build.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# Build every linked dependency for wasm32; never reuse native libraries. +set -euo pipefail +repo=$(cd "$(dirname "$0")/../.." && pwd) +build=${WASM_BUILD_DIR:-"$repo/build-wasm"} +mkdir -p "$build" +build=$(cd "$build" && pwd) +# Keep legacy RNAlib headers out of Boost's -I path: ordinary -I searches take +# precedence over the -isystem ViennaRNA paths produced by IntaRNA's configure. +prefix="$build/deps/common" +jobs=${JOBS:-2} +for tool in emcc em++ emar emranlib emconfigure emmake curl pkg-config node python3; do + command -v "$tool" >/dev/null || { echo "Missing tool: $tool" >&2; exit 1; } +done +mkdir -p "$build/downloads" "$build/sources" "$prefix" "$build/site/wasm" +fetch() { + bash "$repo/scripts/wasm/download.sh" "$1" "$build/downloads/$2" "$3" +} +fetch https://zlib.net/fossils/zlib-1.3.1.tar.gz zlib-1.3.1.tar.gz \ + 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23 +fetch https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.bz2 boost_1_87_0.tar.bz2 \ + af57be25cb4c4f4b413ed692fe378affb4352ea50fbe294a11ef548f4d527d89 +# CI supplies the newest stable 2.x manifest; local builds use the checked-in pin. +read -r vienna_version vienna_url vienna_sha256 < <( + python3 "$repo/scripts/wasm/vienna-release.py" --fields \ + --manifest "${WASM_VIENNA_RELEASE:-$repo/scripts/wasm/vienna-release.json}" +) +echo "Building ViennaRNA $vienna_version (SHA-256 $vienna_sha256)" +fetch "$vienna_url" "ViennaRNA-$vienna_version.tar.gz" "$vienna_sha256" +# Separate source, installed RNAlib and IntaRNA objects by archive identity so +# changing the release cannot reuse headers, libraries or objects from an old one. +vienna_id="vienna-$vienna_version-$vienna_sha256" +vienna_prefix="$build/deps/$vienna_id" +vienna_sources="$build/sources/$vienna_id" +intarna_build="$build/intarna-$vienna_id" + +# Keep pkg-config searches inside the WASM prefix, including configure probes. +export PKG_CONFIG_LIBDIR="$vienna_prefix/lib/pkgconfig:$prefix/lib/pkgconfig" +export PKG_CONFIG_PATH="$PKG_CONFIG_LIBDIR" +export CFLAGS='-O3 -fexceptions' +export CXXFLAGS='-O3 -fexceptions' +export CPPFLAGS="-I$vienna_prefix/include -I$prefix/include" +export LDFLAGS="-L$vienna_prefix/lib -L$prefix/lib -fexceptions" +if [[ ! -f "$prefix/lib/libz.a" ]]; then + tar -xzf "$build/downloads/zlib-1.3.1.tar.gz" -C "$build/sources" + (cd "$build/sources/zlib-1.3.1" + emconfigure ./configure --static --prefix="$prefix" + emmake make -j "$jobs" + emmake make install) +fi +if [[ ! -f "$prefix/.boost-1.87.0-js-exceptions-complete" ]]; then + tar -xjf "$build/downloads/boost_1_87_0.tar.bz2" -C "$build/sources" + (cd "$build/sources/boost_1_87_0" + ./bootstrap.sh --with-libraries=filesystem,program_options,regex,iostreams,serialization,system + ./b2 -j "$jobs" toolset=emscripten variant=release link=static threading=single \ + exception-handling=on exception-handling-method=js \ + --with-filesystem --with-program_options --with-regex --with-iostreams \ + --with-serialization --with-system cxxflags="-std=c++23 -fexceptions" \ + -sNO_BZIP2=1 -sNO_LZMA=1 -sNO_ZSTD=1 -sZLIB_INCLUDE="$prefix/include" \ + -sZLIB_LIBPATH="$prefix/lib" --prefix="$prefix" install) + touch "$prefix/.boost-1.87.0-js-exceptions-complete" +fi +if [[ ! -f "$vienna_prefix/.complete" ]]; then + mkdir -p "$vienna_sources" + tar -xzf "$build/downloads/ViennaRNA-$vienna_version.tar.gz" -C "$vienna_sources" + (cd "$vienna_sources/ViennaRNA-$vienna_version" + CPPFLAGS="$CPPFLAGS -I$PWD/src" emconfigure ./configure --host=wasm32-unknown-emscripten --prefix="$vienna_prefix" \ + --disable-shared --enable-static --disable-openmp --disable-pthreads \ + --disable-lto --disable-simd --disable-vectorize --disable-mpfr \ + --without-svm --without-gsl --without-swig --without-perl --without-python \ + --without-doc --without-cla --without-check --without-kinfold \ + --without-forester --without-rnalocmin --without-rnaxplorer + emmake make -C src/ViennaRNA -j "$jobs" + emmake make -C src/ViennaRNA install + emmake make install-pkgconfigDATA) + touch "$vienna_prefix/.complete" +fi + +# Legacy Autoconf probes declare exit()/inflateEnd() with the wrong signatures, +# which wasm-ld rejects. Verify real dependency APIs before caching those probes. +em++ -std=c++23 -O2 -fexceptions -I"$vienna_prefix/include" -I"$prefix/include" \ + "$repo/scripts/wasm/dependency-probe.cpp" -L"$vienna_prefix/lib" -L"$prefix/lib" \ + -lboost_filesystem -lboost_system -lboost_program_options -lboost_regex \ + -lboost_iostreams -lboost_serialization -lRNA -lz -o "$build/dependency-probe.js" +node "$build/dependency-probe.js" +export ac_cv_lib_boost_system_exit=yes +export ac_cv_lib_boost_filesystem_exit=yes +export ac_cv_lib_boost_program_options_exit=yes +export ac_cv_lib_boost_regex_exit=yes +export ac_cv_lib_boost_iostreams_exit=yes +export ac_cv_lib_z_inflateEnd=yes +# RNAlib's .pc embeds a native-only -Wl,-fno-lto; this is a static WASM build. +export VRNA_LIBS="-L$vienna_prefix/lib -lRNA -lm" + +# Use the native Autotools source lists and CLI entry point, with a JS output. +(cd "$repo" && bash autotools-init.sh) +mkdir -p "$intarna_build" +(cd "$intarna_build" + CXXFLAGS="$CXXFLAGS -Werror=inconsistent-missing-override" CPPFLAGS="-I$intarna_build/src -I$repo/src $CPPFLAGS" emconfigure "$repo/configure" --host=wasm32-unknown-emscripten \ + --disable-multithreading --disable-log-coloring --with-mdspan=kokkos \ + --with-vrna="$vienna_prefix" --with-boost="$prefix" \ + --with-boost-libdir="$prefix/lib" --with-zlib="$prefix" + emmake make -C src -j "$jobs" EXEEXT=.js \ + LDFLAGS="$LDFLAGS -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME=createIntaRNA -sENVIRONMENT=web,worker,node -sINVOKE_RUN=0 -sEXIT_RUNTIME=1 -sEXPORTED_RUNTIME_METHODS=FS,callMain -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=1073741824 -sSTACK_SIZE=8388608" + cp src/bin/IntaRNA.js "$build/site/wasm/intarna.js" + cp src/bin/IntaRNA.wasm "$build/site/wasm/intarna.wasm") +# ES modules also work in Node smoke tests without changing package scope. +printf '{"type":"module"}\n' > "$build/site/wasm/package.json" +node "$repo/scripts/wasm/write-build-info.mjs" "$repo" "$build/site" \ + "$(emcc -dumpversion)" "$(git -C "$repo" rev-parse HEAD)" \ + "$(git -C "$repo" status --porcelain --untracked-files=no)" \ + "$vienna_version" "$vienna_url" "$vienna_sha256" +echo "WASM assets: $build/site/wasm" diff --git a/scripts/wasm/dependency-probe.cpp b/scripts/wasm/dependency-probe.cpp new file mode 100644 index 00000000..bf428cb2 --- /dev/null +++ b/scripts/wasm/dependency-probe.cpp @@ -0,0 +1,26 @@ +// Link real APIs rather than the legacy configure macros' misdeclared exit(). +#include +#include +#include +#include +#include +#include +#include +extern "C" { +#include +} +int main() { + std::stringstream data; + boost::archive::binary_oarchive archive(data); + archive << 42; + boost::iostreams::filtering_ostream compressed; + compressed.push(boost::iostreams::gzip_compressor()); + compressed.push(data); + compressed << "RNA"; + compressed.reset(); + boost::program_options::options_description options("probe"); + options.add_options()("query", "RNA sequence"); + vrna_md_t model; + vrna_md_set_default(&model); + return boost::filesystem::exists("/") && boost::regex_match("RNA", boost::regex("RNA")) ? 0 : 1; +} diff --git a/scripts/wasm/download.sh b/scripts/wasm/download.sh new file mode 100644 index 00000000..359f7142 --- /dev/null +++ b/scripts/wasm/download.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# Cache only verified dependency archives; recover from invalid cached responses. +set -euo pipefail +url=$1 +destination=$2 +checksum=$3 + +# Verify existing archives too, including caches from earlier build scripts. +if [[ -f "$destination" ]]; then + if printf '%s %s\n' "$checksum" "$destination" | sha256sum --check --status; then + echo "$destination: OK (cached)" + exit 0 + fi + echo "Discarding invalid cached archive: $destination" >&2 + rm -- "$destination" +fi + +# Never promote HTTP error pages or incomplete transfers to the download cache. +partial="$destination.part" +trap 'rm -f -- "$partial"' EXIT +curl --fail --location --retry 3 "$url" -o "$partial" +printf '%s %s\n' "$checksum" "$partial" | sha256sum --check - +mv -- "$partial" "$destination" diff --git a/scripts/wasm/requirements-browser.txt b/scripts/wasm/requirements-browser.txt new file mode 100644 index 00000000..718f8e96 --- /dev/null +++ b/scripts/wasm/requirements-browser.txt @@ -0,0 +1 @@ +playwright==1.64.0 diff --git a/scripts/wasm/smoke-protocol.mjs b/scripts/wasm/smoke-protocol.mjs new file mode 100644 index 00000000..9dd90369 --- /dev/null +++ b/scripts/wasm/smoke-protocol.mjs @@ -0,0 +1,72 @@ +// Integration coverage of browser argument translation against the real CLI. +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { pathToFileURL } from 'node:url'; +import { DEFAULTS, CSV_COLUMNS, EVALUATION_EXAMPLE, prepareRequest, makeParameterDocument } from '../../gui/protocol.js'; +import { CSV_CATALOG } from '../../gui/columns.js'; +import { parseResults, projectCsv } from '../../gui/results.js'; +import { archiveFiles } from '../../gui/archive.js'; +const asset = resolve(process.argv[2] || 'build-wasm/site/wasm/intarna.js'); +const { default: createIntaRNA } = await import(pathToFileURL(asset)); +const compiledVersion = readFileSync(new URL('../build-info.txt', pathToFileURL(asset)), 'utf8'); +async function run(input, format = 'C') { + const request = prepareRequest({ ...DEFAULTS, ...input }); + const diagnostics = []; + const module = await createIntaRNA({ noInitialRun: true, locateFile: () => new URL('./intarna.wasm', pathToFileURL(asset)).href, print: (line) => diagnostics.push(line), printErr: (line) => diagnostics.push(line) }); + module.FS.writeFile('/parameter.json', JSON.stringify(makeParameterDocument(request, format))); + module.FS.mkdir('/output'); + const args = ['--parameterFile=/parameter.json']; + assert.equal(module.callMain(args), 0, `${args.join(' ')}\n${diagnostics.join('\n')}`); + const text = module.FS.readFile(format === 'C' ? '/results.csv' : '/report.txt', { encoding: 'utf8' }); + return { rows: format === 'C' ? parseResults(text) : [], text, fs: module.FS, request }; +} +const defaults = await run({ parameters: { outNumber: 10 } }); +assert.equal(defaults.rows.length, 10); +assert.equal(defaults.rows[0].E, -21.4); +const shifted = await run({ qIdxPos0: -3, tIdxPos0: -5 }); +assert.deepEqual(['start1', 'end1', 'start2', 'end2'].map((key) => shifted.rows[0][key]), [-5, 5, -3, 7]); +const multi = await run({ query: '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG', target: '>t1\nCCCUCCUCCC\n>t2\nCCCUCCUCCC', outputs: ['qMinE', 'tMinE'] }); +assert.equal(multi.rows.length, 4); +assert.ok(multi.rows.every((row) => row.deltaE === 0)); +assert.equal(multi.fs.readdir('/output').filter((name) => name.endsWith('.csv')).length, 8); +const pairwise = await run({ query: '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG', target: '>t1\nCCCUCCUCCC\n>t2\nCCCUCCUCCC', parameters: { outPairwise: true } }); +assert.equal(pairwise.rows.length, 2); +const evaluation = await run({ task: 'evaluation', rri: EVALUATION_EXAMPLE + ':1|||||||||&2|||||||||', outputs: ['qAcc', 'tPu'], csvColumns: CSV_CATALOG.map((c) => c.key) }); +assert.equal(evaluation.rows.length, 2); +assert.equal(evaluation.rows[0].E, -21.4); +assert.equal(evaluation.rows[0].seedE, 'NAN'); +assert.ok((await run({ task: 'evaluation', rri: EVALUATION_EXAMPLE }, 'D')).text.includes('-21.4')); +assert.ok((await run({ task: 'evaluation', rri: EVALUATION_EXAMPLE }, 'E')).text.length > 0); +const probabilities = await run({ parameters: { model: 'P' }, csvColumns: CSV_CATALOG.map((c) => c.key), outputs: ['bpProb', 'bpsvg', 'qSpotProb', 'tSpotProb', 'spotProb', 'pMinE'] }); +assert.equal(probabilities.rows.length, 1); +assert.ok(probabilities.fs.readFile('/output/bpsvg.svg', { encoding: 'utf8' }).includes('= 1); +console.log('Browser protocol: native-reference prediction/evaluation, signed coordinates, multi-FASTA, all columns, imported accessibility, energy/seed/helix/SHAPE options and output files passed'); + +// Execute exported parameter files in fresh engines with only archived inputs. +// Byte comparisons cover selected CSV, per-record extra files and report modes. +async function replayArchive(input) { + const original = await run(input), { request, fs } = original; + const outputs = fs.readdir('/output').filter((name) => name !== '.' && name !== '..').map((name) => ({ name, text: fs.readFile(`/output/${name}`, { encoding: 'utf8' }) })); + const reports = [['normal', 'N'], ['detailed', 'D'], ['ensemble', 'E']].filter(([key]) => request.outputs.includes(key)); + for (const [key, format] of reports) outputs.push({ name: `intarna-${key}.txt`, text: (await run(input, format)).text }); + const files = archiveFiles(request, { csv: original.text, files: outputs }, compiledVersion); + for (const config of ['parameters', ...reports.map(([key]) => key)]) { + const diagnostics = []; + const module = await createIntaRNA({ noInitialRun: true, locateFile: () => new URL('./intarna.wasm', pathToFileURL(asset)).href, print: (line) => diagnostics.push(line), printErr: (line) => diagnostics.push(line) }); + module.FS.writeFile('/parameter.json', files.find((file) => file.name === 'parameter.json').text); + const arguments_ = ['--parameterFile=/parameter.json', `--out=${config === 'parameters' ? 'intarna-interactions.csv' : `intarna-${config}.txt`}`]; + if (config !== 'parameters') arguments_.push(`--outMode=${reports.find(([key]) => key === config)[1]}`, `--outCsvCols=${CSV_COLUMNS}`, "--outCsvSort", ""); + assert.equal(module.callMain(arguments_), 0, diagnostics.join('\n')); + const expected = config === 'parameters' ? [{ name: 'intarna-interactions.csv', text: projectCsv(original.text, request.csvColumns) }, ...outputs.filter((file) => !file.name.startsWith('intarna-'))] : outputs.filter((file) => file.name === `intarna-${config}.txt`); + for (const file of expected) assert.equal(module.FS.readFile(`/${file.name}`, { encoding: 'utf8' }), file.text, file.name); + } +} +await replayArchive({ query: '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG', qIdxPos0: -3, tIdxPos0: -5, parameters: { temperature: 20, outNumber: 3, noSeed: true }, outputs: ['qMinE', 'tPu', 'normal', 'detailed'], csvColumns: ['id2', 'E'] }); +await replayArchive({ task: 'evaluation', rri: EVALUATION_EXAMPLE, parameters: { qShape: '1 0.2\n2 0.3' }, outputs: ['detailed', 'ensemble'] }); +await replayArchive({ parameters: { qAcc: 'P', qAccFile: accessibility.fs.readFile('/output/qPu.csv', { encoding: 'utf8' }), model: 'P' }, outputs: ['bpProb', 'bpsvg'], csvColumns: ['E'] }); +console.log('ZIP parameter replay: CSV, multi-FASTA/signed indices, non-default energy/seed options, SHAPE/accessibility imports, per-record outputs, probability SVG and ASCII/detailed/ensemble reports are byte-identical'); diff --git a/scripts/wasm/smoke.mjs b/scripts/wasm/smoke.mjs new file mode 100644 index 00000000..5bab9756 --- /dev/null +++ b/scripts/wasm/smoke.mjs @@ -0,0 +1,45 @@ +// Exercise the actual CLI and RNAlib in fresh WASM instances. +import assert from 'node:assert/strict'; +import { resolve } from 'node:path'; +import { pathToFileURL } from 'node:url'; +const asset = resolve(process.argv[2] || 'build-wasm/site/wasm/intarna.js'); +const { default: createIntaRNA } = await import(pathToFileURL(asset)); +async function predict(args) { + const diagnostics = []; + const module = await createIntaRNA({ + noInitialRun: true, + locateFile: () => new URL('./intarna.wasm', pathToFileURL(asset)).href, + print: (line) => diagnostics.push(line), + printErr: (line) => diagnostics.push(line), + }); + const code = module.callMain([...args, '--outMode=C', '--outOverlap=B', '--out=/results.csv']); + return { module, code, diagnostics: diagnostics.join('\n') }; +} +const columns = '--outCsvCols=id1,start1,end1,id2,start2,end2,E'; +const first = await predict([ + '--query=GGGAGGAGGG', '--target=CCCUCCUCCC', '--outNumber=10', columns, +]); +assert.equal(first.code, 0, first.diagnostics); +const csv = first.module.FS.readFile('/results.csv', { encoding: 'utf8' }); +assert.match(csv, /^id1;start1;end1;id2;start2;end2;E\n/); +// Reference from the native CLI with the same Turner/default-accessibility model. +assert.equal(csv.trim().split('\n')[1], 'target;1;10;query;1;10;-21.4'); +assert.equal(csv.trim().split('\n').length, 11); + +// Hairpin-forming strands check nonzero accessibility costs as well as pairing. +const structured = await predict([ + '--query=GGGAAACCCGGGAAACCC', '--target=GGGUUUCCCGGGUUUCCC', + '--outNumber=3', `${columns},ED1,ED2`, +]); +assert.equal(structured.code, 0, structured.diagnostics); +const structuredCsv = structured.module.FS.readFile('/results.csv', { encoding: 'utf8' }); +assert.equal(structuredCsv.trim().split('\n')[1], 'target;1;18;query;1;18;-28.04;4.6;4.86'); +assert.equal(structuredCsv.trim().split('\n').length, 4); + +// Input errors must travel through the C++ exception handler, not trap WASM. +const invalid = await predict(['--query=ACGU!ACGU', '--target=ACGUACGU', columns]); +assert.notEqual(invalid.code, 0); +assert.match(invalid.diagnostics, /error/i); +// The CLI's nonzero exit status is local to the deliberately invalid instance. +process.exitCode = 0; +console.log('WASM CLI: native-reference coordinates/energy, structured accessibility, suboptimals and C++ error handling passed'); diff --git a/scripts/wasm/stage.sh b/scripts/wasm/stage.sh new file mode 100644 index 00000000..62b6cb3c --- /dev/null +++ b/scripts/wasm/stage.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +# Package only the static application, matched WASM assets and distribution notices. +set -euo pipefail +repo=$(cd "$(dirname "$0")/../.." && pwd) +build=${WASM_BUILD_DIR:-"$repo/build-wasm"} +site="$build/site" +test -s "$site/wasm/intarna.js" +test -s "$site/wasm/intarna.wasm" +# Select notices from the archive used by these assets, including dlib upgrades. +read -r vienna_version vienna_sha256 dlib_directory < <(python3 - "$site" "$build" <<'PYSOURCE' +import json, re, sys +from pathlib import Path +site, build = map(Path, sys.argv[1:]) +metadata = json.loads((site / "build-info.json").read_text()) +archive = metadata["viennarnaArchive"] +version, digest = archive["version"], archive["sha256"] +if version != metadata["viennarna"] or not re.fullmatch(r"2\.\d+\.\d+", version) or not re.fullmatch(r"[0-9a-f]{64}", digest): + raise SystemExit("Invalid compiled ViennaRNA archive identity") +source = build / "sources" / f"vienna-{version}-{digest}" / f"ViennaRNA-{version}" +dlib = list((source / "src").glob("dlib-*/dlib/LICENSE.txt")) +if len(dlib) != 1 or not re.fullmatch(r"dlib-[0-9.]+", dlib[0].parent.parent.name): + raise SystemExit("Expected one bundled dlib license in the compiled ViennaRNA source") +print(version, digest, dlib[0].parent.parent.name) +PYSOURCE +) +vienna_source="$build/sources/vienna-$vienna_version-$vienna_sha256/ViennaRNA-$vienna_version" +mkdir -p "$site/licenses" +cp -R "$repo/gui/assets" "$repo/gui/examples" "$repo/gui/vendor" "$site/" +test "$(sha256sum "$repo/gui/vendor/plotly-cartesian.min.js" | cut -d' ' -f1)" = "aaf12ff1d4671f7e93f6df4291651ab4ca6b76c0ea5f1576ec1030e3c2819a20" +test "$(sha256sum "$repo/gui/vendor/plotly.css" | cut -d' ' -f1)" = "3bcf2679b557067d8a3492b74092e946544d1cb8b2a72f278bcba95df59afd33" +for file in index.html styles.css app.js mark.svg protocol.js runner.js results.js options.js columns.js archive.js sessions.js visualization.js output-visualization.js parameter-file.js uploads.js; do + cp "$repo/gui/$file" "$site/$file" +done +cp "$repo/gui/intarna-worker.js" "$site/intarna-worker.js" +touch "$site/.nojekyll" +cp "$repo/src/bin/nlohmann/LICENSE.MIT" "$site/licenses/nlohmann-json.txt" +cp "$repo/gui/vendor/plotly-LICENSE.txt" "$site/licenses/Plotly.txt" +cp "$repo/LICENSE" "$site/licenses/IntaRNA.txt" +cp "$repo/src/easylogging++.LICENCE.txt" "$site/licenses/easylogging.txt" +cp "$repo/src/mdspan/LICENSE" "$site/licenses/mdspan.txt" +cp "$build/sources/boost_1_87_0/LICENSE_1_0.txt" "$site/licenses/Boost.txt" +cp "$build/sources/zlib-1.3.1/zlib.h" "$site/licenses/zlib.h" +cp "$vienna_source/COPYING" "$site/licenses/ViennaRNA.txt" +cp "$vienna_source/src/$dlib_directory/dlib/LICENSE.txt" "$site/licenses/dlib.txt" +cp "$vienna_source/src/ViennaRNA/plotting/naview/naview.c" "$site/licenses/naview.c" +emscripten_dir=$(dirname "$(command -v emcc)") +cp "$emscripten_dir/LICENSE" "$site/licenses/Emscripten.txt" +cp "$emscripten_dir/system/lib/libc/musl/COPYRIGHT" "$site/licenses/musl.txt" +for library in libcxx libcxxabi libunwind compiler-rt; do + cp "$emscripten_dir/system/lib/$library/LICENSE.TXT" "$site/licenses/$library.txt" +done +cat > "$site/licenses/index.html" <IntaRNA licenses +

IntaRNA and third-party notices

+

IntaRNA: Bioinformatics Group of Prof. Backofen, University of Freiburg.
ViennaRNA: authors and Institute for Theoretical Chemistry, University of Vienna.

+

This distribution uses ViennaRNA $vienna_version, Boost 1.87.0, zlib 1.3.1, bundled dlib ${dlib_directory#dlib-}, Plotly.js 4.1.2, Kokkos mdspan, Easylogging++ and the Emscripten 4.0.23 runtime.

+

Build provenance · Back to IntaRNA

+ +HTML +# Provenance belongs to the compiled assets, never the later staging revision. +python3 - "$site" <<'PYINFO' +import hashlib, json, sys +from pathlib import Path +site = Path(sys.argv[1]) +metadata = json.loads((site / "build-info.json").read_text()) +if not (site / "build-info.txt").is_file(): + raise SystemExit("Missing compiled version text") +for name, digest in metadata["sha256"].items(): + if hashlib.sha256((site / "wasm" / name).read_bytes()).hexdigest() != digest: + raise SystemExit(f"Mismatched engine: {name}") +PYINFO +echo "Static site: $site" diff --git a/scripts/wasm/test-browser.py b/scripts/wasm/test-browser.py new file mode 100644 index 00000000..5152f68f --- /dev/null +++ b/scripts/wasm/test-browser.py @@ -0,0 +1,666 @@ +"""Exercise the staged browser interface with real WASM at a nested URL.""" +import argparse +from pathlib import Path +from io import BytesIO +import re +import json +from urllib.parse import parse_qs, urljoin, urlparse +from zipfile import ZipFile +from playwright.sync_api import sync_playwright, expect + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('url') +parser.add_argument('--browser', choices=['chromium', 'firefox'], default='chromium') +parser.add_argument('--screenshot') +args = parser.parse_args() + +with sync_playwright() as playwright: + browser = getattr(playwright, args.browser).launch(headless=True) + page = browser.new_page(viewport={'width': 1440, 'height': 1100}) + errors = [] + csp_errors = [] + page.on('pageerror', lambda error: errors.append(str(error))) + page.on('console', lambda message: csp_errors.append(message.text) if message.type == 'error' and ('Content Security Policy' in message.text or 'Refused to apply inline style' in message.text) else None) + # Keep browser tests offline and inspect the exact third-party URL separately. + visualization_urls = [] + def viewer(route): + visualization_urls.append(route.request.url) + route.fulfill(content_type='text/html', body='

vaRRI viewer

') + page.route('https://backofenlab.github.io/vaRRI/**', viewer) + page.goto(args.url) + page.wait_for_load_state('networkidle') + compute = page.locator('#compute') + status = page.locator('#result-status') + sessions = page.locator('.session') + active = page.locator('.session:has([data-role=panel]:not([hidden]))') + rows = active.locator('tbody tr') + + def open_group(key): + page.locator('#tab-' + key).click() + expect(page.locator('#' + key)).to_be_visible() + expect(page.locator('#tab-' + key)).to_have_attribute('aria-selected', 'true') + assert page.locator('.parameter-group:visible').count() == 1 + + def load_example(task='prediction'): + page.locator('#examples-menu summary').click() + page.get_by_role('button', name='Evaluate a duplex' if task == 'evaluation' else 'Short duplex', exact=False).click() + expect(page.locator('#query')).to_have_value('>query\nGGGAGGAGGG\n') + + def download_archive(session=None): + with page.expect_download() as downloaded: + (active if session is None else session).locator('[data-role=download-zip]').click() + with ZipFile(BytesIO(Path(downloaded.value.path()).read_bytes())) as archive: + assert archive.testzip() is None + return {name: archive.read(name).decode() for name in archive.namelist()} + + def fill(key, value): + parent = page.locator('#' + key).evaluate('node => node.closest(".parameter-group")?.id') + if parent: + open_group(parent) + page.locator('#' + key).fill(str(value)) + + def predict(): + count = sessions.count() + compute.click() + expect(status).to_contain_text('complete:', timeout=120000) + expect(page.locator('#input-error')).not_to_be_visible() + expect(sessions).to_have_count(count + 1) + + expect(page.locator('#query')).to_have_value('') + expect(page.locator('#target')).to_have_value('') + expect(page.locator('#query')).to_have_attribute('placeholder', '>query\nGGGAGGAGGG') + compute.click() + expect(page.locator('#input-error')).to_contain_text('enter a sequence') + metadata = page.request.get(urljoin(args.url, 'build-info.json')).json() + vienna_version = metadata['viennarna'] + assert re.fullmatch(r'2\.\d+\.\d+', vienna_version) + assert metadata['viennarnaArchive']['version'] == vienna_version + expect(page.locator('#version-info')).to_contain_text(f'ViennaRNA {vienna_version}') + for logo in page.locator('.site-header img').all(): + assert logo.evaluate('node => node.complete && node.naturalWidth > 0') + for key in ['seed-options', 'output-options', 'csv-options', 'interaction-options', 'query-options', 'target-options', 'general-options', 'sequence-input']: + open_group(key) + + expect(page.get_by_role('radio', name='Prediction')).to_be_checked() + expect(page.get_by_role('radio', name='Evaluation')).to_be_visible() + page.get_by_role('radio', name='Prediction').focus() + page.keyboard.press('ArrowRight') + expect(page.get_by_role('radio', name='Evaluation')).to_be_checked() + expect(page.locator('#task-help')).to_contain_text('Evaluate supplied structures') + page.keyboard.press('ArrowLeft') + expect(page.get_by_role('radio', name='Prediction')).to_be_checked() + page.locator('#examples-menu summary').click() + expect(page.get_by_role('button', name='Short duplex', exact=False)).to_be_visible() + expect(page.get_by_role('button', name='Evaluate a duplex', exact=False)).not_to_be_visible() + page.get_by_role('radio', name='Evaluation').check() + expect(page.get_by_role('button', name='Evaluate a duplex', exact=False)).to_be_visible() + expect(page.get_by_role('button', name='Short duplex', exact=False)).not_to_be_visible() + page.get_by_role('radio', name='Prediction').check() + page.locator('#examples-menu summary').click() + + # Tabs support keyboard navigation and wrap without page overflow. + page.locator('#tab-sequence-input').focus() + page.keyboard.press('ArrowRight') + expect(page.locator('#tab-seed-options')).to_be_focused() + expect(page.locator('#seed-options')).to_be_visible() + page.keyboard.press('End') + expect(page.locator('#tab-general-options')).to_be_focused() + page.keyboard.press('Home') + expect(page.locator('#tab-sequence-input')).to_be_focused() + + # Review layout, task defaults and modes work with native parameters. + assert page.locator('[role=tab]').all_text_contents() == ['Sequences', 'Seed', 'Output', 'CSV', 'Model & Energy', 'Query', 'Target', 'CLI-only'] + expect(page.locator('.brand')).to_contain_text('IntaRNA package') + expect(page.locator('#results-title')).to_have_text('Results') + expect(page.locator('#outNumber')).to_have_value('10') + assert page.locator('.compute-bar').evaluate('node => node.firstElementChild.id') == 'compute' + assert page.locator('.sequence-meta').first.evaluate('node => node.firstElementChild.tagName') == 'LABEL' + fill('query', '>named\tignored description\n' + 'G' * 1000 + '\n' * 20 + 'GG') + expect(page.locator('#query-warning')).to_contain_text('ignoring FASTA description') + expect(page.locator('#query-warning')).to_contain_text('named') + assert page.locator('#query').evaluate('node => node.scrollWidth > node.clientWidth && node.scrollHeight > node.clientHeight') + fill('query', '>named \nGGGAGGAGGG') + expect(page.locator('#query-warning')).not_to_be_visible() + + for prefix, group in [('q', 'query-options'), ('t', 'target-options')]: + open_group(group) + # Each explicit row shares label height, including wrapped labels, and + # compact controls stay left-aligned instead of filling the panel. + for keys in [[prefix + suffix for suffix in ['Set', 'Region', 'IntLenMax', 'IntLoopMax', 'RegionLenMax']], [prefix + suffix for suffix in ['Acc', 'AccW', 'AccL', 'PfScale']]]: + tops = [page.locator('#' + key).bounding_box()['y'] for key in keys] + assert max(tops) - min(tops) < 1, tops + label_bottoms = [page.locator('#' + key).locator('xpath=preceding-sibling::label').bounding_box()['y'] + page.locator('#' + key).locator('xpath=preceding-sibling::label').bounding_box()['height'] for key in keys] + assert max(label_bottoms) - min(label_bottoms) < 1, label_bottoms + first = page.locator('#' + prefix + 'Set').bounding_box() + second = page.locator('#' + prefix + 'Region').bounding_box() + assert 8 <= second['x'] - first['x'] - first['width'] <= 20 + assert page.locator('#' + prefix + 'AccW').bounding_box()['width'] <= 224 + expect(page.locator('#' + prefix + 'AccFile')).to_be_disabled() + page.locator('#' + prefix + 'Acc').select_option('P') + expect(page.locator('#' + prefix + 'AccFile')).to_be_enabled() + for suffix in ['AccW', 'AccL']: + expect(page.locator('#' + prefix + suffix)).to_be_disabled() + page.locator('#' + prefix + 'Acc').select_option('N') + for suffix in ['AccW', 'AccL', 'AccConstr', 'AccFile', 'PfScale', 'Shape', 'ShapeMethod', 'ShapeConversion']: + expect(page.locator('#' + prefix + suffix)).to_be_disabled() + expect(page.locator('input[data-for="' + prefix + 'Shape"]')).to_be_disabled() + page.locator('#' + prefix + 'Acc').select_option('C') + expect(page.locator('#' + prefix + 'Shape')).to_be_enabled() + page.locator('#accNoLP-target').check() + expect(page.locator('#accNoLP')).to_be_checked() + open_group('query-options') + page.locator('#accNoLP').uncheck() + expect(page.locator('#accNoLP-target')).not_to_be_checked() + open_group('interaction-options') + expect(page.locator('#helixMinBP')).to_be_disabled() + page.locator('#model').select_option('B') + expect(page.locator('#helixMinBP')).to_be_enabled() + page.locator('#model').select_option('X') + expect(page.locator('#helixMinBP')).to_be_disabled() + open_group('seed-options') + expect(page.locator('#seedTQ')).to_be_disabled() + seed_box = page.locator('#seed-mode').bounding_box() + explicit_box = page.locator('#seedTQ').bounding_box() + assert abs(seed_box['y'] - explicit_box['y']) < 5 + assert seed_box['x'] + seed_box['width'] < explicit_box['x'] + assert seed_box['width'] < explicit_box['width'] + page.locator('#seed-mode').select_option('none') + for key in ['seedBP', 'seedTQ', 'seedQRange', 'seedNoGU']: + expect(page.locator('#' + key)).to_be_disabled() + page.locator('#seed-mode').select_option('explicit') + expect(page.locator('#seedTQ')).to_be_enabled() + expect(page.locator('#seedBP')).to_be_disabled() + page.locator('#seed-mode').select_option('identify') + expect(page.locator('#seedBP')).to_be_enabled() + expect(page.locator('#seedTQ')).to_be_disabled() + open_group('output-options') + output_labels = page.locator('#output-options .checkbox-grid label') + assert output_labels.count() == 15 + assert all(label.get_attribute('title') for label in output_labels.all()) + expect(page.locator('#output-options input[value="pMinE"]').locator('xpath=..')).to_have_attribute('title', re.compile('energy heatmap')) + open_group('csv-options') + assert page.locator('#outCsvSort').bounding_box()['width'] < 310 + groups = page.locator('.csv-group') + assert groups.count() == 5 + for group in groups.all(): + group.get_by_role('button', name=re.compile('^Select all')).click() + assert group.locator('input:not(:checked)').count() == 0 + group.get_by_role('button', name='Deselect all').click() + assert group.locator('input:checked').count() == 0 + page.get_by_role('button', name='Task defaults', exact=True).click() + for key in ['ED1', 'ED2', 'seedE', 'seedStart1', 'seedStart2']: + expect(page.locator('.csv-group input[value="' + key + '"]')).to_be_checked() + assert all(label.get_attribute('title') and ' — ' not in label.inner_text() for label in groups.locator('label').all()) + # Inspect all changed panels at desktop and mobile widths. + for width in [1440, 390]: + page.set_viewport_size({'width': width, 'height': 1100 if width == 1440 else 844}) + for key in ['sequence-input', 'seed-options', 'output-options', 'csv-options', 'interaction-options', 'query-options', 'target-options', 'general-options']: + open_group(key) + assert page.evaluate('document.documentElement.scrollWidth <= innerWidth'), (width, key) + if args.screenshot: + path = Path(args.screenshot) + page.screenshot(path=str(path.with_name(f'{path.stem}-{key}-{width}.png')), full_page=True) + page.set_viewport_size({'width': 1440, 'height': 1100}) + page.locator('#reset').click() + + # Upload and file drop use local text, validate before replacing, and reset. + with page.expect_file_chooser() as chooser: + page.locator('#query-upload-button').click() + chooser.value.set_files({'name': 'query.fa', 'mimeType': 'text/plain', 'buffer': b'>uploaded\nGGGAGGAGGG\n'}) + expect(page.locator('#query')).to_have_value('>uploaded\nGGGAGGAGGG\n') + page.locator('#target').evaluate(r"""node => { + const transfer = new DataTransfer(); + transfer.items.add(new File(['>dropped\nCCCUCCUCCC\n'], 'target.fa', {type:'text/plain'})); + node.dispatchEvent(new DragEvent('drop', {dataTransfer:transfer, bubbles:true, cancelable:true})); + }""") + expect(page.locator('#target')).to_have_value('>dropped\nCCCUCCUCCC\n') + page.locator('#query-upload').set_input_files({'name': 'bad.fa', 'mimeType': 'text/plain', 'buffer': b'not a sequence!'}) + expect(page.locator('#input-error')).to_be_visible() + expect(page.locator('#query')).to_have_value('>uploaded\nGGGAGGAGGG\n') + # A file read completing after Reset cannot restore the previous input. + page.evaluate(r"""() => { window.originalFileText = File.prototype.text; File.prototype.text = function() { return new Promise(resolve => { window.finishRead = () => resolve('>late\nGGGAGGAGGG\n'); }); }; }""") + page.locator('#query-upload').set_input_files({'name': 'late.fa', 'mimeType': 'text/plain', 'buffer': b'>late\nGGGAGGAGGG\n'}) + page.locator('#reset').click() + page.evaluate('() => { File.prototype.text = window.originalFileText; window.finishRead(); }') + expect(page.locator('#query')).to_have_value('') + + # JavaScript validation works even when the offending control is in another tab. + fill('query', '>bad\nACGU-ACGU') + compute.click() + expect(page.locator('#input-error')).to_contain_text('use only') + expect(page.locator('#loading')).not_to_be_visible() + load_example() + fill('temperature', '101') + open_group('sequence-input') + compute.click() + expect(page.locator('#input-error')).to_contain_text('Temperature') + page.locator('#reset').click() + expect(page.locator('#query')).to_have_value('') + expect(page.locator('#target')).to_have_value('') + expect(page.locator('#rri')).to_have_value('') + load_example() + + # Disabled stale edits neither block a run nor leak into JSON. Re-enabling + # restores local edits; loading/storing uses effective native settings. + fill('seedBP', '') + page.locator('#seed-mode').select_option('explicit') + compute.click() + expect(page.locator('#input-error')).to_contain_text('Explicit seed: enter') + fill('seedTQ', '1|||&1|||') + predict() + explicit_settings = json.loads(download_archive()['parameter.json']) + assert explicit_settings['parameters']['seedTQ'] == '1|||&1|||' + assert 'seedBP' not in explicit_settings['parameters'] + with page.expect_download() as stored: + page.locator('#store-parameters').click() + explicit_file = Path(stored.value.path()).read_bytes() + page.locator('#reset').click() + page.locator('#parameter-upload').set_input_files({'name': 'explicit.json', 'mimeType': 'application/json', 'buffer': explicit_file}) + expect(page.locator('#seed-mode')).to_have_value('explicit') + open_group('seed-options') + page.locator('#seedTQ').fill('invalid inactive seed') + page.locator('#seed-mode').select_option('none') + fill('qShape', 'invalid inactive shape') + page.locator('#qAcc').select_option('N') + open_group('target-options') + page.locator('#accNoGUend-target').check() + predict() + inactive_settings = json.loads(download_archive()['parameter.json'])['parameters'] + assert inactive_settings['noSeed'] is True + assert inactive_settings['qAcc'] == 'N' + assert inactive_settings['accNoGUend'] is True + assert 'qShape' not in inactive_settings and 'seedTQ' not in inactive_settings + open_group('query-options') + page.locator('#qAcc').select_option('C') + expect(page.locator('#qShape')).to_have_value('invalid inactive shape') + page.locator('#reset').click() + load_example() + + # Reference prediction, selectable CSV output and independent table visibility. + fill('outNumber', 10) + open_group('csv-options') + page.locator('#outCsvSort').select_option('E') + predict() + expect(rows).to_have_count(10) + assert active.locator('.table-scroll').evaluate('''node => { + const body = node.querySelector('tbody'); + const copies = [...body.children].map(row => row.cloneNode(true)); + body.append(...copies); + const scrolls = node.clientHeight <= 500 && node.scrollHeight > node.clientHeight + && getComputedStyle(node).overflowY === 'auto'; + copies.forEach(copy => copy.remove()); + return scrolls; + }''') + assert rows.first.locator('td').all_text_contents()[1:7] == ['target', '1', '10', 'query', '1', '10'] + assert rows.first.locator('td').nth(9).inner_text() == '-21.40' + assert rows.first.locator('td').last.inner_text() == '0.00' + page.get_by_role('button', name='Sort by Energy (kcal/mol)', exact=False).click() + assert float(rows.first.locator('td').nth(9).inner_text()) == -14.3 + page.get_by_role('button', name='Sort by Energy (kcal/mol)', exact=False).click() + active.locator('[data-role=search]').fill('-21.4') + expect(rows).to_have_count(1) + active.locator('[data-role=search]').fill('no match') + expect(active.locator('[data-role=no-matches]')).to_be_visible() + active.locator('[data-role=search]').fill('') + active.locator('.column-picker summary').click() + active.locator('[data-role=visible-columns] input[value="start1"]').uncheck() + assert 'Target start' not in active.locator('thead').inner_text() + active.locator('[data-role=visible-columns] input[value="start1"]').check() + with page.expect_download() as downloaded: + active.locator('[data-role=download]').click() + csv = Path(downloaded.value.path()).read_text() + assert csv.splitlines()[0] == 'id1;start1;end1;id2;start2;end2;subseqDP;hybridDP;E;ED1;ED2;seedE;seedStart1;seedStart2' + assert 'target;1;10;query;1;10;' in csv + assert 'deltaE' not in csv + assert active.locator('thead th').first.inner_text() == '' + assert active.locator('thead th button br').count() >= 4 + assert rows.first.locator('td').first.evaluate('node => getComputedStyle(node).paddingLeft') == '5px' + assert not visualization_urls # Third-party content loads only on selection. + rows.first.get_by_role('button', name='Visualize').click() + expect(active.locator('[data-role=varri-frame]')).to_be_visible() + expect(active.frame_locator('[data-role=varri-frame]').get_by_role('heading', name='vaRRI viewer')).to_be_visible() + expect(rows.first.locator('button')).to_have_attribute('aria-pressed', 'true') + query = parse_qs(urlparse(active.locator('[data-role=varri-frame]').get_attribute('src')).query) + assert query['sequence'] == ['CCCUCCUCCC&GGGAGGAGGG'] + assert query['structure'] == ['((((((((((&))))))))))'] + assert query['seqName1'] == ['target'] and query['seqName2'] == ['query'] + assert query['startIndex1'] == ['1'] + assert query['showRenderingOnly'] == ['true'] + assert 'showRenderingOnly' not in active.locator('[data-role=varri-link]').get_attribute('href') + archive = download_archive() + assert archive['intarna-interactions.csv'] == csv + saved = json.loads(archive['parameter.json']) + assert set(archive) == {'parameter.json', 'intarna-interactions.csv'} + assert saved['parameters']['query']['text'] == '>query\nGGGAGGAGGG\n' + assert 'IntaRNA 3.4.1' in archive['parameter.json'] + assert f'Vienna RNA package {vienna_version}' in archive['parameter.json'] + assert saved['parameters']['outNumber'] == 10 + assert 'IntaRNA --parameterFile=parameter.json' in archive['parameter.json'] + assert 'temperature' not in saved['parameters'] + # Store snapshots the editable form; Load is atomic and preserves CSV order. + with page.expect_download() as stored: + page.locator('#store-parameters').click() + settings = Path(stored.value.path()).read_bytes() + imported = json.loads(settings) + imported['parameters']['outCsvCols'] = 'E,id2' + imported['parameters']['temperature'] = 24 + page.locator('#parameter-upload').set_input_files({'name': 'settings.json', 'mimeType': 'application/json', 'buffer': json.dumps(imported).encode()}) + expect(page.locator('#temperature')).to_have_value('24') + expect(active.locator('[data-role=results-view]')).to_be_visible() + with page.expect_download() as stored_again: + page.locator('#store-parameters').click() + assert json.loads(Path(stored_again.value.path()).read_text())['parameters']['outCsvCols'] == 'E,id2' + page.locator('#parameter-upload').set_input_files({'name': 'bad.json', 'mimeType': 'application/json', 'buffer': b'{invalid'}) + expect(page.locator('#input-error')).to_be_visible() + expect(page.locator('#temperature')).to_have_value('24') + page.locator('#parameter-upload').set_input_files({'name': 'settings.json', 'mimeType': 'application/json', 'buffer': settings}) + expect(page.locator('#temperature')).to_have_value('37') + predict() + if args.screenshot: + + open_group('sequence-input') + page.screenshot(path=args.screenshot, full_page=True) + page.set_viewport_size({'width': 390, 'height': 844}) + assert page.evaluate('document.documentElement.scrollWidth <= innerWidth') + page.set_viewport_size({'width': 1440, 'height': 1100}) + + # Multi-FASTA prediction, signed inclusive output and additional files. + load_example() + fill('outNumber', 1) + fill('query', '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG') + fill('qIdxPos0', -3) + fill('tIdxPos0', -5) + open_group('output-options') + page.locator('#output-options input[value="qMinE"]').check() + predict() + expect(rows).to_have_count(2) + assert rows.first.locator('td').all_text_contents()[1:7] == ['target', '-5', '5', 'q1', '-3', '7'] + output_files = active.locator('[data-role=file-list] details') + expect(output_files).to_have_count(2) + expect(output_files.nth(0).locator('summary')).to_contain_text('target : q1') + expect(output_files.nth(1).locator('summary')).to_contain_text('target : q2') + output_files.first.locator('summary').click() + expect(output_files.first.get_by_role('tab', name='Visualization')).to_have_attribute('aria-selected', 'true') + assert output_files.first.get_by_role('tab', name='Visualization').evaluate('node => getComputedStyle(node).backgroundColor') == page.locator('#tab-output-options').evaluate('node => getComputedStyle(node).backgroundColor') + expect(output_files.first.locator('.js-plotly-plot')).to_be_visible(timeout=30000) + expect(output_files.first.locator('.gtitle')).to_contain_text('q1') + if args.screenshot: + path = Path(args.screenshot) + page.screenshot(path=str(path.with_name(f'{path.stem}-additional-output.png')), full_page=True) + with page.expect_download(timeout=30000) as image: + output_files.first.get_by_role('button', name='Export PNG').click() + assert Path(image.value.path()).read_bytes().startswith(b'\x89PNG\r\n\x1a\n') + output_files.first.get_by_role('tab', name='File Content').click() + expect(output_files.first.locator('pre')).to_be_visible() + expect(output_files.first.locator('pre')).to_contain_text('minE') + with page.expect_download() as output_download: + output_files.first.get_by_role('button', name=re.compile('^Download qMinE')).click() + assert 'minE' in Path(output_download.value.path()).read_text() + archive = download_archive() + assert len([name for name in archive if name.startswith('qMinE')]) == 2 + saved = json.loads(archive['parameter.json']) + assert saved['parameters']['query']['text'].count('>') == 2 + assert saved['parameters']['qIdxPos0'] == -3 + rows.nth(1).get_by_role('button', name='Visualize').click() + query = parse_qs(urlparse(active.locator('[data-role=varri-frame]').get_attribute('src')).query) + assert query['seqName2'] == ['q2'] + assert query['startIndex1'] == ['-5'] and query['startIndex2'] == ['-3'] + + # FASTA identity follows native first-token naming, including collisions. + fill('query', '>q first\nGGGAGGAGGG\n>q second\nGGGAGGAGGG') + compute.click() + expect(page.locator('#input-error')).to_contain_text('unique') + expect(active.locator('[data-role=varri-frame]')).to_be_visible() + expect(active.locator('[data-role=download-zip]')).to_be_visible() + assert download_archive() == archive + + # Evaluation resets native defaults and removes prediction-only controls. + fill('query', '>q1\nGGGAGGAGGG\n>q2\nGGGAGGAGGG') + page.get_by_role('radio', name='Evaluation').check() + expect(page.locator('#seed-options')).not_to_be_visible() + expect(page.locator('#outNumber')).to_be_disabled() + fill('rri', '1||||||||||&1||||||||||') + compute.click() + expect(page.locator('#input-error')).to_contain_text('exactly one') + load_example('evaluation') + fill('rri', '1||||||||||&1||||||||||:1|||||||||&2|||||||||') + open_group('output-options') + page.locator('#output-options input[value="detailed"]').check() + open_group('csv-options') + page.locator('#csv-options input[value="ED1"]').check() + predict() + expect(status).to_contain_text('Evaluation complete') + expect(rows).to_have_count(2) + expect(active.locator('thead')).to_contain_text('ED1') + expect(active.locator('[data-role=file-list] summary')).to_contain_text('intarna-detailed.txt') + active.locator('[data-role=file-list] summary').click() + expect(active.locator('[data-role=file-list] pre')).to_contain_text('-21.4') + with page.expect_download() as report: + active.locator('[data-role=file-list] button').click() + assert '-21.4' in Path(report.value.path()).read_text() + archive = download_archive() + assert '-21.4' in archive['intarna-detailed.txt'] + saved = json.loads(archive['parameter.json']) + assert saved['parameters']['personality'] == 'IntaRNAeval' + assert saved['parameters']['rri'] == '1||||||||||&1||||||||||:1|||||||||&2|||||||||' + assert 'seedBP' not in saved['parameters'] + assert 'detailed' in saved['gui']['reports'] + + # Visualization stays available when structure/identity columns are deselected. + open_group('csv-options') + page.get_by_role('button', name='Clear selection', exact=True).click() + page.locator('#csv-options input[value="E"]').check() + predict() + rows.first.get_by_role('button', name='Visualize').click() + expect(active.locator('[data-role=varri-frame]')).to_be_visible() + archive = download_archive() + assert archive['intarna-interactions.csv'].splitlines()[0] == 'E' + assert json.loads(archive['parameter.json'])['parameters']['outCsvCols'] == 'E' + fill('rri', '1|||&1||') + compute.click() + expect(page.locator('#input-error')).to_contain_text('same nonzero') + + # Startup and synchronous C++ cancellation both allow a fresh prediction. + page.get_by_role('radio', name='Prediction').check() + load_example() + held_routes = [] + session_count = sessions.count() + page.route('**/wasm/intarna.wasm', lambda route: held_routes.append(route)) + compute.click() + expect(page.locator('#loading')).to_be_visible() + page.locator('#abort').click() + expect(status).to_contain_text('aborted') + expect(sessions).to_have_count(session_count) + for route in held_routes: + route.abort() + page.unroute('**/wasm/intarna.wasm') + fill('query', '>long_query\n' + 'G' * 1000) + fill('target', '>long_target\n' + 'C' * 1000) + compute.click() + expect(page.locator('#loading-status')).to_contain_text('Predicting RNA', timeout=120000) + page.keyboard.press('Escape') + expect(status).to_contain_text('aborted') + expect(sessions).to_have_count(session_count) + load_example() + predict() + + fill('query', '>no_pairs\nNNNNNNNNNN') + compute.click() + expect(status).to_contain_text('No favorable interactions', timeout=120000) + expect(rows).to_have_count(0) + expect(active.locator('[data-role=varri-frame]')).not_to_be_visible() + assert download_archive()['intarna-interactions.csv'].count('\n') == 1 + fill('query', '>\nGGGAGGAGGG') + predict() + assert active.locator('tbody img').count() == 0 + assert ' 1 + page.reload() + page.wait_for_load_state('networkidle') + expect(sessions).to_have_count(0) + load_example() + fill('temperature', 24) + fill('qIdxPos0', -3) + fill('tIdxPos0', -5) + fill('qShape', '1 0.2\n2 0.3') + fill('outNumber', 3) + open_group('output-options') + page.locator('#output-options input[value="qMinE"]').check() + predict() + first_id = active.get_attribute('data-session-id') + first = page.locator(f'[data-session-id="{first_id}"]') + first.get_by_label('Session name', exact=True).fill('Cool duplex') + first.get_by_label('Session name', exact=True).press('Enter') + first_archive = download_archive(first) + first_csv = first_archive['intarna-interactions.csv'] + first.locator('[data-role=search]').fill('no match') + expect(first.locator('[data-role=no-matches]')).to_be_visible() + first.locator('.column-picker summary').click() + first.locator('[data-role=visible-columns] input[value="start1"]').uncheck() + first_diagnostics = first.locator('[data-role=diagnostic-text]').text_content() + + # Edits and Reset preserve outputs. Restore also works for an unfolded run. + fill('temperature', 31) + expect(first.locator('[data-role=panel]')).to_be_visible() + assert download_archive(first) == first_archive + first.locator('[data-role=summary]').click() + expect(page.locator('#temperature')).to_have_value('24') + fill('temperature', 31) + first.locator('[data-role=toggle]').click() + expect(page.locator('#temperature')).to_have_value('24') + expect(first.locator('[data-role=panel]')).to_be_visible() + first.locator('[data-role=toggle]').click() + expect(first.locator('[data-role=panel]')).not_to_be_visible() + first.locator('[data-role=toggle]').press('Enter') + expect(first.locator('[data-role=panel]')).to_be_visible() + page.locator('#reset').click() + expect(sessions).to_have_count(1) + expect(page.locator('#query')).to_have_value('') + assert download_archive(first) == first_archive + + # A different task, CSV order and output report own a second result area. + page.get_by_role('radio', name='Evaluation').check() + load_example('evaluation') + with page.expect_download() as stored: + page.locator('#store-parameters').click() + second_settings = json.loads(Path(stored.value.path()).read_text()) + second_settings['parameters']['temperature'] = 42 + second_settings['parameters']['outCsvCols'] = 'E,id2' + second_settings['gui'] = {'reports': ['detailed']} + page.locator('#parameter-upload').set_input_files({'name': 'evaluation.json', 'mimeType': 'application/json', 'buffer': json.dumps(second_settings).encode()}) + predict() + expect(sessions).to_have_count(2) + second_id = active.get_attribute('data-session-id') + assert second_id != first_id + second = page.locator(f'[data-session-id="{second_id}"]') + expect(first.locator('[data-role=panel]')).not_to_be_visible() + expect(first.locator('[data-role=download-zip]')).to_be_visible() + assert download_archive(first) == first_archive + expect(page.get_by_role('radio', name='Evaluation')).to_be_checked() + expect(page.locator('#temperature')).to_have_value('42') + second_archive = download_archive(second) + assert second_archive['intarna-interactions.csv'].splitlines()[0] == 'E;id2' + assert 'intarna-detailed.txt' in second_archive + + # Selecting reloads all computed inputs while retaining each table's filter. + first.locator('.session-header').focus() + first.locator('.session-header').press('Space') + expect(second.locator('[data-role=panel]')).not_to_be_visible() + expect(first.locator('[data-role=panel]')).to_be_visible() + assert first.locator('.session-header').evaluate('node => node.firstElementChild.dataset.role') == 'toggle' + expect(first.locator('[data-role=toggle]')).to_have_text('Hide') + expect(page.get_by_role('radio', name='Prediction')).to_be_checked() + expect(page.locator('#qIdxPos0')).to_have_value('-3') + expect(page.locator('#tIdxPos0')).to_have_value('-5') + expect(page.locator('#qShape')).to_have_value('1 0.2\n2 0.3') + expect(page.locator('#temperature')).to_have_value('24') + expect(page.locator('#output-options input[value="qMinE"]')).to_be_checked() + expect(page.locator('#output-options input[value="detailed"]')).not_to_be_checked() + expect(first.locator('[data-role=search]')).to_have_value('no match') + expect(first.locator('[data-role=visible-columns] input[value="start1"]')).not_to_be_checked() + assert first.locator('[data-role=diagnostic-text]').text_content() == first_diagnostics + with page.expect_download() as restored: + page.locator('#store-parameters').click() + assert Path(restored.value.path()).read_text() == first_archive['parameter.json'] + first.locator('[data-role=search]').fill('') + expect(first.locator('tbody tr')).to_have_count(3) + first.locator('tbody tr').first.get_by_role('button', name='Visualize').click() + first_url = first.locator('[data-role=varri-frame]').get_attribute('src') + assert parse_qs(urlparse(first_url).query)['startIndex1'] == ['-5'] + + # A pending file read must not overwrite a selected session's snapshot. + page.evaluate(r"""() => { window.originalFileText = File.prototype.text; File.prototype.text = function() { return new Promise(resolve => { window.finishRead = () => resolve('>late\nGGGAGGAGGG\n'); }); }; }""") + page.locator('#query-upload').set_input_files({'name': 'late.fa', 'mimeType': 'text/plain', 'buffer': b'>late\nGGGAGGAGGG\n'}) + second.locator('[data-role=toggle]').click() + page.evaluate('() => { File.prototype.text = window.originalFileText; window.finishRead(); }') + expect(page.locator('#query')).to_have_value('>query\nGGGAGGAGGG\n') + expect(page.locator('#qShape')).to_have_value('') + expect(page.locator('#temperature')).to_have_value('42') + expect(page.get_by_role('radio', name='Evaluation')).to_be_checked() + expect(page.locator('#rri')).to_have_value(second_settings['parameters']['rri']) + expect(page.locator('#output-options input[value="detailed"]')).to_be_checked() + assert first.locator('[data-role=varri-frame]').get_attribute('src') is None + with page.expect_download() as restored: + page.locator('#store-parameters').click() + assert Path(restored.value.path()).read_text() == second_archive['parameter.json'] + assert download_archive(first)['intarna-interactions.csv'] == first_csv + + # Names are literal text and cannot introduce markup, duplicate IDs or paths. + first.get_by_label('Session name', exact=True).fill(' / β') + first.get_by_label('Session name', exact=True).press('Enter') + expect(page.locator('#temperature')).to_have_value('24') + expect(first.locator('[data-role=panel]')).to_be_visible() + assert first.locator('img').count() == 0 + with page.expect_download() as renamed: + first.locator('[data-role=download-zip]').click() + assert '/' not in renamed.value.suggested_filename + assert '\\' not in renamed.value.suggested_filename + ids = page.locator('[id]').evaluate_all('nodes => nodes.map(node => node.id)') + assert len(ids) == len(set(ids)) + first.get_by_label('Session name', exact=True).fill('') + first.get_by_label('Session name', exact=True).press('Enter') + expect(first.get_by_label('Session name', exact=True)).to_have_value('Prediction 1') + first.get_by_label('Session name', exact=True).fill('Cool duplex — 24 °C') + first.get_by_label('Session name', exact=True).press('Enter') + if args.screenshot: + page.screenshot(path=args.screenshot, full_page=True) + page.set_viewport_size({'width': 390, 'height': 844}) + assert page.evaluate('document.documentElement.scrollWidth <= innerWidth') + for session in [first, second]: + expect(session.locator('[data-role=download-zip]')).to_be_visible() + expect(session.locator('[data-role=delete]')).to_be_visible() + page.set_viewport_size({'width': 1440, 'height': 1100}) + + # Delete releases only that output; current inputs and other sessions survive. + second.locator('[data-role=toggle]').click() + first.locator('[data-role=delete]').click() + expect(sessions).to_have_count(1) + expect(page.locator('#temperature')).to_have_value('42') + assert download_archive(second) == second_archive + second.locator('[data-role=delete]').click() + expect(sessions).to_have_count(0) + expect(compute).to_be_focused() + expect(page.locator('#temperature')).to_have_value('42') + predict() + assert active.get_attribute('data-session-id') not in [first_id, second_id] + assert download_archive() == second_archive + page.reload() + page.wait_for_load_state('networkidle') + expect(sessions).to_have_count(0) + assert errors == [], errors + assert csp_errors == [], csp_errors + browser.close() +print(f'{args.browser}: real WASM, groups/defaults/versions, prediction/evaluation, FASTA/coordinates, tabs/keyboard, visualization URLs/selection, ZIP replay contents, columns/reports, mobile, abort/recovery and retained session lifecycle passed') diff --git a/scripts/wasm/test-downloads.py b/scripts/wasm/test-downloads.py new file mode 100644 index 00000000..6b0f7bc3 --- /dev/null +++ b/scripts/wasm/test-downloads.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""Exercise archive downloads against a local HTTP server, without Emscripten.""" +import hashlib +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path +import subprocess +from tempfile import TemporaryDirectory +from threading import Thread +import unittest + + +ARCHIVE = b"pinned dependency archive\n" +CHECKSUM = hashlib.sha256(ARCHIVE).hexdigest() +DOWNLOADER = Path(__file__).with_name("download.sh") + + +class DownloadHandler(BaseHTTPRequestHandler): + def do_GET(self): + self.server.requests.append(self.path) + if self.path == "/missing": + self.send_error(404) + return + body = ARCHIVE if self.path == "/archive" else b"not an archive\n" + self.send_response(200) + self.send_header("Content-Length", str(len(body) + (10 if self.path == "/partial" else 0))) + self.end_headers() + self.wfile.write(body) + + def log_message(self, *_args): + pass + + +class DownloadTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.server = ThreadingHTTPServer(("127.0.0.1", 0), DownloadHandler) + cls.thread = Thread(target=cls.server.serve_forever, daemon=True) + cls.thread.start() + + @classmethod + def tearDownClass(cls): + cls.server.shutdown() + cls.server.server_close() + cls.thread.join() + + def setUp(self): + self.directory = TemporaryDirectory(prefix="intarna-download-") + self.addCleanup(self.directory.cleanup) + # Exercise quoted paths and the same .part/cache names used by builds. + self.destination = Path(self.directory.name) / "dependency archive.tar.gz" + self.server.requests = [] + + def download(self, path="/archive"): + url = f"http://127.0.0.1:{self.server.server_port}{path}" + return subprocess.run( + ["bash", str(DOWNLOADER), url, str(self.destination), CHECKSUM], + capture_output=True, text=True, timeout=30, + ) + + def test_download_and_reuse_verified_cache(self): + result = self.download() + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(self.destination.read_bytes(), ARCHIVE) + self.assertFalse(Path(str(self.destination) + ".part").exists()) + # A valid cache must work even when the remote archive is unavailable. + result = self.download("/missing") + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(self.server.requests, ["/archive"]) + + def test_replace_invalid_cache_and_stale_partial(self): + self.destination.write_bytes(b"old archive or cached HTTP error") + Path(str(self.destination) + ".part").write_bytes(b"interrupted download") + result = self.download() + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(self.destination.read_bytes(), ARCHIVE) + self.assertFalse(Path(str(self.destination) + ".part").exists()) + self.assertEqual(self.server.requests, ["/archive"]) + + def test_failed_responses_are_not_cached_and_next_run_recovers(self): + for path in ("/invalid", "/missing", "/partial"): + with self.subTest(path=path): + result = self.download(path) + self.assertNotEqual(result.returncode, 0) + self.assertFalse(self.destination.exists()) + self.assertFalse(Path(str(self.destination) + ".part").exists()) + result = self.download() + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(self.destination.read_bytes(), ARCHIVE) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/wasm/test-vienna-release.py b/scripts/wasm/test-vienna-release.py new file mode 100644 index 00000000..2bf50995 --- /dev/null +++ b/scripts/wasm/test-vienna-release.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +"""Check stable-major selection, pagination and archive identity without GitHub.""" +from copy import deepcopy +import importlib.util +from io import BytesIO +import json +from pathlib import Path +import subprocess +from tempfile import TemporaryDirectory +import unittest +from unittest.mock import patch +from urllib.error import HTTPError + + +SCRIPT = Path(__file__).with_name("vienna-release.py") +SPEC = importlib.util.spec_from_file_location("vienna_release", SCRIPT) +resolver = importlib.util.module_from_spec(SPEC) +SPEC.loader.exec_module(resolver) +DIGEST = "a" * 64 + + +def release(version, **fields): + return { + "tag_name": f"v{version}", "draft": False, "prerelease": False, + "assets": [{ + "name": f"ViennaRNA-{version}.tar.gz", "digest": f"sha256:{DIGEST}", + "browser_download_url": f"{resolver.REPOSITORY}/releases/download/v{version}/ViennaRNA-{version}.tar.gz", + }], **fields, + } + + +class ReleaseTests(unittest.TestCase): + def resolve(self, pages): + with patch.object(resolver, "urlopen", side_effect=[BytesIO(json.dumps(page).encode()) for page in pages]) as fetch: + result = resolver.latest_release() + return result, fetch + + def test_numeric_selection_excludes_major3_drafts_and_prereleases(self): + result, _ = self.resolve([[ + release("3.0.0"), release("2.9.0"), release("2.10.0"), + release("2.11.0", prerelease=True), release("2.12.0", draft=True), + release("2.13.0-rc.1"), release("2.7.2"), release("2.7.1"), + ]]) + self.assertEqual(result["version"], "2.10.0") + self.assertEqual(result["sha256"], DIGEST) + + def test_pagination_finds_version2_after_one_hundred_newer_releases(self): + result, fetch = self.resolve([[release(f"3.0.{n}") for n in range(100)], [release("2.7.2")]]) + self.assertEqual(result["version"], "2.7.2") + self.assertEqual(fetch.call_count, 2) + self.assertTrue(fetch.call_args.args[0].full_url.endswith("per_page=100&page=2")) + + def test_newest_release_must_have_exact_asset_url_and_digest(self): + latest = release("2.8.0") + for field, value in [("name", "source.tar.gz"), ("digest", None), ("digest", "sha256:bad"), ("digest", "md5:" + DIGEST), ("browser_download_url", "https://example.com/archive.tar.gz")]: + with self.subTest(field=field, value=value): + invalid = deepcopy(latest) + invalid["assets"][0][field] = value + with self.assertRaises(ValueError): + self.resolve([[release("2.7.2"), invalid]]) + with self.assertRaises(ValueError): + self.resolve([[release("2.8.0", assets=latest["assets"] * 2)]]) + + def test_no_supported_release_or_api_failure_is_an_error(self): + with self.assertRaises(ValueError): + self.resolve([[release("3.0.0"), release("2.7.1"), release("2.8.0", prerelease=True)]]) + with patch.object(resolver, "urlopen", side_effect=HTTPError(resolver.API, 403, "rate limited", {}, None)): + with self.assertRaises(HTTPError): + resolver.latest_release() + + def test_checked_in_pin_and_shell_fields(self): + manifest = json.loads(subprocess.check_output(["python3", str(SCRIPT)], text=True)) + self.assertEqual(manifest["version"], "2.7.2") + fields = subprocess.check_output(["python3", str(SCRIPT), "--fields"], text=True).split() + self.assertEqual(fields, list(manifest.values())) + + def test_invalid_pin_fails_without_emitting_shell_fields(self): + manifest = json.loads(SCRIPT.with_suffix(".json").read_text()) + with TemporaryDirectory(prefix="vienna manifest ") as directory: + path = Path(directory) / "release.json" + for field, value in [("version", "3.0.0"), ("version", "2.7.0"), ("url", "https://example.com"), ("sha256", "bad")]: + with self.subTest(field=field): + path.write_text(json.dumps({**manifest, field: value})) + result = subprocess.run(["python3", str(SCRIPT), "--manifest", str(path), "--fields"], capture_output=True, text=True) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(result.stdout, "") + + def test_provenance_rejects_stale_engine_and_records_selected_archive(self): + manifest = json.loads(SCRIPT.with_suffix(".json").read_text()) + with TemporaryDirectory(prefix="vienna engine ") as directory: + site = Path(directory) + assets = site / "wasm" + assets.mkdir() + (assets / "package.json").write_text('{"type":"module"}') + (assets / "intarna.wasm").write_bytes(b"test engine") + for version in ["2.7.0", manifest["version"]]: + (assets / "intarna.js").write_text( + "export default async ({print}) => ({callMain() {" + f"print('IntaRNA 3.4.1 using Vienna RNA package {version} and boost 1.87.0');" + "return 0;}});" + ) + result = subprocess.run([ + "node", str(SCRIPT.with_name("write-build-info.mjs")), + str(SCRIPT.parents[2]), str(site), "4.0.23", "test-commit", "", + manifest["version"], manifest["url"], manifest["sha256"], + ], capture_output=True, text=True) + if version == "2.7.0": + self.assertNotEqual(result.returncode, 0) + self.assertIn("differs from selected", result.stderr) + self.assertFalse((site / "build-info.json").exists()) + else: + self.assertEqual(result.returncode, 0, result.stderr) + metadata = json.loads((site / "build-info.json").read_text()) + self.assertEqual(metadata["viennarna"], version) + self.assertEqual(metadata["viennarnaArchive"], manifest) + self.assertIn(manifest["sha256"], (site / "build-info.txt").read_text()) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/wasm/vienna-release.json b/scripts/wasm/vienna-release.json new file mode 100644 index 00000000..d54b5517 --- /dev/null +++ b/scripts/wasm/vienna-release.json @@ -0,0 +1,5 @@ +{ + "version": "2.7.2", + "url": "https://github.com/ViennaRNA/ViennaRNA/releases/download/v2.7.2/ViennaRNA-2.7.2.tar.gz", + "sha256": "4cb7aaca00dfac92cb36b030c9111487c170b90568759bd4ffedd8318cc9384f" +} diff --git a/scripts/wasm/vienna-release.py b/scripts/wasm/vienna-release.py new file mode 100644 index 00000000..f869e786 --- /dev/null +++ b/scripts/wasm/vienna-release.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +"""Resolve a stable ViennaRNA 2.x release asset, or validate a pinned manifest.""" +import argparse +import json +import os +from pathlib import Path +import re +from urllib.request import Request, urlopen + + +REPOSITORY = "https://github.com/ViennaRNA/ViennaRNA" +API = "https://api.github.com/repos/ViennaRNA/ViennaRNA/releases" +MINIMUM = (2, 7, 2) + + +def version_tuple(version): + if not isinstance(version, str) or not re.fullmatch(r"2\.\d+\.\d+", version): + raise ValueError("Expected a stable ViennaRNA 2.x version") + result = tuple(map(int, version.split("."))) + if result < MINIMUM: + raise ValueError("The WASM build requires ViennaRNA >= 2.7.2") + return result + + +def validate(manifest): + """Accept only official release tarballs with an explicit SHA-256.""" + version = manifest["version"] + version_tuple(version) + expected = f"{REPOSITORY}/releases/download/v{version}/ViennaRNA-{version}.tar.gz" + if manifest["url"] != expected: + raise ValueError("Expected the official ViennaRNA release asset URL") + if not isinstance(manifest["sha256"], str) or not re.fullmatch(r"[0-9a-f]{64}", manifest["sha256"]): + raise ValueError("Missing or invalid ViennaRNA archive SHA-256") + return {key: manifest[key] for key in ("version", "url", "sha256")} + + +def latest_release(): + # Enumerate all pages: /latest may select major 3, and release dates need not + # follow version order (for example, a maintenance release of an older minor). + headers = {"Accept": "application/vnd.github+json", "User-Agent": "IntaRNA-WASM"} + if os.environ.get("GITHUB_TOKEN"): + headers["Authorization"] = f"Bearer {os.environ['GITHUB_TOKEN']}" + candidates = [] + page = 1 + while True: + request = Request(f"{API}?per_page=100&page={page}", headers=headers) + with urlopen(request, timeout=30) as response: + releases = json.load(response) + if not isinstance(releases, list): + raise ValueError("Expected a GitHub release list") + for release in releases: + tag = release.get("tag_name", "") + if release.get("draft") or release.get("prerelease") or not re.fullmatch(r"v2\.\d+\.\d+", tag): + continue + version = tag[1:] + if tuple(map(int, version.split("."))) >= MINIMUM: + candidates.append(release) + if len(releases) < 100: + break + page += 1 + if not candidates: + raise ValueError("No stable ViennaRNA 2.x release >= 2.7.2 was found") + release = max(candidates, key=lambda item: version_tuple(item["tag_name"][1:])) + version = release["tag_name"][1:] + # Fail if the newest release lacks the asset/digest; do not silently select + # an older release or GitHub's differently packaged autogenerated source. + name = f"ViennaRNA-{version}.tar.gz" + assets = [asset for asset in release.get("assets", []) if asset["name"] == name] + if len(assets) != 1: + raise ValueError(f"Expected exactly one {name} release asset") + asset = assets[0] + digest = asset.get("digest") or "" + if not digest.startswith("sha256:"): + raise ValueError(f"Missing published SHA-256 for {name}") + return validate({"version": version, "url": asset["browser_download_url"], "sha256": digest[7:]}) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + source = parser.add_mutually_exclusive_group() + source.add_argument("--latest", action="store_true", help="query the official GitHub releases API") + source.add_argument("--manifest", type=Path, default=Path(__file__).with_suffix(".json")) + parser.add_argument("--fields", action="store_true", help="emit version, URL and SHA-256 for build.sh") + args = parser.parse_args() + try: + manifest = latest_release() if args.latest else validate(json.loads(args.manifest.read_text())) + except (OSError, ValueError, KeyError, TypeError) as error: + parser.exit(1, f"Cannot resolve ViennaRNA release: {error}\n") + print(" ".join(manifest.values()) if args.fields else json.dumps(manifest, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/scripts/wasm/write-build-info.mjs b/scripts/wasm/write-build-info.mjs new file mode 100644 index 00000000..4bf9fd47 --- /dev/null +++ b/scripts/wasm/write-build-info.mjs @@ -0,0 +1,25 @@ +// Record the versions of the compiled executable, alongside its exact assets. +import { createHash } from 'node:crypto'; +import { readFileSync, writeFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { pathToFileURL } from 'node:url'; +const [repo, site, emscripten, commit, changes, viennaVersion, viennaUrl, viennaSha256] = process.argv.slice(2); +const { default: createIntaRNA } = await import(pathToFileURL(resolve(site, 'wasm/intarna.js'))); +const lines = []; +const module = await createIntaRNA({ noInitialRun: true, locateFile: () => pathToFileURL(resolve(site, 'wasm/intarna.wasm')).href, print: (line) => lines.push(line), printErr: (line) => lines.push(line) }); +if (module.callMain(['--version']) !== 0) throw new Error('Could not read compiled engine versions'); +const version = lines.join('\n'); +const match = /IntaRNA\s+(\S+)[\s\S]*Vienna RNA package\s+(\S+)\s+and boost\s+(\S+)/i.exec(version); +if (!match) throw new Error(`Unrecognized engine version output: ${version}`); +if (match[2] !== viennaVersion) throw new Error(`Compiled ViennaRNA ${match[2]} differs from selected ${viennaVersion}`); +const metadata = { + source: 'https://github.com/BackofenLab/IntaRNA', commit, + dirty: !!changes, + intarna: match[1], viennarna: match[2], boost: match[3], emscripten, zlib: '1.3.1', + viennarnaArchive: { version: viennaVersion, url: viennaUrl, sha256: viennaSha256 }, + threading: 'single worker per task', + sha256: Object.fromEntries(['intarna.js', 'intarna.wasm'].map((name) => [name, createHash('sha256').update(readFileSync(resolve(site, 'wasm', name))).digest('hex')])), +}; +writeFileSync(resolve(site, 'build-info.json'), JSON.stringify(metadata, null, 2) + '\n'); +writeFileSync(resolve(site, 'build-info.txt'), `${version}\nIntaRNA repository: ${metadata.source}\nIntaRNA revision: ${metadata.commit}${metadata.dirty ? ' (modified sources)' : ''}\nEmscripten: ${emscripten}\nzlib: ${metadata.zlib}\nViennaRNA archive: ${viennaUrl}\nViennaRNA archive SHA-256: ${viennaSha256}\n${Object.entries(metadata.sha256).map(([name, hash]) => `SHA-256 ${name}: ${hash}`).join('\n')}\n`); +console.log(`Recorded compiled versions: IntaRNA ${match[1]}, ViennaRNA ${match[2]}, Boost ${match[3]}`); diff --git a/src/IntaRNA/AccessibilityBasePair.h b/src/IntaRNA/AccessibilityBasePair.h index 54cf9471..f8866c0d 100644 --- a/src/IntaRNA/AccessibilityBasePair.h +++ b/src/IntaRNA/AccessibilityBasePair.h @@ -47,7 +47,7 @@ class AccessibilityBasePair: public Accessibility { /*** * Destructor of AccessibilityBasePair */ - virtual ~AccessibilityBasePair(); + virtual ~AccessibilityBasePair() override; /*** * Returns the accessibility energy value between the indices (from, to) @@ -59,7 +59,7 @@ class AccessibilityBasePair: public Accessibility { * * @throw std::runtime_error in case it does not hold 0 <= from <= to < seq.length */ - virtual E_type getED( const size_t from, const size_t to ) const; + virtual E_type getED( const size_t from, const size_t to ) const override; protected: diff --git a/src/IntaRNA/AccessibilityDisabled.h b/src/IntaRNA/AccessibilityDisabled.h index f50ba243..d72f9215 100644 --- a/src/IntaRNA/AccessibilityDisabled.h +++ b/src/IntaRNA/AccessibilityDisabled.h @@ -38,7 +38,7 @@ class AccessibilityDisabled: public Accessibility { /** * destruction */ - virtual ~AccessibilityDisabled(); + virtual ~AccessibilityDisabled() override; /** * Always returns a zero accessibility energy value. @@ -50,7 +50,7 @@ class AccessibilityDisabled: public Accessibility { */ virtual E_type - getED( const size_t from, const size_t to ) const; + getED( const size_t from, const size_t to ) const override; }; diff --git a/src/IntaRNA/AccessibilityFromStream.h b/src/IntaRNA/AccessibilityFromStream.h index 79493c0e..a3169214 100644 --- a/src/IntaRNA/AccessibilityFromStream.h +++ b/src/IntaRNA/AccessibilityFromStream.h @@ -52,7 +52,7 @@ class AccessibilityFromStream: public Accessibility /** * destruction */ - virtual ~AccessibilityFromStream(); + virtual ~AccessibilityFromStream() override; /** @@ -68,7 +68,7 @@ class AccessibilityFromStream: public Accessibility */ virtual E_type - getED( const size_t from, const size_t to ) const; + getED( const size_t from, const size_t to ) const override; /** * Access to the maximal length of accessible regions (>0) to be considered. @@ -80,7 +80,7 @@ class AccessibilityFromStream: public Accessibility */ virtual size_t - getMaxLength() const; + getMaxLength() const override; /** diff --git a/src/IntaRNA/AccessibilityVrna.h b/src/IntaRNA/AccessibilityVrna.h index 83a03c07..1f4ac3f4 100644 --- a/src/IntaRNA/AccessibilityVrna.h +++ b/src/IntaRNA/AccessibilityVrna.h @@ -57,7 +57,7 @@ class AccessibilityVrna : public Accessibility { /** * destruction */ - virtual ~AccessibilityVrna(); + virtual ~AccessibilityVrna() override; /** * Returns the accessibility energy value for the given range in the @@ -72,7 +72,7 @@ class AccessibilityVrna : public Accessibility { */ virtual E_type - getED( const size_t from, const size_t to ) const; + getED( const size_t from, const size_t to ) const override; /** diff --git a/src/IntaRNA/HelixHandlerIdxOffset.h b/src/IntaRNA/HelixHandlerIdxOffset.h index bd8dfe32..d06153bf 100644 --- a/src/IntaRNA/HelixHandlerIdxOffset.h +++ b/src/IntaRNA/HelixHandlerIdxOffset.h @@ -31,7 +31,7 @@ class HelixHandlerIdxOffset : public HelixHandler /** * destruction */ - virtual ~HelixHandlerIdxOffset(); + virtual ~HelixHandlerIdxOffset() override; /** * Access to the underlying interaction energy function @@ -39,7 +39,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual const InteractionEnergy& - getInteractionEnergy() const; + getInteractionEnergy() const override; /** * Access to the currently used index offset for sequence 1 @@ -73,7 +73,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual const HelixConstraint& - getConstraint() const; + getConstraint() const override; /** * Computes the helix matrix for the given interval boundaries @@ -89,7 +89,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual size_t - fillHelix(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillHelix(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Computes the helix matrix for the given interval boundaries for helices containing a seed @@ -104,7 +104,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual size_t - fillHelixSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillHelixSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Identifies the base pairs of the mfe helix interaction starting at i1,i2 @@ -120,7 +120,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual void - traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2); + traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2) override; /** * Identifies the base pairs of the mfe helix interaction, containing a seed, starting at i1,i2 @@ -134,7 +134,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual void - traceBackHelixSeed( Interaction & interaction, const size_t i1, const size_t i2); + traceBackHelixSeed( Interaction & interaction, const size_t i1, const size_t i2) override; /** * Access to the mfe of any helix with left-most base pair (i1,i2) @@ -147,7 +147,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual E_type - getHelixE( const size_t i1, const size_t i2 ) const; + getHelixE( const size_t i1, const size_t i2 ) const override; /** * Access to the mfe of any helix with left-most base pair (i1,i2) and containing a seed @@ -160,7 +160,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual E_type - getHelixSeedE( const size_t i1, const size_t i2 ) const; + getHelixSeedE( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe helix with left-most base pair (i1,i2) @@ -173,7 +173,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual size_t - getHelixLength1( const size_t i1, const size_t i2 ) const; + getHelixLength1( const size_t i1, const size_t i2 ) const override; /** @@ -187,7 +187,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual size_t - getHelixLength2( const size_t i1, const size_t i2 ) const; + getHelixLength2( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe helix with left-most base pair (i1,i2), containing a seed @@ -200,7 +200,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual size_t - getHelixSeedLength1( const size_t i1, const size_t i2 ) const; + getHelixSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe helix with left-most base pair (i1,i2), containing a seed @@ -213,7 +213,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual size_t - getHelixSeedLength2( const size_t i1, const size_t i2 ) const; + getHelixSeedLength2( const size_t i1, const size_t i2 ) const override; /** * Check whether the given seedHandler is of type SeedHandlerIdxOffset @@ -223,7 +223,7 @@ class HelixHandlerIdxOffset : public HelixHandler */ virtual void - setSeedHandler( SeedHandler & seedHandler); + setSeedHandler( SeedHandler & seedHandler) override; protected: diff --git a/src/IntaRNA/HelixHandlerNoBulgeMax.h b/src/IntaRNA/HelixHandlerNoBulgeMax.h index 485ec935..cfbe5ca3 100644 --- a/src/IntaRNA/HelixHandlerNoBulgeMax.h +++ b/src/IntaRNA/HelixHandlerNoBulgeMax.h @@ -49,7 +49,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { /** * destructor */ - virtual ~HelixHandlerNoBulgeMax(); + virtual ~HelixHandlerNoBulgeMax() override; /** * Access to the underlying helix constraint @@ -57,7 +57,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual const HelixConstraint& - getConstraint() const; + getConstraint() const override; /** * Access to the underlying interaction energy function @@ -65,7 +65,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual const InteractionEnergy& - getInteractionEnergy() const; + getInteractionEnergy() const override; /** @@ -78,7 +78,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual size_t - fillHelix( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ); + fillHelix( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) override; /** * Compute the helix matrix, containing a seed, for the given interval boundaries @@ -90,7 +90,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual size_t - fillHelixSeed( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ); + fillHelixSeed( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) override; /** * Identifies the base pairs of the mfe helix interaction starting at i1,i2 @@ -104,7 +104,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual void - traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2); + traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2) override; /** * Identifies the base pairs of the mfe helix interaction, containing a seed, starting at i1,i2 @@ -116,7 +116,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual void - traceBackHelixSeed( Interaction & interaction, const size_t i1, size_t i2); + traceBackHelixSeed( Interaction & interaction, const size_t i1, size_t i2) override; /** * Access to the mfe of any helix with left-most base pair (i1, i2) @@ -126,7 +126,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { * or return 0 if bp is 0 or 1 (used in helixHandlerSeed computation to avoid too many conditions) */ virtual - E_type getHelixE( const size_t i1, const size_t i2 ) const; + E_type getHelixE( const size_t i1, const size_t i2 ) const override; /** * Access to the mfe of any helix, containing a seed, with left-most base pair (i1, i2) @@ -135,7 +135,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { * @return the mfe of any helix starting at (i1,i2) or E_INF if none possible */ virtual - E_type getHelixSeedE( const size_t i1, const size_t i2 ) const; + E_type getHelixSeedE( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe helix with left-most base pair (i1,i2) @@ -145,7 +145,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual size_t - getHelixLength1( const size_t i1, const size_t i2 ) const; + getHelixLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe helix with left-most base pair (i1,i2) @@ -155,7 +155,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual size_t - getHelixLength2( const size_t i1, const size_t i2 ) const; + getHelixLength2( const size_t i1, const size_t i2 ) const override; /** @@ -166,7 +166,7 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual size_t - getHelixSeedLength1( const size_t i1, const size_t i2 ) const; + getHelixSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe helix, containing a seed, with left-most base pair (i1,i2) @@ -176,13 +176,13 @@ class HelixHandlerNoBulgeMax : public HelixHandler { */ virtual size_t - getHelixSeedLength2( const size_t i1, const size_t i2 ) const; + getHelixSeedLength2( const size_t i1, const size_t i2 ) const override; /** * Set the seedHandler in order to compute helixSeed * @param seedHandler seedHandler to be used in the helix computation */ - void setSeedHandler(SeedHandler & seedHandler); + void setSeedHandler(SeedHandler & seedHandler) override; protected: diff --git a/src/IntaRNA/HelixHandlerUnpaired.h b/src/IntaRNA/HelixHandlerUnpaired.h index 0be76450..dddafa95 100644 --- a/src/IntaRNA/HelixHandlerUnpaired.h +++ b/src/IntaRNA/HelixHandlerUnpaired.h @@ -58,7 +58,7 @@ class HelixHandlerUnpaired : public HelixHandler { /** * destructor */ - virtual ~HelixHandlerUnpaired(); + virtual ~HelixHandlerUnpaired() override; /** * Access to the underlying helix constraint @@ -66,7 +66,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual const HelixConstraint& - getConstraint() const; + getConstraint() const override; /** * Access to the underlying interaction energy function @@ -74,7 +74,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual const InteractionEnergy& - getInteractionEnergy() const; + getInteractionEnergy() const override; /** * Compute the helix matrix for the given interval boundaries @@ -86,7 +86,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual size_t - fillHelix( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ); + fillHelix( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) override; /** * Computes the helix information for the given interval boundaries for helices containing a seed @@ -98,7 +98,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual size_t - fillHelixSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillHelixSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Identifies the base pairs of the mfe helix interaction starting at i1,i2 @@ -112,7 +112,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual void - traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2); + traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2) override; /** * Identifies the base pairs of the mfe helix interaction starting at i1,i2 @@ -126,7 +126,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual void - traceBackHelixSeed( Interaction & interaction, const size_t i1, const size_t i2); + traceBackHelixSeed( Interaction & interaction, const size_t i1, const size_t i2) override; /** * Access to the mfe of any helix with left-most base pair (i1, i2) @@ -136,7 +136,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual E_type - getHelixE( const size_t i1, const size_t i2 ) const; + getHelixE( const size_t i1, const size_t i2 ) const override; /** * Access to the mfe of any helix with left-most base pair (i1,i2) @@ -146,7 +146,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual E_type - getHelixSeedE( const size_t i1, const size_t i2 ) const; + getHelixSeedE( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe helix with left-most base pair (i1,i2) @@ -156,7 +156,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual size_t - getHelixLength1( const size_t i1, const size_t i2 ) const; + getHelixLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe helix with left-most base pair (i1,i2) @@ -166,7 +166,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual size_t - getHelixLength2( const size_t i1, const size_t i2 ) const; + getHelixLength2( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe helix with left-most base pair (i1,i2) @@ -198,7 +198,7 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual size_t - getHelixSeedLength1( const size_t i1, const size_t i2 ) const; + getHelixSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe helix with left-most base pair (i1,i2) containing a seed @@ -208,13 +208,13 @@ class HelixHandlerUnpaired : public HelixHandler { */ virtual size_t - getHelixSeedLength2( const size_t i1, const size_t i2 ) const; + getHelixSeedLength2( const size_t i1, const size_t i2 ) const override; /** * Set the seedHandler in order to compute helixSeed * @param seedHandler seedHandler to be used in the helix computation */ - void setSeedHandler(SeedHandler & seedHandler); + void setSeedHandler(SeedHandler & seedHandler) override; protected: diff --git a/src/IntaRNA/InteractionEnergyBasePair.h b/src/IntaRNA/InteractionEnergyBasePair.h index 27804aeb..1d39ac36 100644 --- a/src/IntaRNA/InteractionEnergyBasePair.h +++ b/src/IntaRNA/InteractionEnergyBasePair.h @@ -61,7 +61,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { , const bool internalLoopGU = true ); - virtual ~InteractionEnergyBasePair(); + virtual ~InteractionEnergyBasePair() override; /** @@ -79,7 +79,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getES1( const size_t i1, const size_t j1 ) const; + getES1( const size_t i1, const size_t j1 ) const override; /** * Provides the ensemble energy (ES) of all intramolecular substructures @@ -96,7 +96,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getES2( const size_t i2, const size_t j2 ) const; + getES2( const size_t i2, const size_t j2 ) const override; /** * Provides the energy contribution for a given number of unpaired @@ -109,7 +109,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_multiUnpaired( const size_t numUnpaired ) const; + getE_multiUnpaired( const size_t numUnpaired ) const override; /** @@ -125,7 +125,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_multiHelix( const size_t j1, const size_t j2 ) const; + getE_multiHelix( const size_t j1, const size_t j2 ) const override; /** * Provides the energy contribution/penalty for closing an intermolecular @@ -135,7 +135,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_multiClosing() const; + getE_multiClosing() const override; /** @@ -145,7 +145,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_init() const; + getE_init() const override; /** @@ -165,7 +165,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_interLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const; + getE_interLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const override; /** * Computes the dangling end energy penalty estimate for the left side of @@ -181,7 +181,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_danglingLeft( const size_t i1, const size_t i2 ) const; + getE_danglingLeft( const size_t i1, const size_t i2 ) const override; /** @@ -196,7 +196,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_danglingRight( const size_t j1, const size_t j2 ) const; + getE_danglingRight( const size_t j1, const size_t j2 ) const override; /** * Provides the penalty for closing an interaction with the given @@ -209,7 +209,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_endLeft( const size_t i1, const size_t i2 ) const; + getE_endLeft( const size_t i1, const size_t i2 ) const override; /** * Provides the penalty for closing an interaction with the given @@ -222,7 +222,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getE_endRight( const size_t j1, const size_t j2 ) const; + getE_endRight( const size_t j1, const size_t j2 ) const override; /** * Returns always RT=1 due to the lack of reasonable values for this energy @@ -231,7 +231,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual Z_type - getRT() const; + getRT() const override; /** * Provides the (constant) energy contribution of a base pair (sequence independent) @@ -249,7 +249,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getEall1() const; + getEall1() const override; /** * Provides the overall ensemble energy for sequence 2 @@ -258,7 +258,7 @@ class InteractionEnergyBasePair: public InteractionEnergy { */ virtual E_type - getEall2() const; + getEall2() const override; private: diff --git a/src/IntaRNA/InteractionEnergyIdxOffset.h b/src/IntaRNA/InteractionEnergyIdxOffset.h index 1d0c7b69..f43e016e 100644 --- a/src/IntaRNA/InteractionEnergyIdxOffset.h +++ b/src/IntaRNA/InteractionEnergyIdxOffset.h @@ -30,7 +30,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy , const size_t offset2 = 0 ); - virtual ~InteractionEnergyIdxOffset(); + virtual ~InteractionEnergyIdxOffset() override; /** * Access to the currently used index offset for sequence 1 @@ -77,7 +77,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy E_type getE( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 - , const E_type hybridE ) const; + , const E_type hybridE ) const override; /** * Provides the ensemble energy for a given partition function Z. @@ -88,7 +88,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE( const Z_type Z ) const; + getE( const Z_type Z ) const override; /** * Checks whether or not two positions (shifted by offset) can form a base pair @@ -98,7 +98,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual bool - areComplementary( const size_t i1, const size_t i2 ) const; + areComplementary( const size_t i1, const size_t i2 ) const override; /** * Checks whether or not two positions can form a GU base pair @@ -108,7 +108,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual bool - isGU( const size_t i1, const size_t i2 ) const; + isGU( const size_t i1, const size_t i2 ) const override; /** * Length of sequence 1 excluding the index offset @@ -116,7 +116,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual size_t - size1() const; + size1() const override; /** * Length of sequence 2 excluding index offset @@ -124,7 +124,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual size_t - size2() const; + size2() const override; /** * Provides the ED penalty for making a region with sequence 1 accessible @@ -137,7 +137,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getED1( const size_t i1, const size_t j1 ) const; + getED1( const size_t i1, const size_t j1 ) const override; /** * Provides the ED penalty for making a region with (the reversed) @@ -151,7 +151,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getED2( const size_t i2, const size_t j2 ) const; + getED2( const size_t i2, const size_t j2 ) const override; /** * Whether or not position i is accessible for interaction in sequence 1 @@ -163,7 +163,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual bool - isAccessible1( const size_t i ) const; + isAccessible1( const size_t i ) const override; /** * Whether or not position i is accessible for interaction in sequence 2 @@ -175,7 +175,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual bool - isAccessible2( const size_t i ) const; + isAccessible2( const size_t i ) const override; /** * Provides the energy contribution of an interaction site gap, i.e. the @@ -197,7 +197,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy E_type getE_multi( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 - , const ES_multi_mode ES_mode ) const; + , const ES_multi_mode ES_mode ) const override; /** * Provides the ensemble energy (ES) of all intramolecular substructures @@ -214,7 +214,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getES1( const size_t i1, const size_t j1 ) const; + getES1( const size_t i1, const size_t j1 ) const override; /** * Provides the ensemble energy (ES) of all intramolecular substructures @@ -231,7 +231,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getES2( const size_t i2, const size_t j2 ) const; + getES2( const size_t i2, const size_t j2 ) const override; /** * Provides the energy contribution for a given number of unpaired @@ -244,7 +244,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_multiUnpaired( const size_t numUnpaired ) const; + getE_multiUnpaired( const size_t numUnpaired ) const override; /** @@ -262,7 +262,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_multiHelix( const size_t j1, const size_t j2 ) const; + getE_multiHelix( const size_t j1, const size_t j2 ) const override; /** * Provides the energy contribution/penalty for closing an intermolecular @@ -273,7 +273,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_multiClosing() const; + getE_multiClosing() const override; /** * Provides the duplex initiation energy. @@ -282,7 +282,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_init( ) const; + getE_init( ) const override; /** @@ -306,7 +306,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_interLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const; + getE_interLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const override; /** @@ -323,7 +323,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_danglingLeft( const size_t i1, const size_t i2 ) const; + getE_danglingLeft( const size_t i1, const size_t i2 ) const override; /** @@ -340,7 +340,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_danglingRight( const size_t j1, const size_t j2 ) const; + getE_danglingRight( const size_t j1, const size_t j2 ) const override; /** * Provides the penalty for closing an interaction with the given @@ -355,7 +355,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_endLeft( const size_t i1, const size_t i2 ) const; + getE_endLeft( const size_t i1, const size_t i2 ) const override; /** * Provides the penalty for closing an interaction with the given @@ -370,7 +370,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getE_endRight( const size_t j1, const size_t j2 ) const; + getE_endRight( const size_t j1, const size_t j2 ) const override; /** * Computes the probability of the dangling ends for the left side @@ -388,7 +388,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual Z_type - getPr_danglingLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const; + getPr_danglingLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const override; /** * Computes the probability of the dangling ends for the right side @@ -406,7 +406,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual Z_type - getPr_danglingRight( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const; + getPr_danglingRight( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const override; @@ -415,7 +415,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual Z_type - getRT() const; + getRT() const override; /** * Provides the base pair encoding for the given indices after shifting by @@ -426,7 +426,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual Interaction::BasePair - getBasePair( const size_t i1, const size_t i2 ) const; + getBasePair( const size_t i1, const size_t i2 ) const override; /** @@ -436,7 +436,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual size_t - getIndex1( const Interaction::BasePair & bp ) const; + getIndex1( const Interaction::BasePair & bp ) const override; /** @@ -446,7 +446,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual size_t - getIndex2( const Interaction::BasePair & bp ) const; + getIndex2( const Interaction::BasePair & bp ) const override; /** @@ -467,7 +467,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual bool - isValidInternalLoop( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const; + isValidInternalLoop( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const override; /** * Provides the overall ensemble energy for sequence 1 @@ -476,7 +476,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getEall1() const; + getEall1() const override; /** * Provides the overall ensemble energy for sequence 2 @@ -485,7 +485,7 @@ class InteractionEnergyIdxOffset : public InteractionEnergy */ virtual E_type - getEall2() const; + getEall2() const override; protected: diff --git a/src/IntaRNA/InteractionEnergyVrna.h b/src/IntaRNA/InteractionEnergyVrna.h index 5374f1fb..4b17653b 100644 --- a/src/IntaRNA/InteractionEnergyVrna.h +++ b/src/IntaRNA/InteractionEnergyVrna.h @@ -75,7 +75,7 @@ class InteractionEnergyVrna: public InteractionEnergy { , const bool internalLoopGU = true ); - virtual ~InteractionEnergyVrna(); + virtual ~InteractionEnergyVrna() override; /** @@ -93,7 +93,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getES1( const size_t i1, const size_t j1 ) const; + getES1( const size_t i1, const size_t j1 ) const override; /** * Provides the ensemble energy (ES) of all intramolecular substructures @@ -110,7 +110,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getES2( const size_t i2, const size_t j2 ) const; + getES2( const size_t i2, const size_t j2 ) const override; /** * Provides the energy contribution for a given number of unpaired @@ -123,7 +123,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_multiUnpaired( const size_t numUnpaired ) const; + getE_multiUnpaired( const size_t numUnpaired ) const override; /** * Provides the energy contribution/penalty of the helix repesented by the @@ -139,7 +139,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_multiHelix( const size_t j1, const size_t j2 ) const; + getE_multiHelix( const size_t j1, const size_t j2 ) const override; /** * Provides the energy contribution/penalty for closing an intermolecular @@ -150,7 +150,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_multiClosing() const; + getE_multiClosing() const override; /** * Provides the duplex initiation energy. @@ -159,7 +159,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_init() const; + getE_init() const override; /** * Computes the energy estimate for the interaction loop region closed by @@ -180,7 +180,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_interLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const; + getE_interLeft( const size_t i1, const size_t j1, const size_t i2, const size_t j2 ) const override; /** @@ -195,7 +195,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_danglingLeft( const size_t i1, const size_t i2 ) const; + getE_danglingLeft( const size_t i1, const size_t i2 ) const override; /** @@ -210,7 +210,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_danglingRight( const size_t j1, const size_t j2 ) const; + getE_danglingRight( const size_t j1, const size_t j2 ) const override; /** @@ -224,7 +224,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_endLeft( const size_t i1, const size_t i2 ) const; + getE_endLeft( const size_t i1, const size_t i2 ) const override; /** * Provides the penalty for closing an interaction with the given @@ -237,7 +237,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getE_endRight( const size_t j1, const size_t j2 ) const; + getE_endRight( const size_t j1, const size_t j2 ) const override; /** * Provides the overall ensemble energy for sequence 1 @@ -246,7 +246,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getEall1() const; + getEall1() const override; /** * Provides the overall ensemble energy for sequence 2 @@ -255,7 +255,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual E_type - getEall2() const; + getEall2() const override; /** * Provides the overall partition function for sequence 2 @@ -264,7 +264,7 @@ class InteractionEnergyVrna: public InteractionEnergy { */ virtual Z_type - getRT() const; + getRT() const override; protected: diff --git a/src/IntaRNA/Makefile.am b/src/IntaRNA/Makefile.am index 178691d6..7ed89752 100644 --- a/src/IntaRNA/Makefile.am +++ b/src/IntaRNA/Makefile.am @@ -178,7 +178,7 @@ nodist_libIntaRNA_a_SOURCES = \ if enable_pkg_config pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = $(top_srcdir)/IntaRNA.pc +pkgconfig_DATA = $(top_builddir)/IntaRNA.pc endif ############################################################################### diff --git a/src/IntaRNA/OutputHandlerCsv.h b/src/IntaRNA/OutputHandlerCsv.h index 7c707ec6..4a5e5480 100644 --- a/src/IntaRNA/OutputHandlerCsv.h +++ b/src/IntaRNA/OutputHandlerCsv.h @@ -202,7 +202,7 @@ class OutputHandlerCsv : public OutputHandler /** * destruction */ - virtual ~OutputHandlerCsv(); + virtual ~OutputHandlerCsv() override; /** * Write a given RNA-RNA interaction in simple text format to the output @@ -212,7 +212,7 @@ class OutputHandlerCsv : public OutputHandler */ virtual void - add( const Interaction & interaction ); + add( const Interaction & interaction ) override; /** * Converts a list of Coltypes to their string representation. diff --git a/src/IntaRNA/OutputHandlerEnsemble.h b/src/IntaRNA/OutputHandlerEnsemble.h index e19b408b..9e2391bf 100644 --- a/src/IntaRNA/OutputHandlerEnsemble.h +++ b/src/IntaRNA/OutputHandlerEnsemble.h @@ -37,7 +37,7 @@ class OutputHandlerEnsemble: public OutputHandler { * - prints ensemble information to stream and * - enforces a flush on the output stream. */ - virtual ~OutputHandlerEnsemble(); + virtual ~OutputHandlerEnsemble() override; /** * Does nothing but counts the call @@ -47,7 +47,7 @@ class OutputHandlerEnsemble: public OutputHandler { */ virtual void - add( const Interaction & interaction ); + add( const Interaction & interaction ) override; protected: diff --git a/src/IntaRNA/OutputHandlerHub.h b/src/IntaRNA/OutputHandlerHub.h index ac5e4cb2..9af6bb81 100644 --- a/src/IntaRNA/OutputHandlerHub.h +++ b/src/IntaRNA/OutputHandlerHub.h @@ -50,7 +50,7 @@ class OutputHandlerHub: public OutputHandler /** * destruction */ - virtual ~OutputHandlerHub(); + virtual ~OutputHandlerHub() override; /** @@ -61,7 +61,7 @@ class OutputHandlerHub: public OutputHandler */ virtual void - add( const Interaction & interaction ); + add( const Interaction & interaction ) override; /** * Returns the maximal number of reported interactions among all handlers @@ -70,7 +70,7 @@ class OutputHandlerHub: public OutputHandler */ virtual size_t - reported() const; + reported() const override; /** * Increments the overall partition function with the given value. @@ -83,7 +83,7 @@ class OutputHandlerHub: public OutputHandler */ virtual void - incrementZ( const Z_type subZ ); + incrementZ( const Z_type subZ ) override; /** * Access to the partition function (initialized with 0) aggregated via @@ -93,7 +93,7 @@ class OutputHandlerHub: public OutputHandler */ virtual Z_type - getZ() const; + getZ() const override; /** * Adds a new OutputHandler to the forwarding list. diff --git a/src/IntaRNA/OutputHandlerInteractionList.h b/src/IntaRNA/OutputHandlerInteractionList.h index abfbd905..c2735168 100644 --- a/src/IntaRNA/OutputHandlerInteractionList.h +++ b/src/IntaRNA/OutputHandlerInteractionList.h @@ -41,7 +41,7 @@ class OutputHandlerInteractionList: public OutputHandler , const size_t maxToStore); //! destruction - virtual ~OutputHandlerInteractionList(); + virtual ~OutputHandlerInteractionList() override; /** * Adds a given RNA-RNA interaction to the storage/output. @@ -50,7 +50,7 @@ class OutputHandlerInteractionList: public OutputHandler */ virtual void - add( const Interaction & interaction ); + add( const Interaction & interaction ) override; //! whether or not the container is empty //! @return true if no elements are stored diff --git a/src/IntaRNA/OutputHandlerText.h b/src/IntaRNA/OutputHandlerText.h index d95fb331..253cd33b 100644 --- a/src/IntaRNA/OutputHandlerText.h +++ b/src/IntaRNA/OutputHandlerText.h @@ -41,7 +41,7 @@ class OutputHandlerText: public OutputHandler { /** * destruction, enforces a flush on the output stream. */ - virtual ~OutputHandlerText(); + virtual ~OutputHandlerText() override; /** * Write a given RNA-RNA interaction in simple text format to the output @@ -51,7 +51,7 @@ class OutputHandlerText: public OutputHandler { */ virtual void - add( const Interaction & interaction ); + add( const Interaction & interaction ) override; protected: diff --git a/src/IntaRNA/OutputStreamHandlerSortedCsv.h b/src/IntaRNA/OutputStreamHandlerSortedCsv.h index d0108983..6d16683b 100644 --- a/src/IntaRNA/OutputStreamHandlerSortedCsv.h +++ b/src/IntaRNA/OutputStreamHandlerSortedCsv.h @@ -46,14 +46,14 @@ class OutputStreamHandlerSortedCsv : public OutputStreamHandler * - calls flush() on the final output * - destruction of the underlying OutputStreamHandler */ - virtual ~OutputStreamHandlerSortedCsv(); + virtual ~OutputStreamHandlerSortedCsv() override; /** * Access to the ostream to which unsorted CSV output is to be written. * @return the output stream to write unsorted CSV output to */ virtual - std::ostream& getOutStream(); + std::ostream& getOutStream() override; protected: diff --git a/src/IntaRNA/PredictionTrackerHub.h b/src/IntaRNA/PredictionTrackerHub.h index 2718f92b..6e7e4297 100644 --- a/src/IntaRNA/PredictionTrackerHub.h +++ b/src/IntaRNA/PredictionTrackerHub.h @@ -44,7 +44,7 @@ class PredictionTrackerHub: public PredictionTracker /** * destruction */ - virtual ~PredictionTrackerHub(); + virtual ~PredictionTrackerHub() override; /** * Informs all registered trackers that Predictor.updateOptima() was called @@ -61,7 +61,7 @@ class PredictionTrackerHub: public PredictionTracker updateOptimumCalled( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 , const E_type energy - ); + ) override; /** * Adds a new PredictionTracker to the forwarding list. diff --git a/src/IntaRNA/PredictionTrackerPairMinE.h b/src/IntaRNA/PredictionTrackerPairMinE.h index 06bd9c2f..cf9fc55b 100644 --- a/src/IntaRNA/PredictionTrackerPairMinE.h +++ b/src/IntaRNA/PredictionTrackerPairMinE.h @@ -69,7 +69,7 @@ class PredictionTrackerPairMinE: public PredictionTracker /** * destruction: write the pair information to the according stream. */ - virtual ~PredictionTrackerPairMinE(); + virtual ~PredictionTrackerPairMinE() override; /** @@ -86,7 +86,7 @@ class PredictionTrackerPairMinE: public PredictionTracker updateOptimumCalled( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 , const E_type energy - ); + ) override; protected: diff --git a/src/IntaRNA/PredictionTrackerProfileMinE.h b/src/IntaRNA/PredictionTrackerProfileMinE.h index f8747456..f36c1067 100644 --- a/src/IntaRNA/PredictionTrackerProfileMinE.h +++ b/src/IntaRNA/PredictionTrackerProfileMinE.h @@ -71,7 +71,7 @@ class PredictionTrackerProfileMinE: public PredictionTracker /** * destruction: write the profile(s) to the according streams. */ - virtual ~PredictionTrackerProfileMinE(); + virtual ~PredictionTrackerProfileMinE() override; /** @@ -88,7 +88,7 @@ class PredictionTrackerProfileMinE: public PredictionTracker updateOptimumCalled( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 , const E_type energy - ); + ) override; protected: diff --git a/src/IntaRNA/PredictionTrackerProfileSpotProb.h b/src/IntaRNA/PredictionTrackerProfileSpotProb.h index 0a127fb6..632b2853 100644 --- a/src/IntaRNA/PredictionTrackerProfileSpotProb.h +++ b/src/IntaRNA/PredictionTrackerProfileSpotProb.h @@ -75,7 +75,7 @@ class PredictionTrackerProfileSpotProb: public PredictionTracker /** * destruction: write the profile(s) to the according streams. */ - virtual ~PredictionTrackerProfileSpotProb(); + virtual ~PredictionTrackerProfileSpotProb() override; /** @@ -92,7 +92,7 @@ class PredictionTrackerProfileSpotProb: public PredictionTracker updateOptimumCalled( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 , const E_type energy - ); + ) override; protected: diff --git a/src/IntaRNA/PredictionTrackerSpotProb.h b/src/IntaRNA/PredictionTrackerSpotProb.h index a6e9afc4..01bdb05e 100644 --- a/src/IntaRNA/PredictionTrackerSpotProb.h +++ b/src/IntaRNA/PredictionTrackerSpotProb.h @@ -71,7 +71,7 @@ class PredictionTrackerSpotProb: public PredictionTracker /** * destruction: write the probabilities to stream. */ - virtual ~PredictionTrackerSpotProb(); + virtual ~PredictionTrackerSpotProb() override; /** @@ -88,7 +88,7 @@ class PredictionTrackerSpotProb: public PredictionTracker updateOptimumCalled( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 , const E_type energy - ); + ) override; protected: diff --git a/src/IntaRNA/PredictionTrackerSpotProbAll.h b/src/IntaRNA/PredictionTrackerSpotProbAll.h index 906b49ba..0d6cffc0 100644 --- a/src/IntaRNA/PredictionTrackerSpotProbAll.h +++ b/src/IntaRNA/PredictionTrackerSpotProbAll.h @@ -69,7 +69,7 @@ class PredictionTrackerSpotProbAll: public PredictionTracker /** * destruction: write the profile(s) to the according streams. */ - virtual ~PredictionTrackerSpotProbAll(); + virtual ~PredictionTrackerSpotProbAll() override; /** @@ -87,7 +87,7 @@ class PredictionTrackerSpotProbAll: public PredictionTracker updateOptimumCalled( const size_t i1, const size_t j1 , const size_t i2, const size_t j2 , const E_type energy - ); + ) override; protected: diff --git a/src/IntaRNA/PredictorMfe.h b/src/IntaRNA/PredictorMfe.h index 35501d33..dd7fa7ea 100644 --- a/src/IntaRNA/PredictorMfe.h +++ b/src/IntaRNA/PredictorMfe.h @@ -75,7 +75,7 @@ class PredictorMfe : public Predictor { , OutputHandler & output , PredictionTracker * predTracker ); - virtual ~PredictorMfe(); + virtual ~PredictorMfe() override; protected: @@ -112,7 +112,7 @@ class PredictorMfe : public Predictor { */ virtual void - initOptima(); + initOptima() override; /** * Checks terminal GU and accessibility constraints for a complete site. @@ -145,7 +145,7 @@ class PredictorMfe : public Predictor { , const size_t i2, const size_t j2 , const E_type energy , const bool isHybridE - , const bool incrementZall ); + , const bool incrementZall ) override; /** @@ -199,7 +199,7 @@ class PredictorMfe : public Predictor { */ virtual void - reportOptima(); + reportOptima() override; }; diff --git a/src/IntaRNA/PredictorMfe2d.h b/src/IntaRNA/PredictorMfe2d.h index 2e060f49..de3d62d5 100644 --- a/src/IntaRNA/PredictorMfe2d.h +++ b/src/IntaRNA/PredictorMfe2d.h @@ -38,7 +38,7 @@ class PredictorMfe2d: public PredictorMfe { , OutputHandler & output , PredictionTracker * predTracker ); - virtual ~PredictorMfe2d(); + virtual ~PredictorMfe2d() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -53,7 +53,7 @@ class PredictorMfe2d: public PredictorMfe { void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) - ); + ) override; protected: @@ -94,7 +94,7 @@ class PredictorMfe2d: public PredictorMfe { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; }; diff --git a/src/IntaRNA/PredictorMfe2dHelixBlockHeuristic.h b/src/IntaRNA/PredictorMfe2dHelixBlockHeuristic.h index 2370901c..7fb1e18e 100644 --- a/src/IntaRNA/PredictorMfe2dHelixBlockHeuristic.h +++ b/src/IntaRNA/PredictorMfe2dHelixBlockHeuristic.h @@ -47,7 +47,7 @@ class PredictorMfe2dHelixBlockHeuristic: public PredictorMfe2dHeuristic { , PredictionTracker * predTracker , const HelixConstraint & helixConstraint); - virtual ~PredictorMfe2dHelixBlockHeuristic(); + virtual ~PredictorMfe2dHelixBlockHeuristic() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -61,7 +61,7 @@ class PredictorMfe2dHelixBlockHeuristic: public PredictorMfe2dHeuristic { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -88,7 +88,7 @@ class PredictorMfe2dHelixBlockHeuristic: public PredictorMfe2dHeuristic { */ virtual void - fillHybridE(); + fillHybridE() override; /** * Fills a given interaction (boundaries given) with the according @@ -97,7 +97,7 @@ class PredictorMfe2dHelixBlockHeuristic: public PredictorMfe2dHeuristic { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; /** * Identifies the next best interaction with an energy equal to or higher @@ -111,7 +111,7 @@ class PredictorMfe2dHelixBlockHeuristic: public PredictorMfe2dHeuristic { */ virtual void - getNextBest( Interaction & curBest ); + getNextBest( Interaction & curBest ) override; /** * Overwrites function of super class to surpress the update. @@ -126,7 +126,7 @@ class PredictorMfe2dHelixBlockHeuristic: public PredictorMfe2dHeuristic { void updateMfe4leftEnd(const size_t i1, const size_t j1 , const size_t i2, const size_t j2 - , const Interaction & curInteraction ); + , const Interaction & curInteraction ) override; }; diff --git a/src/IntaRNA/PredictorMfe2dHelixBlockHeuristicSeed.h b/src/IntaRNA/PredictorMfe2dHelixBlockHeuristicSeed.h index 342a8c65..6238905b 100644 --- a/src/IntaRNA/PredictorMfe2dHelixBlockHeuristicSeed.h +++ b/src/IntaRNA/PredictorMfe2dHelixBlockHeuristicSeed.h @@ -49,7 +49,7 @@ class PredictorMfe2dHelixBlockHeuristicSeed: public PredictorMfe2dHelixBlockHeur , SeedHandler * seedHandlerInstance ); - virtual ~PredictorMfe2dHelixBlockHeuristicSeed(); + virtual ~PredictorMfe2dHelixBlockHeuristicSeed() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -63,7 +63,7 @@ class PredictorMfe2dHelixBlockHeuristicSeed: public PredictorMfe2dHelixBlockHeur virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos)); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos)) override; protected: @@ -98,7 +98,7 @@ class PredictorMfe2dHelixBlockHeuristicSeed: public PredictorMfe2dHelixBlockHeur */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; /** @@ -114,7 +114,7 @@ class PredictorMfe2dHelixBlockHeuristicSeed: public PredictorMfe2dHelixBlockHeur */ virtual void - getNextBest( Interaction & curBest ); + getNextBest( Interaction & curBest ) override; /** * disables predictionTracker usage diff --git a/src/IntaRNA/PredictorMfe2dHeuristic.h b/src/IntaRNA/PredictorMfe2dHeuristic.h index 857c5f0f..059ece2a 100644 --- a/src/IntaRNA/PredictorMfe2dHeuristic.h +++ b/src/IntaRNA/PredictorMfe2dHeuristic.h @@ -44,7 +44,7 @@ class PredictorMfe2dHeuristic: public PredictorMfe { , OutputHandler & output , PredictionTracker * predTracker ); - virtual ~PredictorMfe2dHeuristic(); + virtual ~PredictorMfe2dHeuristic() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -58,7 +58,7 @@ class PredictorMfe2dHeuristic: public PredictorMfe { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -91,7 +91,7 @@ class PredictorMfe2dHeuristic: public PredictorMfe { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; /** * Identifies the next best interaction with an energy equal to or higher @@ -105,7 +105,7 @@ class PredictorMfe2dHeuristic: public PredictorMfe { */ virtual void - getNextBest( Interaction & curBest ); + getNextBest( Interaction & curBest ) override; /** * Overwrites function of super class to surpress the update. @@ -120,7 +120,7 @@ class PredictorMfe2dHeuristic: public PredictorMfe { void updateMfe4leftEnd(const size_t i1, const size_t j1 , const size_t i2, const size_t j2 - , const Interaction & curInteraction ); + , const Interaction & curInteraction ) override; }; diff --git a/src/IntaRNA/PredictorMfe2dHeuristicSeed.h b/src/IntaRNA/PredictorMfe2dHeuristicSeed.h index ef6fe824..5e4fcef3 100644 --- a/src/IntaRNA/PredictorMfe2dHeuristicSeed.h +++ b/src/IntaRNA/PredictorMfe2dHeuristicSeed.h @@ -45,7 +45,7 @@ class PredictorMfe2dHeuristicSeed: public PredictorMfe2dHeuristic { , PredictionTracker * predTracker , SeedHandler* seedHandler ); - virtual ~PredictorMfe2dHeuristicSeed(); + virtual ~PredictorMfe2dHeuristicSeed() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -59,7 +59,7 @@ class PredictorMfe2dHeuristicSeed: public PredictorMfe2dHeuristic { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos)); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos)) override; protected: @@ -91,7 +91,7 @@ class PredictorMfe2dHeuristicSeed: public PredictorMfe2dHeuristic { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; /** @@ -100,7 +100,7 @@ class PredictorMfe2dHeuristicSeed: public PredictorMfe2dHeuristic { */ virtual void - fillHybridE(); + fillHybridE() override; /** @@ -116,7 +116,7 @@ class PredictorMfe2dHeuristicSeed: public PredictorMfe2dHeuristic { */ virtual void - getNextBest( Interaction & curBest ); + getNextBest( Interaction & curBest ) override; }; diff --git a/src/IntaRNA/PredictorMfe2dHeuristicSeedExtension.h b/src/IntaRNA/PredictorMfe2dHeuristicSeedExtension.h index 8d43a315..696ce5db 100644 --- a/src/IntaRNA/PredictorMfe2dHeuristicSeedExtension.h +++ b/src/IntaRNA/PredictorMfe2dHeuristicSeedExtension.h @@ -48,7 +48,7 @@ class PredictorMfe2dHeuristicSeedExtension: public PredictorMfe2dSeedExtension { /** * data cleanup */ - virtual ~PredictorMfe2dHeuristicSeedExtension(); + virtual ~PredictorMfe2dHeuristicSeedExtension() override; /** @@ -66,7 +66,7 @@ class PredictorMfe2dHeuristicSeedExtension: public PredictorMfe2dSeedExtension { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: diff --git a/src/IntaRNA/PredictorMfe2dSeed.h b/src/IntaRNA/PredictorMfe2dSeed.h index d959f97d..e4d1330a 100644 --- a/src/IntaRNA/PredictorMfe2dSeed.h +++ b/src/IntaRNA/PredictorMfe2dSeed.h @@ -53,7 +53,7 @@ class PredictorMfe2dSeed: public PredictorMfe2d { /** * data cleanup */ - virtual ~PredictorMfe2dSeed(); + virtual ~PredictorMfe2dSeed() override; /** @@ -71,7 +71,7 @@ class PredictorMfe2dSeed: public PredictorMfe2d { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -112,7 +112,7 @@ class PredictorMfe2dSeed: public PredictorMfe2d { fillHybridE( const size_t j1, const size_t j2 , const size_t i1init, const size_t i2init , const bool callUpdateOptima - ); + ) override; /** * Fills a given interaction (boundaries given) with the according @@ -121,7 +121,7 @@ class PredictorMfe2dSeed: public PredictorMfe2d { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; }; diff --git a/src/IntaRNA/PredictorMfe2dSeedExtension.h b/src/IntaRNA/PredictorMfe2dSeedExtension.h index 176e14a1..5fef17d9 100644 --- a/src/IntaRNA/PredictorMfe2dSeedExtension.h +++ b/src/IntaRNA/PredictorMfe2dSeedExtension.h @@ -52,7 +52,7 @@ class PredictorMfe2dSeedExtension: public PredictorMfe2d { /** * data cleanup */ - virtual ~PredictorMfe2dSeedExtension(); + virtual ~PredictorMfe2dSeedExtension() override; /** @@ -70,7 +70,7 @@ class PredictorMfe2dSeedExtension: public PredictorMfe2d { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -122,7 +122,7 @@ class PredictorMfe2dSeedExtension: public PredictorMfe2d { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; void printMatrix( const E2dMatrix & matrix ); diff --git a/src/IntaRNA/PredictorMfe2dSeedExtensionRIblast.h b/src/IntaRNA/PredictorMfe2dSeedExtensionRIblast.h index c352cebf..788e70cf 100644 --- a/src/IntaRNA/PredictorMfe2dSeedExtensionRIblast.h +++ b/src/IntaRNA/PredictorMfe2dSeedExtensionRIblast.h @@ -60,7 +60,7 @@ class PredictorMfe2dSeedExtensionRIblast: public PredictorMfe2d { /** * data cleanup */ - virtual ~PredictorMfe2dSeedExtensionRIblast(); + virtual ~PredictorMfe2dSeedExtensionRIblast() override; /** @@ -78,7 +78,7 @@ class PredictorMfe2dSeedExtensionRIblast: public PredictorMfe2d { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -141,7 +141,7 @@ class PredictorMfe2dSeedExtensionRIblast: public PredictorMfe2d { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; void printMatrix( const E2dMatrix & matrix ); diff --git a/src/IntaRNA/PredictorMfeEns.h b/src/IntaRNA/PredictorMfeEns.h index c51fd654..670b8b2d 100644 --- a/src/IntaRNA/PredictorMfeEns.h +++ b/src/IntaRNA/PredictorMfeEns.h @@ -36,7 +36,7 @@ class PredictorMfeEns : public PredictorMfe { , OutputHandler & output , PredictionTracker * predTracker ); - virtual ~PredictorMfeEns(); + virtual ~PredictorMfeEns() override; protected: @@ -127,7 +127,7 @@ class PredictorMfeEns : public PredictorMfe { */ virtual void - reportOptima(); + reportOptima() override; /** * Reports interaction boundaries only (no base pair tracking) @@ -135,7 +135,7 @@ class PredictorMfeEns : public PredictorMfe { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; private: diff --git a/src/IntaRNA/PredictorMfeEns2d.h b/src/IntaRNA/PredictorMfeEns2d.h index 2b77bb67..539d4576 100644 --- a/src/IntaRNA/PredictorMfeEns2d.h +++ b/src/IntaRNA/PredictorMfeEns2d.h @@ -45,7 +45,7 @@ class PredictorMfeEns2d: public PredictorMfeEns { , PredictionTracker * predTracker , BasePairProbabilities * pairProbabilities = nullptr ); - virtual ~PredictorMfeEns2d(); + virtual ~PredictorMfeEns2d() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -60,7 +60,7 @@ class PredictorMfeEns2d: public PredictorMfeEns { void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) - ); + ) override; protected: diff --git a/src/IntaRNA/PredictorMfeEns2dHeuristic.h b/src/IntaRNA/PredictorMfeEns2dHeuristic.h index 75e5b935..5c789a25 100644 --- a/src/IntaRNA/PredictorMfeEns2dHeuristic.h +++ b/src/IntaRNA/PredictorMfeEns2dHeuristic.h @@ -52,7 +52,7 @@ class PredictorMfeEns2dHeuristic: public PredictorMfeEns2d { , PredictionTracker * predTracker , BasePairProbabilities * pairProbabilities = nullptr ); - virtual ~PredictorMfeEns2dHeuristic(); + virtual ~PredictorMfeEns2dHeuristic() override; /** * Computes the mfe for the given sequence ranges (i1-j1) in the first @@ -66,7 +66,7 @@ class PredictorMfeEns2dHeuristic: public PredictorMfeEns2d { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: diff --git a/src/IntaRNA/PredictorMfeEns2dHeuristicSeedExtension.h b/src/IntaRNA/PredictorMfeEns2dHeuristicSeedExtension.h index 27b87452..7ab478eb 100644 --- a/src/IntaRNA/PredictorMfeEns2dHeuristicSeedExtension.h +++ b/src/IntaRNA/PredictorMfeEns2dHeuristicSeedExtension.h @@ -52,7 +52,7 @@ class PredictorMfeEns2dHeuristicSeedExtension: public PredictorMfeEns2dSeedExten /** * data cleanup */ - virtual ~PredictorMfeEns2dHeuristicSeedExtension(); + virtual ~PredictorMfeEns2dHeuristicSeedExtension() override; /** @@ -70,7 +70,7 @@ class PredictorMfeEns2dHeuristicSeedExtension: public PredictorMfeEns2dSeedExten virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -157,7 +157,7 @@ class PredictorMfeEns2dHeuristicSeedExtension: public PredictorMfeEns2dSeedExten */ virtual void - fillHybridZ_left( const size_t j1, const size_t j2 ); + fillHybridZ_left( const size_t j1, const size_t j2 ) override; }; diff --git a/src/IntaRNA/PredictorMfeEns2dSeedExtension.h b/src/IntaRNA/PredictorMfeEns2dSeedExtension.h index 5c509295..21255565 100644 --- a/src/IntaRNA/PredictorMfeEns2dSeedExtension.h +++ b/src/IntaRNA/PredictorMfeEns2dSeedExtension.h @@ -60,7 +60,7 @@ class PredictorMfeEns2dSeedExtension: public PredictorMfeEns { /** * data cleanup */ - virtual ~PredictorMfeEns2dSeedExtension(); + virtual ~PredictorMfeEns2dSeedExtension() override; /** @@ -78,7 +78,7 @@ class PredictorMfeEns2dSeedExtension: public PredictorMfeEns { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -177,7 +177,7 @@ class PredictorMfeEns2dSeedExtension: public PredictorMfeEns { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; /** * Returns the hybridization energy of the non overlapping part of seeds diff --git a/src/IntaRNA/PredictorMfeEnsSeedOnly.h b/src/IntaRNA/PredictorMfeEnsSeedOnly.h index 3507917c..a93cd85f 100644 --- a/src/IntaRNA/PredictorMfeEnsSeedOnly.h +++ b/src/IntaRNA/PredictorMfeEnsSeedOnly.h @@ -37,7 +37,7 @@ class PredictorMfeEnsSeedOnly: public PredictorMfeEns { /** * data cleanup */ - virtual ~PredictorMfeEnsSeedOnly(); + virtual ~PredictorMfeEnsSeedOnly() override; /** * Computes the mfe seed for the given sequence ranges (i1-j1) in the first @@ -51,7 +51,7 @@ class PredictorMfeEnsSeedOnly: public PredictorMfeEns { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -83,7 +83,7 @@ class PredictorMfeEnsSeedOnly: public PredictorMfeEns { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; }; diff --git a/src/IntaRNA/PredictorMfeSeedOnly.h b/src/IntaRNA/PredictorMfeSeedOnly.h index fee5fbee..00bcc940 100644 --- a/src/IntaRNA/PredictorMfeSeedOnly.h +++ b/src/IntaRNA/PredictorMfeSeedOnly.h @@ -37,7 +37,7 @@ class PredictorMfeSeedOnly: public PredictorMfe { /** * data cleanup */ - virtual ~PredictorMfeSeedOnly(); + virtual ~PredictorMfeSeedOnly() override; /** @@ -52,7 +52,7 @@ class PredictorMfeSeedOnly: public PredictorMfe { virtual void predict( const IndexRange & r1 = IndexRange(0,RnaSequence::lastPos) - , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ); + , const IndexRange & r2 = IndexRange(0,RnaSequence::lastPos) ) override; protected: @@ -84,7 +84,7 @@ class PredictorMfeSeedOnly: public PredictorMfe { */ virtual void - traceBack( Interaction & interaction ); + traceBack( Interaction & interaction ) override; }; diff --git a/src/IntaRNA/PredictorSeedExtensionKinetic.h b/src/IntaRNA/PredictorSeedExtensionKinetic.h index fd996428..390bffc1 100644 --- a/src/IntaRNA/PredictorSeedExtensionKinetic.h +++ b/src/IntaRNA/PredictorSeedExtensionKinetic.h @@ -51,7 +51,7 @@ class PredictorSeedExtensionKinetic : public PredictorMfe { SeedHandler * seedHandler, const char score = 'A'); /** Frees the owned seed handler and prediction tracker. */ - virtual ~PredictorSeedExtensionKinetic(); + virtual ~PredictorSeedExtensionKinetic() override; /** * Extends all feasible seeds within inclusive, zero-based sequence ranges. diff --git a/src/IntaRNA/ReverseAccessibility.h b/src/IntaRNA/ReverseAccessibility.h index 983e74d4..49ce5001 100644 --- a/src/IntaRNA/ReverseAccessibility.h +++ b/src/IntaRNA/ReverseAccessibility.h @@ -23,7 +23,7 @@ class ReverseAccessibility: public Accessibility { /** * destruction */ - virtual ~ReverseAccessibility(); + virtual ~ReverseAccessibility() override; /** * Access to the accessibility energy value (according to reversed indices). @@ -35,7 +35,7 @@ class ReverseAccessibility: public Accessibility { */ virtual E_type - getED( const size_t from, const size_t to ) const; + getED( const size_t from, const size_t to ) const override; /** @@ -44,7 +44,7 @@ class ReverseAccessibility: public Accessibility { */ virtual const RnaSequence & - getSequence() const; + getSequence() const override; /** @@ -56,7 +56,7 @@ class ReverseAccessibility: public Accessibility { */ virtual const AccessibilityConstraint& - getAccConstraint() const; + getAccConstraint() const override; /** * Access to the original not-reversed accessibility object. diff --git a/src/IntaRNA/SeedHandlerExplicit.h b/src/IntaRNA/SeedHandlerExplicit.h index a5af80c3..171fb7b4 100644 --- a/src/IntaRNA/SeedHandlerExplicit.h +++ b/src/IntaRNA/SeedHandlerExplicit.h @@ -37,7 +37,7 @@ class SeedHandlerExplicit : public SeedHandler /** * destruction */ - virtual ~SeedHandlerExplicit(); + virtual ~SeedHandlerExplicit() override; /** @@ -50,7 +50,7 @@ class SeedHandlerExplicit : public SeedHandler */ virtual size_t - fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Identifies the base pairs of the seed interaction starting at i1,i2 @@ -64,7 +64,7 @@ class SeedHandlerExplicit : public SeedHandler */ virtual void - traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const; + traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const override; /** @@ -75,7 +75,7 @@ class SeedHandlerExplicit : public SeedHandler */ virtual E_type - getSeedE( const size_t i1, const size_t i2 ) const; + getSeedE( const size_t i1, const size_t i2 ) const override; /** * Checks whether or not a given base pair is the left-most base pair of @@ -87,7 +87,7 @@ class SeedHandlerExplicit : public SeedHandler */ virtual bool - isSeedBound( const size_t i1, const size_t i2 ) const; + isSeedBound( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the seed with left-most base pair (i1,i2) @@ -97,7 +97,7 @@ class SeedHandlerExplicit : public SeedHandler */ virtual size_t - getSeedLength1( const size_t i1, const size_t i2 ) const; + getSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the seed with left-most base pair (i1,i2) @@ -107,7 +107,7 @@ class SeedHandlerExplicit : public SeedHandler */ virtual size_t - getSeedLength2( const size_t i1, const size_t i2 ) const; + getSeedLength2( const size_t i1, const size_t i2 ) const override; @@ -160,7 +160,7 @@ class SeedHandlerExplicit : public SeedHandler updateToNextSeed( size_t & i1, size_t & i2 , const size_t i1min = 0, const size_t i1max = RnaSequence::lastPos , const size_t i2min = 0, const size_t i2max = RnaSequence::lastPos - ) const; + ) const override; public: diff --git a/src/IntaRNA/SeedHandlerIdxOffset.h b/src/IntaRNA/SeedHandlerIdxOffset.h index 11b30f96..5b3b4445 100644 --- a/src/IntaRNA/SeedHandlerIdxOffset.h +++ b/src/IntaRNA/SeedHandlerIdxOffset.h @@ -43,7 +43,7 @@ class SeedHandlerIdxOffset : public SeedHandler /** * destruction of this object and the wrapped seed handler */ - virtual ~SeedHandlerIdxOffset(); + virtual ~SeedHandlerIdxOffset() override; /** * Access to the currently used index offset for sequence 1 @@ -79,7 +79,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual const SeedConstraint& - getConstraint() const; + getConstraint() const override; /** * Access to the underlying interaction energy function @@ -87,7 +87,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual const InteractionEnergy& - getInteractionEnergy() const; + getInteractionEnergy() const override; /** @@ -104,7 +104,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual size_t - fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Identifies the base pairs of the mfe seed interaction starting at i1,i2 @@ -120,7 +120,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual void - traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const; + traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const override; /** @@ -134,7 +134,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual E_type - getSeedE( const size_t i1, const size_t i2 ) const; + getSeedE( const size_t i1, const size_t i2 ) const override; /** * Checks whether or not a given base pair is the left-most base pair of @@ -146,7 +146,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual bool - isSeedBound( const size_t i1, const size_t i2 ) const; + isSeedBound( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe seed with left-most base pair (i1,i2) @@ -159,7 +159,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual size_t - getSeedLength1( const size_t i1, const size_t i2 ) const; + getSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe seed with left-most base pair (i1,i2) @@ -172,7 +172,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual size_t - getSeedLength2( const size_t i1, const size_t i2 ) const; + getSeedLength2( const size_t i1, const size_t i2 ) const override; /** @@ -212,7 +212,7 @@ class SeedHandlerIdxOffset : public SeedHandler updateToNextSeed( size_t & i1, size_t & i2 , const size_t i1min = 0, const size_t i1max = RnaSequence::lastPos , const size_t i2min = 0, const size_t i2max = RnaSequence::lastPos - ) const; + ) const override; /** * Adds all seeds to a given interaction that are completely covered by its @@ -223,7 +223,7 @@ class SeedHandlerIdxOffset : public SeedHandler */ virtual void - addSeeds( Interaction & i ) const; + addSeeds( Interaction & i ) const override; /** * Checks whether or not two seeds are loop overlapping, ie. given i1 < k1, the @@ -240,7 +240,7 @@ class SeedHandlerIdxOffset : public SeedHandler virtual bool areLoopOverlapping( const size_t i1, const size_t i2 - , const size_t k1, const size_t k2 ) const; + , const size_t k1, const size_t k2 ) const override; /** * Checks whether or not a given index pair is a valid seed base pair @@ -255,7 +255,7 @@ class SeedHandlerIdxOffset : public SeedHandler bool isFeasibleSeedBasePair( const size_t i1 , const size_t i2 - , const bool atEndOfSeed = false ) const; + , const bool atEndOfSeed = false ) const override; protected: diff --git a/src/IntaRNA/SeedHandlerMfe.h b/src/IntaRNA/SeedHandlerMfe.h index 94979fdf..00cee2c4 100644 --- a/src/IntaRNA/SeedHandlerMfe.h +++ b/src/IntaRNA/SeedHandlerMfe.h @@ -62,7 +62,7 @@ class SeedHandlerMfe : public SeedHandler /** * destruction */ - virtual ~SeedHandlerMfe(); + virtual ~SeedHandlerMfe() override; /** * Computes the seed matrix for the given interval boundaries @@ -74,7 +74,7 @@ class SeedHandlerMfe : public SeedHandler */ virtual size_t - fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Identifies the base pairs of the mfe seed interaction starting at i1,i2 @@ -88,7 +88,7 @@ class SeedHandlerMfe : public SeedHandler */ virtual void - traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const; + traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const override; /** @@ -99,7 +99,7 @@ class SeedHandlerMfe : public SeedHandler */ virtual E_type - getSeedE( const size_t i1, const size_t i2 ) const; + getSeedE( const size_t i1, const size_t i2 ) const override; /** * Checks whether or not a given base pair is the left-most base pair of @@ -111,7 +111,7 @@ class SeedHandlerMfe : public SeedHandler */ virtual bool - isSeedBound( const size_t i1, const size_t i2 ) const; + isSeedBound( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe seed with left-most base pair (i1,i2) @@ -121,7 +121,7 @@ class SeedHandlerMfe : public SeedHandler */ virtual size_t - getSeedLength1( const size_t i1, const size_t i2 ) const; + getSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe seed with left-most base pair (i1,i2) @@ -131,7 +131,7 @@ class SeedHandlerMfe : public SeedHandler */ virtual size_t - getSeedLength2( const size_t i1, const size_t i2 ) const; + getSeedLength2( const size_t i1, const size_t i2 ) const override; diff --git a/src/IntaRNA/SeedHandlerNoBulge.h b/src/IntaRNA/SeedHandlerNoBulge.h index 927643c9..8d504ffa 100644 --- a/src/IntaRNA/SeedHandlerNoBulge.h +++ b/src/IntaRNA/SeedHandlerNoBulge.h @@ -54,7 +54,7 @@ class SeedHandlerNoBulge : public SeedHandler /** * destruction */ - virtual ~SeedHandlerNoBulge(); + virtual ~SeedHandlerNoBulge() override; /** * Computes the seed information for the given interval boundaries @@ -66,7 +66,7 @@ class SeedHandlerNoBulge : public SeedHandler */ virtual size_t - fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2); + fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override; /** * Identifies the base pairs of the mfe seed interaction starting at i1,i2 @@ -80,7 +80,7 @@ class SeedHandlerNoBulge : public SeedHandler */ virtual void - traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const; + traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const override; /** @@ -91,7 +91,7 @@ class SeedHandlerNoBulge : public SeedHandler */ virtual E_type - getSeedE( const size_t i1, const size_t i2 ) const; + getSeedE( const size_t i1, const size_t i2 ) const override; /** * Checks whether or not a given base pair is the left-most base pair of @@ -103,7 +103,7 @@ class SeedHandlerNoBulge : public SeedHandler */ virtual bool - isSeedBound( const size_t i1, const size_t i2 ) const; + isSeedBound( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq1 of the mfe seed with left-most base pair (i1,i2) @@ -113,7 +113,7 @@ class SeedHandlerNoBulge : public SeedHandler */ virtual size_t - getSeedLength1( const size_t i1, const size_t i2 ) const; + getSeedLength1( const size_t i1, const size_t i2 ) const override; /** * Access to the length in seq2 of the mfe seed with left-most base pair (i1,i2) @@ -123,7 +123,7 @@ class SeedHandlerNoBulge : public SeedHandler */ virtual size_t - getSeedLength2( const size_t i1, const size_t i2 ) const; + getSeedLength2( const size_t i1, const size_t i2 ) const override; /** * Replace the input variables i1 and i2 to values to within the given range @@ -153,7 +153,7 @@ class SeedHandlerNoBulge : public SeedHandler updateToNextSeed( size_t & i1, size_t & i2 , const size_t i1min = 0, const size_t i1max = RnaSequence::lastPos , const size_t i2min = 0, const size_t i2max = RnaSequence::lastPos - ) const; + ) const override; protected: diff --git a/src/IntaRNA/SeededPartitionFunction.cpp b/src/IntaRNA/SeededPartitionFunction.cpp index dc4afff6..2c138d44 100644 --- a/src/IntaRNA/SeededPartitionFunction.cpp +++ b/src/IntaRNA/SeededPartitionFunction.cpp @@ -61,10 +61,12 @@ computeAnchored(const Kernel::Domain & d,const StackSeedDomain & seeds, for(size_t i=0;i hybrid(batchSize,cells),boundary; if(pairs) boundary.resize(batchSize,cells,false); @@ -343,10 +345,24 @@ computeAnchored(const Kernel::Domain & d,const StackSeedDomain & seeds, auto processBatch=[&]() { reset(hybrid,starts.size(),cells); if(pairs) reset(boundary,starts.size(),cells); candidates.clear(); initiation.clear(); - // Query only anchor starts inside the batch's span boxes, then restore - // deterministic seed order independently of hash-table iteration order. + // Query only anchor starts inside the batch's span boxes. Sparse seed + // domains are cheaper to scan directly than probing every possible pair + // in every source span; dense domains retain the bounded grid probe. for(const Pair p:starts) { initiation.push_back(A::check(w.initiation(p))); + } + if(anchors.size()anchor.i || p.second>anchor.j) continue; + const size_t i=anchor.i-p.first,j=anchor.j-p.second; + if(i>=maxN || j>=maxM || anchor.length>maxN-i || anchor.length>maxM-j) continue; + included[a]=1; candidates.push_back(a); break; + } + } + } else { + for(const Pair p:starts) for(size_t i=p.first;imaxN-(i-p.first) || anchor.length>maxM-(j-p.second)) continue; included[found->second]=1; candidates.push_back(found->second); } + std::sort(candidates.begin(),candidates.end()); } - std::sort(candidates.begin(),candidates.end()); for(const size_t a:candidates) { fill(a); contract(false); } for(size_t b=0;b(&(personalityParamValue)) , "IntaRNA personality to be used, which defines default values, available program arguments and tool behavior") ("parameterFile", value(&(configFileName)) - , "file from where to read additional command line arguments") + , "legacy key=value or JSON parameter file (auto-detected); JSON can embed text input files") ("help,h", "show the help page for basic parameters") ("fullhelp", "show the extended help page for all available parameters") ; @@ -1142,7 +1142,7 @@ parse(int argc, char** argv) LOG(ERROR) <<"Parsing of 'parameterFile' : could not open file '"<(paramfile, opts_cmdline_all), vm); + store( parameterFile.parse(paramfile, opts_cmdline_all), vm); } } catch (std::exception & ex) { LOG(ERROR) <<"error while parsing of 'parameterFile="< #include +#include "ParameterFile.h" + #include #include #include @@ -814,6 +816,9 @@ class CommandLineParsing { //! (optional) file name for input parameter configuration file std::string configFileName; + //! owns embedded parameter-file inputs until all predictions finish + ParameterFile parameterFile; + //! the vienna energy parameter handler initialized by #parse() mutable VrnaHandler vrnaHandler; diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index e85a84a6..1edf62a0 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -24,12 +24,17 @@ IntaRNA_CXXFLAGS = $(AM_CXXFLAGS) @INTARNA_SYSTEM_CPPFLAGS@ # generated intaRNA sources nodist_IntaRNA_SOURCES = \ ../config.h \ - IntaRNA/intarna_config.h + ../IntaRNA/intarna_config.h # intaRNA sources IntaRNA_SOURCES = IntaRNA.cpp \ CommandLineParsing.h \ - CommandLineParsing.cpp + CommandLineParsing.cpp \ + ParameterFile.h \ + ParameterFile.cpp \ + nlohmann/json.hpp + +EXTRA_DIST = nlohmann/LICENSE.MIT nlohmann/README.md IntaRNA_LDADD = $(top_builddir)/src/IntaRNA/libIntaRNA.a \ $(top_builddir)/src/libeasylogging.a diff --git a/src/bin/ParameterFile.cpp b/src/bin/ParameterFile.cpp new file mode 100644 index 00000000..f7f8443c --- /dev/null +++ b/src/bin/ParameterFile.cpp @@ -0,0 +1,162 @@ +#include "ParameterFile.h" +#include "nlohmann/json.hpp" + +#include +#include +#include +#include +#include +#include +#include + +namespace { +using Json = nlohmann::json; +using namespace boost::program_options; + +// Read once, remove a UTF-8 BOM, then detect JSON independently of the suffix. +std::string readText(std::istream& input) +{ + std::string text{std::istreambuf_iterator(input), {}}; + if (input.bad()) throw std::runtime_error("Could not read parameter file"); + if (text.starts_with("\xef\xbb\xbf")) text.erase(0, 3); + return text; +} + +bool isJson(const std::string& text) +{ + const auto first = text.find_first_not_of(" \t\r\n"); + return first != std::string::npos && (text[first] == '{' || text[first] == '['); +} + +Json readJson(const std::string& text) +{ + // Reject duplicate keys and excessive nesting rather than silently replacing + // settings or consuming an unbounded call stack on malformed input. + std::vector> keys; + auto callback = [&keys](int depth, Json::parse_event_t event, Json& value) { + if (depth > 32) throw std::runtime_error("JSON parameter nesting exceeds 32 levels"); + if (event == Json::parse_event_t::object_start) keys.emplace_back(); + if (event == Json::parse_event_t::key && !keys.back().insert(value.get()).second) + throw std::runtime_error("Duplicate JSON key: " + value.get()); + if (event == Json::parse_event_t::object_end) keys.pop_back(); + return true; + }; + Json document = Json::parse(text, callback); + if (!document.is_object()) throw std::runtime_error("JSON parameter file must be an object"); + for (const auto& [key, value] : document.items()) { + if (key != "parameters" && key != "schema" && key != "_comment" && key != "gui") + throw std::runtime_error("Unknown JSON document field: " + key); + } + if (document.value("schema", std::string()) != "IntaRNA-parameters-v1") + throw std::runtime_error("Expected schema IntaRNA-parameters-v1"); + if (!document.contains("parameters") || !document["parameters"].is_object()) + throw std::runtime_error("JSON parameters must be an object"); + return document["parameters"]; +} + +std::string scalar(const Json& value) +{ + if (value.is_string()) { + const auto text = value.get(); + if (text.find('\0') != std::string::npos) throw std::runtime_error("NUL in JSON parameter text"); + return text; + } + if (value.is_boolean() || value.is_number()) return value.dump(); + throw std::runtime_error("JSON parameter values must be strings, numbers, booleans or embedded text"); +} +} + +ParameterFile::~ParameterFile() +{ + // Cleanup must also succeed during exception unwinding and after failed input. + if (!directory.empty()) { + boost::system::error_code ignored; + boost::filesystem::remove_all(directory, ignored); + } +} + +std::string ParameterFile::writeText(const std::string& name, const std::string& text) +{ + // Never interpret embedded data or JSON keys as filesystem paths. + if (directory.empty()) { + const auto path = boost::filesystem::temp_directory_path() + / boost::filesystem::unique_path("intarna-json-%%%%-%%%%-%%%%-%%%%"); + if (!boost::filesystem::create_directory(path)) throw std::runtime_error("Could not create embedded-input directory"); + directory = path.string(); + boost::filesystem::permissions(path, boost::filesystem::owner_all); + } + const auto path = (boost::filesystem::path(directory) / name).string(); + std::ofstream file(path, std::ios::binary); + file.exceptions(std::ios::badbit | std::ios::failbit); + file.write(text.data(), text.size()); + file.close(); + return path; +} + +boost::program_options::parsed_options +ParameterFile::parse(std::istream& input, const boost::program_options::options_description& options) +{ + const auto text = readText(input); + if (!isJson(text)) { + std::istringstream legacy(text); + return boost::program_options::parse_config_file(legacy, options); + } + const auto parameters = readJson(text); + boost::program_options::parsed_options parsed(&options); + const std::set fileInputs = {"query", "target", "qAccFile", "tAccFile", "qShape", "tShape", "energyVRNA"}; + for (const auto& [key, value] : parameters.items()) { + // Reuse Program_options type conversion and validation without converting + // through config-file syntax (which would reinterpret # or newlines). + const auto* definition = options.find_nothrow(key, false); + if (!definition || definition->long_name() != key || key == "parameterFile") + throw std::runtime_error("Unknown or recursive JSON parameter: " + key); + auto append = [&](const Json& item) { + boost::program_options::option option; + option.string_key = key; + if (definition->semantic()->max_tokens() == 0) { + if (!item.is_boolean()) throw std::runtime_error(key + " requires a JSON boolean"); + if (!item.get()) return; + } else if (item.is_object()) { + if (!fileInputs.contains(key)) throw std::runtime_error(key + " does not accept embedded files"); + if (item.size() == 1 && item.contains("text") && item["text"].is_string()) { + option.value.push_back(writeText(key + ".txt", scalar(item["text"]))); + } else if ((key == "qAccFile" || key == "tAccFile") && item.size() == 1 && item.contains("texts") && item["texts"].is_array() && !item["texts"].empty()) { + // Multi-sequence accessibility follows the existing -sN naming + // convention; indices refer to original FASTA record numbers. + const auto& texts = item["texts"]; + for (size_t i = 0; i < texts.size(); ++i) { + if (!texts[i].is_string()) throw std::runtime_error(key + ": texts must contain strings"); + writeText(key + "-s" + std::to_string(i + 1) + ".txt", scalar(texts[i])); + } + option.value.push_back((boost::filesystem::path(directory) / (key + ".txt")).string()); + } else throw std::runtime_error(key + ": expected {\"text\":\"...\"} (or accessibility {\"texts\":[...]})"); + } else option.value.push_back(scalar(item)); + parsed.options.push_back(std::move(option)); + }; + if (value.is_array()) { + if (!definition->semantic()->is_composing() || value.empty()) throw std::runtime_error(key + " does not accept an empty or repeated-value array"); + for (const auto& item : value) append(item); + } else append(value); + } + return parsed; +} + +std::string ParameterFile::personality(const std::string& filename) +{ + std::ifstream input(filename, std::ios::binary); + if (!input) throw std::runtime_error("Could not open parameter file: " + filename); + const auto text = readText(input); + if (isJson(text)) { + const auto parameters = readJson(text); + if (!parameters.contains("personality")) return {}; + if (!parameters["personality"].is_string()) throw std::runtime_error("personality must be a string"); + return scalar(parameters["personality"]); + } + // Legacy parameter files receive the same personality/default precedence. + boost::program_options::options_description options; + options.add_options()("personality", boost::program_options::value()); + std::istringstream legacy(text); + boost::program_options::variables_map values; + store(boost::program_options::parse_config_file(legacy, options, true), values); + return values.count("personality") ? values["personality"].as() : ""; +} diff --git a/src/bin/ParameterFile.h b/src/bin/ParameterFile.h new file mode 100644 index 00000000..97bf13f5 --- /dev/null +++ b/src/bin/ParameterFile.h @@ -0,0 +1,45 @@ +#ifndef INTARNA_PARAMETERFILE_H_ +#define INTARNA_PARAMETERFILE_H_ + +#include +#include +#include + +/** Reads legacy or JSON CLI parameters and owns any embedded input files. */ +class ParameterFile { +public: + ParameterFile(); + ~ParameterFile(); + ParameterFile(const ParameterFile&) = delete; + ParameterFile& operator=(const ParameterFile&) = delete; + + /** + * Parse parameters through the existing option definitions. Embedded text + * lives in private temporary files until this object is destroyed. + * @param input parameter file stream (format detected from its contents) + * @param options supported CLI options, including their validators + * @return parsed options for boost::program_options::store + * @throws std::exception on malformed parameters or failed file operations + */ + boost::program_options::parsed_options + parse(std::istream& input, const boost::program_options::options_description& options); + + /** + * Read a file's personality before constructing personality-specific defaults. + * @param filename legacy or JSON parameter file + * @return personality name, or empty if not specified + */ + static std::string personality(const std::string& filename); + +private: + //! private directory containing generated filenames only; never user paths + std::string directory; + + /** Materialize text with a generated basename; return its absolute path. */ + std::string writeText(const std::string& name, const std::string& text); +}; + +inline +ParameterFile::ParameterFile() = default; + +#endif diff --git a/src/bin/nlohmann/LICENSE.MIT b/src/bin/nlohmann/LICENSE.MIT new file mode 100644 index 00000000..a1dacc8d --- /dev/null +++ b/src/bin/nlohmann/LICENSE.MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-2025 Niels Lohmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/bin/nlohmann/README.md b/src/bin/nlohmann/README.md new file mode 100644 index 00000000..b4d4fac5 --- /dev/null +++ b/src/bin/nlohmann/README.md @@ -0,0 +1,12 @@ +# nlohmann/json 3.12.0 + +Unmodified single header and MIT license from +https://github.com/nlohmann/json/tree/v3.12.0. + +- `single_include/nlohmann/json.hpp`: SHA-256 `aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63` +- `LICENSE.MIT`: SHA-256 `46a65cffd1ea955132d95a8dd921640714a8d6b537d2e4e482d31145ae95b603` + +Only `ParameterFile.cpp` includes the header. No JSON types enter public library +headers. See [the format and dependency decision](../../../doc/json-parameters.md). +Update the header and license together from a tagged upstream release, record +checksums here, and run the native JSON, WASM and GUI round-trip tests. diff --git a/src/bin/nlohmann/json.hpp b/src/bin/nlohmann/json.hpp new file mode 100644 index 00000000..82d69f7c --- /dev/null +++ b/src/bin/nlohmann/json.hpp @@ -0,0 +1,25526 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_DIAGNOSTIC_POSITIONS + #define JSON_DIAGNOSTIC_POSITIONS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#ifdef JSON_HAS_CPP_17 + #include // optional +#endif +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, 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) +#define NLOHMANN_JSON_PASTE28(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, 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) +#define NLOHMANN_JSON_PASTE29(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, 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) +#define NLOHMANN_JSON_PASTE30(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, 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) +#define NLOHMANN_JSON_PASTE31(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, 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) +#define NLOHMANN_JSON_PASTE32(func, 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) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, 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) +#define NLOHMANN_JSON_PASTE33(func, 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, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, 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, v32) +#define NLOHMANN_JSON_PASTE34(func, 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, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, 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, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, 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, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, 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, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, 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, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, 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, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, 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, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, 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, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, 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, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, 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, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, 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, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, 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, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, 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, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, 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, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, 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, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows calling any std function as if (e.g., with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // char_traits +#include // tuple +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& +is_complete_type < +detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template