From 3a5fc32ec853f640228e054d1f616e924501e76e Mon Sep 17 00:00:00 2001 From: iriley Date: Mon, 29 Apr 2024 14:57:36 +0200 Subject: [PATCH] feat: add gitlab ci, makefile, sphinx docs --- .gitlab-ci.yml | 94 +- .gitlab-ci.yml.bak | 30 + .pre-commit-config.yaml | 1 + Makefile | 91 ++ docs/build/html/.buildinfo | 4 + docs/build/html/.doctrees/README.doctree | Bin 0 -> 33698 bytes docs/build/html/.doctrees/environment.pickle | Bin 0 -> 546025 bytes docs/build/html/.doctrees/index.doctree | Bin 0 -> 6273 bytes .../modules/cv_analysis.config.doctree | Bin 0 -> 4155 bytes .../.doctrees/modules/cv_analysis.doctree | Bin 0 -> 4123 bytes .../cv_analysis.figure_detection.doctree | Bin 0 -> 3706 bytes ....figure_detection.figure_detection.doctree | Bin 0 -> 7556 bytes ..._analysis.figure_detection.figures.doctree | Bin 0 -> 6965 bytes .../cv_analysis.figure_detection.text.doctree | Bin 0 -> 11393 bytes .../cv_analysis.layout_parsing.doctree | Bin 0 -> 2572 bytes .../modules/cv_analysis.locations.doctree | Bin 0 -> 3207 bytes .../cv_analysis.redaction_detection.doctree | Bin 0 -> 2597 bytes .../modules/cv_analysis.server.doctree | Bin 0 -> 3483 bytes .../cv_analysis.server.pipeline.doctree | Bin 0 -> 2575 bytes .../cv_analysis.table_inference.doctree | Bin 0 -> 62043 bytes .../modules/cv_analysis.table_parsing.doctree | Bin 0 -> 2567 bytes .../cv_analysis.utils.annotate.doctree | Bin 0 -> 15901 bytes .../modules/cv_analysis.utils.banner.doctree | Bin 0 -> 4237 bytes .../cv_analysis.utils.connect_rects.doctree | Bin 0 -> 18126 bytes .../modules/cv_analysis.utils.display.doctree | Bin 0 -> 9281 bytes .../modules/cv_analysis.utils.doctree | Bin 0 -> 4048 bytes .../modules/cv_analysis.utils.draw.doctree | Bin 0 -> 7895 bytes .../modules/cv_analysis.utils.filters.doctree | Bin 0 -> 11079 bytes ...cv_analysis.utils.image_extraction.doctree | Bin 0 -> 62978 bytes .../cv_analysis.utils.open_pdf.doctree | Bin 0 -> 5388 bytes .../cv_analysis.utils.postprocessing.doctree | Bin 0 -> 19123 bytes .../cv_analysis.utils.preprocessing.doctree | Bin 0 -> 5894 bytes .../cv_analysis.utils.structures.doctree | Bin 0 -> 33132 bytes .../cv_analysis.utils.test_metrics.doctree | Bin 0 -> 11848 bytes .../modules/cv_analysis.utils.utils.doctree | Bin 0 -> 5740 bytes .../cv_analysis.utils.visual_logging.doctree | Bin 0 -> 2602 bytes .../html/.doctrees/modules/serve.doctree | Bin 0 -> 2805 bytes docs/build/html/README.html | 683 +++++++++++++ docs/build/html/_sources/README.md.txt | 203 ++++ docs/build/html/_sources/index.rst.txt | 37 + .../modules/cv_analysis.config.rst.txt | 7 + ....figure_detection.figure_detection.rst.txt | 7 + ..._analysis.figure_detection.figures.rst.txt | 7 + .../cv_analysis.figure_detection.rst.txt | 17 + .../cv_analysis.figure_detection.text.rst.txt | 7 + .../cv_analysis.layout_parsing.rst.txt | 7 + .../modules/cv_analysis.locations.rst.txt | 7 + .../cv_analysis.redaction_detection.rst.txt | 7 + .../html/_sources/modules/cv_analysis.rst.txt | 30 + .../cv_analysis.server.pipeline.rst.txt | 7 + .../modules/cv_analysis.server.rst.txt | 15 + .../cv_analysis.table_inference.rst.txt | 7 + .../modules/cv_analysis.table_parsing.rst.txt | 7 + .../cv_analysis.utils.annotate.rst.txt | 7 + .../modules/cv_analysis.utils.banner.rst.txt | 7 + .../cv_analysis.utils.connect_rects.rst.txt | 7 + .../modules/cv_analysis.utils.display.rst.txt | 7 + .../modules/cv_analysis.utils.draw.rst.txt | 7 + .../modules/cv_analysis.utils.filters.rst.txt | 7 + ...cv_analysis.utils.image_extraction.rst.txt | 7 + .../cv_analysis.utils.open_pdf.rst.txt | 7 + .../cv_analysis.utils.postprocessing.rst.txt | 7 + .../cv_analysis.utils.preprocessing.rst.txt | 7 + .../modules/cv_analysis.utils.rst.txt | 28 + .../cv_analysis.utils.structures.rst.txt | 7 + .../cv_analysis.utils.test_metrics.rst.txt | 7 + .../modules/cv_analysis.utils.utils.rst.txt | 7 + .../cv_analysis.utils.visual_logging.rst.txt | 7 + .../build/html/_sources/modules/serve.rst.txt | 7 + docs/build/html/_static/basic.css | 925 +++++++++++++++++ docs/build/html/_static/doctools.js | 156 +++ .../html/_static/documentation_options.js | 13 + docs/build/html/_static/file.png | Bin 0 -> 286 bytes docs/build/html/_static/language_data.js | 199 ++++ docs/build/html/_static/logo.png | Bin 0 -> 30874 bytes docs/build/html/_static/minus.png | Bin 0 -> 90 bytes docs/build/html/_static/plus.png | Bin 0 -> 90 bytes docs/build/html/_static/pygments.css | 152 +++ docs/build/html/_static/scripts/bootstrap.js | 3 + .../_static/scripts/bootstrap.js.LICENSE.txt | 5 + .../html/_static/scripts/bootstrap.js.map | 1 + .../_static/scripts/pydata-sphinx-theme.js | 2 + .../scripts/pydata-sphinx-theme.js.map | 1 + docs/build/html/_static/searchtools.js | 619 +++++++++++ docs/build/html/_static/sphinx_highlight.js | 154 +++ docs/build/html/_static/styles/bootstrap.css | 6 + .../html/_static/styles/bootstrap.css.map | 1 + .../_static/styles/pydata-sphinx-theme.css | 2 + .../styles/pydata-sphinx-theme.css.map | 1 + docs/build/html/_static/styles/theme.css | 2 + .../vendor/fontawesome/6.5.1/LICENSE.txt | 165 +++ .../vendor/fontawesome/6.5.1/css/all.min.css | 5 + .../vendor/fontawesome/6.5.1/js/all.min.js | 2 + .../6.5.1/js/all.min.js.LICENSE.txt | 5 + .../6.5.1/webfonts/fa-brands-400.ttf | Bin 0 -> 207972 bytes .../6.5.1/webfonts/fa-brands-400.woff2 | Bin 0 -> 117372 bytes .../6.5.1/webfonts/fa-regular-400.ttf | Bin 0 -> 68004 bytes .../6.5.1/webfonts/fa-regular-400.woff2 | Bin 0 -> 25452 bytes .../6.5.1/webfonts/fa-solid-900.ttf | Bin 0 -> 419720 bytes .../6.5.1/webfonts/fa-solid-900.woff2 | Bin 0 -> 156496 bytes .../6.5.1/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10832 bytes .../6.5.1/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4792 bytes docs/build/html/_static/webpack-macros.html | 31 + docs/build/html/genindex.html | 958 ++++++++++++++++++ docs/build/html/index.html | 502 +++++++++ .../html/modules/cv_analysis.config.html | 527 ++++++++++ ...sis.figure_detection.figure_detection.html | 536 ++++++++++ .../cv_analysis.figure_detection.figures.html | 539 ++++++++++ .../modules/cv_analysis.figure_detection.html | 545 ++++++++++ .../cv_analysis.figure_detection.text.html | 560 ++++++++++ docs/build/html/modules/cv_analysis.html | 679 +++++++++++++ .../modules/cv_analysis.layout_parsing.html | 510 ++++++++++ .../html/modules/cv_analysis.locations.html | 511 ++++++++++ .../cv_analysis.redaction_detection.html | 510 ++++++++++ .../html/modules/cv_analysis.server.html | 530 ++++++++++ .../modules/cv_analysis.server.pipeline.html | 513 ++++++++++ .../modules/cv_analysis.table_inference.html | 660 ++++++++++++ .../modules/cv_analysis.table_parsing.html | 510 ++++++++++ .../modules/cv_analysis.utils.annotate.html | 553 ++++++++++ .../modules/cv_analysis.utils.banner.html | 530 ++++++++++ .../cv_analysis.utils.connect_rects.html | 584 +++++++++++ .../modules/cv_analysis.utils.display.html | 548 ++++++++++ .../html/modules/cv_analysis.utils.draw.html | 536 ++++++++++ .../modules/cv_analysis.utils.filters.html | 557 ++++++++++ .../build/html/modules/cv_analysis.utils.html | 642 ++++++++++++ .../cv_analysis.utils.image_extraction.html | 631 ++++++++++++ .../modules/cv_analysis.utils.open_pdf.html | 530 ++++++++++ .../cv_analysis.utils.postprocessing.html | 563 ++++++++++ .../cv_analysis.utils.preprocessing.html | 536 ++++++++++ .../modules/cv_analysis.utils.structures.html | 631 ++++++++++++ .../cv_analysis.utils.test_metrics.html | 542 ++++++++++ .../html/modules/cv_analysis.utils.utils.html | 536 ++++++++++ .../cv_analysis.utils.visual_logging.html | 513 ++++++++++ docs/build/html/modules/serve.html | 460 +++++++++ docs/build/html/objects.inv | Bin 0 -> 1868 bytes docs/build/html/py-modindex.html | 537 ++++++++++ docs/build/html/search.html | 427 ++++++++ docs/build/html/searchindex.js | 1 + docs/build/json/README.fjson | 8 + docs/build/json/genindex.fjson | 8 + docs/build/json/index.fjson | 8 + .../json/modules/cv_analysis.config.fjson | 8 + ...is.figure_detection.figure_detection.fjson | 8 + ...cv_analysis.figure_detection.figures.fjson | 8 + .../cv_analysis.figure_detection.fjson | 8 + .../cv_analysis.figure_detection.text.fjson | 8 + docs/build/json/modules/cv_analysis.fjson | 8 + .../modules/cv_analysis.layout_parsing.fjson | 8 + .../json/modules/cv_analysis.locations.fjson | 8 + .../cv_analysis.redaction_detection.fjson | 8 + .../json/modules/cv_analysis.server.fjson | 8 + .../modules/cv_analysis.server.pipeline.fjson | 8 + .../modules/cv_analysis.table_inference.fjson | 8 + .../modules/cv_analysis.table_parsing.fjson | 8 + .../modules/cv_analysis.utils.annotate.fjson | 8 + .../modules/cv_analysis.utils.banner.fjson | 8 + .../cv_analysis.utils.connect_rects.fjson | 8 + .../modules/cv_analysis.utils.display.fjson | 8 + .../json/modules/cv_analysis.utils.draw.fjson | 8 + .../modules/cv_analysis.utils.filters.fjson | 8 + .../json/modules/cv_analysis.utils.fjson | 8 + .../cv_analysis.utils.image_extraction.fjson | 8 + .../modules/cv_analysis.utils.open_pdf.fjson | 8 + .../cv_analysis.utils.postprocessing.fjson | 8 + .../cv_analysis.utils.preprocessing.fjson | 8 + .../cv_analysis.utils.structures.fjson | 8 + .../cv_analysis.utils.test_metrics.fjson | 8 + .../modules/cv_analysis.utils.utils.fjson | 8 + .../cv_analysis.utils.visual_logging.fjson | 8 + docs/build/json/modules/serve.fjson | 8 + docs/build/json/py-modindex.fjson | 8 + docs/build/json/search.fjson | 8 + docs/source/README.md | 203 ++++ docs/source/_static/logo.png | Bin 0 -> 30874 bytes docs/source/conf.py | 106 ++ docs/source/index.rst | 37 + docs/source/modules/cv_analysis.config.rst | 7 + ...ysis.figure_detection.figure_detection.rst | 7 + .../cv_analysis.figure_detection.figures.rst | 7 + .../modules/cv_analysis.figure_detection.rst | 17 + .../cv_analysis.figure_detection.text.rst | 7 + .../modules/cv_analysis.layout_parsing.rst | 7 + docs/source/modules/cv_analysis.locations.rst | 7 + .../cv_analysis.redaction_detection.rst | 7 + docs/source/modules/cv_analysis.rst | 30 + .../modules/cv_analysis.server.pipeline.rst | 7 + docs/source/modules/cv_analysis.server.rst | 15 + .../modules/cv_analysis.table_inference.rst | 7 + .../modules/cv_analysis.table_parsing.rst | 7 + .../modules/cv_analysis.utils.annotate.rst | 7 + .../modules/cv_analysis.utils.banner.rst | 7 + .../cv_analysis.utils.connect_rects.rst | 7 + .../modules/cv_analysis.utils.display.rst | 7 + .../source/modules/cv_analysis.utils.draw.rst | 7 + .../modules/cv_analysis.utils.filters.rst | 7 + .../cv_analysis.utils.image_extraction.rst | 7 + .../modules/cv_analysis.utils.open_pdf.rst | 7 + .../cv_analysis.utils.postprocessing.rst | 7 + .../cv_analysis.utils.preprocessing.rst | 7 + docs/source/modules/cv_analysis.utils.rst | 28 + .../modules/cv_analysis.utils.structures.rst | 7 + .../cv_analysis.utils.test_metrics.rst | 7 + .../modules/cv_analysis.utils.utils.rst | 7 + .../cv_analysis.utils.visual_logging.rst | 7 + docs/source/modules/serve.rst | 7 + poetry.lock | 476 ++++++++- pyproject.toml | 15 +- src/cv_analysis/redaction_detection.py | 18 +- src/cv_analysis/server/pipeline.py | 8 +- src/cv_analysis/table_inference.py | 6 +- src/cv_analysis/table_parsing.py | 2 +- src/cv_analysis/utils/annotate.py | 4 +- src/cv_analysis/utils/image_extraction.py | 17 +- src/cv_analysis/utils/structures.py | 2 +- src/cv_analysis/utils/visual_logging.py | 2 +- 215 files changed, 23686 insertions(+), 52 deletions(-) create mode 100644 .gitlab-ci.yml.bak create mode 100644 Makefile create mode 100644 docs/build/html/.buildinfo create mode 100644 docs/build/html/.doctrees/README.doctree create mode 100644 docs/build/html/.doctrees/environment.pickle create mode 100644 docs/build/html/.doctrees/index.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.config.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.figure_detection.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.figure_detection.figure_detection.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.figure_detection.figures.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.figure_detection.text.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.layout_parsing.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.locations.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.redaction_detection.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.server.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.server.pipeline.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.table_inference.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.table_parsing.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.annotate.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.banner.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.connect_rects.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.display.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.draw.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.filters.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.image_extraction.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.open_pdf.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.postprocessing.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.preprocessing.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.structures.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.test_metrics.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.utils.doctree create mode 100644 docs/build/html/.doctrees/modules/cv_analysis.utils.visual_logging.doctree create mode 100644 docs/build/html/.doctrees/modules/serve.doctree create mode 100644 docs/build/html/README.html create mode 100644 docs/build/html/_sources/README.md.txt create mode 100644 docs/build/html/_sources/index.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.config.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.figure_detection.figure_detection.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.figure_detection.figures.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.figure_detection.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.figure_detection.text.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.layout_parsing.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.locations.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.redaction_detection.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.server.pipeline.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.server.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.table_inference.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.table_parsing.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.annotate.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.banner.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.connect_rects.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.display.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.draw.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.filters.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.image_extraction.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.open_pdf.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.postprocessing.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.preprocessing.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.structures.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.test_metrics.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.utils.rst.txt create mode 100644 docs/build/html/_sources/modules/cv_analysis.utils.visual_logging.rst.txt create mode 100644 docs/build/html/_sources/modules/serve.rst.txt create mode 100644 docs/build/html/_static/basic.css create mode 100644 docs/build/html/_static/doctools.js create mode 100644 docs/build/html/_static/documentation_options.js create mode 100644 docs/build/html/_static/file.png create mode 100644 docs/build/html/_static/language_data.js create mode 100644 docs/build/html/_static/logo.png create mode 100644 docs/build/html/_static/minus.png create mode 100644 docs/build/html/_static/plus.png create mode 100644 docs/build/html/_static/pygments.css create mode 100644 docs/build/html/_static/scripts/bootstrap.js create mode 100644 docs/build/html/_static/scripts/bootstrap.js.LICENSE.txt create mode 100644 docs/build/html/_static/scripts/bootstrap.js.map create mode 100644 docs/build/html/_static/scripts/pydata-sphinx-theme.js create mode 100644 docs/build/html/_static/scripts/pydata-sphinx-theme.js.map create mode 100644 docs/build/html/_static/searchtools.js create mode 100644 docs/build/html/_static/sphinx_highlight.js create mode 100644 docs/build/html/_static/styles/bootstrap.css create mode 100644 docs/build/html/_static/styles/bootstrap.css.map create mode 100644 docs/build/html/_static/styles/pydata-sphinx-theme.css create mode 100644 docs/build/html/_static/styles/pydata-sphinx-theme.css.map create mode 100644 docs/build/html/_static/styles/theme.css create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/LICENSE.txt create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/css/all.min.css create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/js/all.min.js create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/js/all.min.js.LICENSE.txt create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.ttf create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.woff2 create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.ttf create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.woff2 create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.ttf create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.woff2 create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-v4compatibility.ttf create mode 100644 docs/build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-v4compatibility.woff2 create mode 100644 docs/build/html/_static/webpack-macros.html create mode 100644 docs/build/html/genindex.html create mode 100644 docs/build/html/index.html create mode 100644 docs/build/html/modules/cv_analysis.config.html create mode 100644 docs/build/html/modules/cv_analysis.figure_detection.figure_detection.html create mode 100644 docs/build/html/modules/cv_analysis.figure_detection.figures.html create mode 100644 docs/build/html/modules/cv_analysis.figure_detection.html create mode 100644 docs/build/html/modules/cv_analysis.figure_detection.text.html create mode 100644 docs/build/html/modules/cv_analysis.html create mode 100644 docs/build/html/modules/cv_analysis.layout_parsing.html create mode 100644 docs/build/html/modules/cv_analysis.locations.html create mode 100644 docs/build/html/modules/cv_analysis.redaction_detection.html create mode 100644 docs/build/html/modules/cv_analysis.server.html create mode 100644 docs/build/html/modules/cv_analysis.server.pipeline.html create mode 100644 docs/build/html/modules/cv_analysis.table_inference.html create mode 100644 docs/build/html/modules/cv_analysis.table_parsing.html create mode 100644 docs/build/html/modules/cv_analysis.utils.annotate.html create mode 100644 docs/build/html/modules/cv_analysis.utils.banner.html create mode 100644 docs/build/html/modules/cv_analysis.utils.connect_rects.html create mode 100644 docs/build/html/modules/cv_analysis.utils.display.html create mode 100644 docs/build/html/modules/cv_analysis.utils.draw.html create mode 100644 docs/build/html/modules/cv_analysis.utils.filters.html create mode 100644 docs/build/html/modules/cv_analysis.utils.html create mode 100644 docs/build/html/modules/cv_analysis.utils.image_extraction.html create mode 100644 docs/build/html/modules/cv_analysis.utils.open_pdf.html create mode 100644 docs/build/html/modules/cv_analysis.utils.postprocessing.html create mode 100644 docs/build/html/modules/cv_analysis.utils.preprocessing.html create mode 100644 docs/build/html/modules/cv_analysis.utils.structures.html create mode 100644 docs/build/html/modules/cv_analysis.utils.test_metrics.html create mode 100644 docs/build/html/modules/cv_analysis.utils.utils.html create mode 100644 docs/build/html/modules/cv_analysis.utils.visual_logging.html create mode 100644 docs/build/html/modules/serve.html create mode 100644 docs/build/html/objects.inv create mode 100644 docs/build/html/py-modindex.html create mode 100644 docs/build/html/search.html create mode 100644 docs/build/html/searchindex.js create mode 100644 docs/build/json/README.fjson create mode 100644 docs/build/json/genindex.fjson create mode 100644 docs/build/json/index.fjson create mode 100644 docs/build/json/modules/cv_analysis.config.fjson create mode 100644 docs/build/json/modules/cv_analysis.figure_detection.figure_detection.fjson create mode 100644 docs/build/json/modules/cv_analysis.figure_detection.figures.fjson create mode 100644 docs/build/json/modules/cv_analysis.figure_detection.fjson create mode 100644 docs/build/json/modules/cv_analysis.figure_detection.text.fjson create mode 100644 docs/build/json/modules/cv_analysis.fjson create mode 100644 docs/build/json/modules/cv_analysis.layout_parsing.fjson create mode 100644 docs/build/json/modules/cv_analysis.locations.fjson create mode 100644 docs/build/json/modules/cv_analysis.redaction_detection.fjson create mode 100644 docs/build/json/modules/cv_analysis.server.fjson create mode 100644 docs/build/json/modules/cv_analysis.server.pipeline.fjson create mode 100644 docs/build/json/modules/cv_analysis.table_inference.fjson create mode 100644 docs/build/json/modules/cv_analysis.table_parsing.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.annotate.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.banner.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.connect_rects.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.display.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.draw.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.filters.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.image_extraction.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.open_pdf.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.postprocessing.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.preprocessing.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.structures.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.test_metrics.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.utils.fjson create mode 100644 docs/build/json/modules/cv_analysis.utils.visual_logging.fjson create mode 100644 docs/build/json/modules/serve.fjson create mode 100644 docs/build/json/py-modindex.fjson create mode 100644 docs/build/json/search.fjson create mode 100644 docs/source/README.md create mode 100644 docs/source/_static/logo.png create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst create mode 100644 docs/source/modules/cv_analysis.config.rst create mode 100644 docs/source/modules/cv_analysis.figure_detection.figure_detection.rst create mode 100644 docs/source/modules/cv_analysis.figure_detection.figures.rst create mode 100644 docs/source/modules/cv_analysis.figure_detection.rst create mode 100644 docs/source/modules/cv_analysis.figure_detection.text.rst create mode 100644 docs/source/modules/cv_analysis.layout_parsing.rst create mode 100644 docs/source/modules/cv_analysis.locations.rst create mode 100644 docs/source/modules/cv_analysis.redaction_detection.rst create mode 100644 docs/source/modules/cv_analysis.rst create mode 100644 docs/source/modules/cv_analysis.server.pipeline.rst create mode 100644 docs/source/modules/cv_analysis.server.rst create mode 100644 docs/source/modules/cv_analysis.table_inference.rst create mode 100644 docs/source/modules/cv_analysis.table_parsing.rst create mode 100644 docs/source/modules/cv_analysis.utils.annotate.rst create mode 100644 docs/source/modules/cv_analysis.utils.banner.rst create mode 100644 docs/source/modules/cv_analysis.utils.connect_rects.rst create mode 100644 docs/source/modules/cv_analysis.utils.display.rst create mode 100644 docs/source/modules/cv_analysis.utils.draw.rst create mode 100644 docs/source/modules/cv_analysis.utils.filters.rst create mode 100644 docs/source/modules/cv_analysis.utils.image_extraction.rst create mode 100644 docs/source/modules/cv_analysis.utils.open_pdf.rst create mode 100644 docs/source/modules/cv_analysis.utils.postprocessing.rst create mode 100644 docs/source/modules/cv_analysis.utils.preprocessing.rst create mode 100644 docs/source/modules/cv_analysis.utils.rst create mode 100644 docs/source/modules/cv_analysis.utils.structures.rst create mode 100644 docs/source/modules/cv_analysis.utils.test_metrics.rst create mode 100644 docs/source/modules/cv_analysis.utils.utils.rst create mode 100644 docs/source/modules/cv_analysis.utils.visual_logging.rst create mode 100644 docs/source/modules/serve.rst diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6f19b94..d2c7989 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,30 +1,80 @@ include: - project: "Gitlab/gitlab" - ref: 0.3.0 - file: "/ci-templates/research/dvc-versioning-build-release.gitlab-ci.yml" + ref: main + file: "/ci-templates/research/versioning-build+azure_model-test-release.gitlab-ci.yml" variables: - NEXUS_PROJECT_DIR: red + NEXUS_PROJECT_DIR: ff IMAGENAME: "${CI_PROJECT_NAME}" -################################# -# temp. disable integration tests, b/c they don't cover the CV analysis case yet -trigger integration tests: - rules: - - when: never -release build: - stage: release +###### +# DOCS +pages: + stage: unit-tests + before_script: + - !reference [.activate-venv, script] + script: + - sphinx-apidoc ./src -o ./docs/source/modules --no-toc --module-first --follow-links --separate --force + - sphinx-build -b html docs/source/ public/ -E -a + artifacts: + paths: + - public + # only: + # - main + + +######## +# BUILDS +###### UPDATE/EDIT ###### +# MAKE SURE TO SWITCH OUT ALL YOUR MODEL NAMES + VERSIONS +# name the job after the model it's using in the build, keep the prefix referencing `docker-build::` + +docker-build::keyword-extraction-multi: + extends: .docker-build + variables: + MODEL_NAME: ${MODEL_MULTI_NAME} + MODEL_VERSION: ${MODEL_MULTI_VERSION} + +docker-build::cv-analysis-service: + extends: .docker-build needs: - - job: set custom version - artifacts: true - optional: true - - job: calculate patch version - artifacts: true - optional: true - - job: calculate minor version - artifacts: true - optional: true - - job: build docker nexus - artifacts: true -################################# + - !reference [.needs-versioning, needs] + - job: docker-build::cv-analysis-service + variables: + MODEL_NAME: ${MODEL_EN_NAME} + MODEL_VERSION: ${MODEL_EN_VERSION} + +docker-build::keyword-extraction-de: + extends: .docker-build + needs: + - !reference [.needs-versioning, needs] + - job: docker-build::cv-analysis-service + variables: + MODEL_NAME: ${MODEL_DE_NAME} + MODEL_VERSION: ${MODEL_DE_VERSION} + + +################### +# INTEGRATION TESTS +trigger-integration-tests: + extends: .integration-tests + needs: + ###### UPDATE/EDIT ###### + # YOU NEED ONLY TO DEFINE ONE + # reason is that we want to have one built image to use with the integration tests + # this should be the same image you uploaded test data for + - job: docker-build::cv-analysis-service + artifacts: true + rules: + - when: never # temp. disable integration tests + +######### +# RELEASE +release: + extends: .release + needs: + - !reference [.release, needs] # LEAVE THIS LINE AS IS + ###### UPDATE/EDIT ###### + # DEFINE ONE BUILD JOB THAT NEEDS TO EXIST BEFORE RELEASE + - job: docker-build::cv-analysis-service diff --git a/.gitlab-ci.yml.bak b/.gitlab-ci.yml.bak new file mode 100644 index 0000000..6f19b94 --- /dev/null +++ b/.gitlab-ci.yml.bak @@ -0,0 +1,30 @@ +include: + - project: "Gitlab/gitlab" + ref: 0.3.0 + file: "/ci-templates/research/dvc-versioning-build-release.gitlab-ci.yml" + +variables: + NEXUS_PROJECT_DIR: red + IMAGENAME: "${CI_PROJECT_NAME}" + +################################# +# temp. disable integration tests, b/c they don't cover the CV analysis case yet +trigger integration tests: + rules: + - when: never + +release build: + stage: release + needs: + - job: set custom version + artifacts: true + optional: true + - job: calculate patch version + artifacts: true + optional: true + - job: calculate minor version + artifacts: true + optional: true + - job: build docker nexus + artifacts: true +################################# diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 583ab94..1155696 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,6 +10,7 @@ repos: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml + args: [--unsafe] - id: check-toml - id: detect-private-key - id: check-added-large-files diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7498375 --- /dev/null +++ b/Makefile @@ -0,0 +1,91 @@ +.PHONY: \ + poetry in-project-venv dev-env use-env install install-dev tests \ + update-version sync-version-with-git \ + docker docker-build-run docker-build docker-run \ + docker-rm docker-rm-container docker-rm-image \ + pre-commit get-licenses prep-commit \ + docs sphinx_html sphinx_apidoc +.DEFAULT_GOAL := run + +export DOCKER=docker +export DOCKERFILE=Dockerfile +export IMAGE_NAME=keyword_extraction_service-image +export CONTAINER_NAME=keyword_extraction_service-container +export HOST_PORT=9999 +export CONTAINER_PORT=9999 +export PYTHON_VERSION=python3.10 + +# all commands should be executed in the root dir or the project, +# specific environments should be deactivated + +poetry: in-project-venv use-env dev-env + +in-project-venv: + poetry config virtualenvs.in-project true + +use-env: + poetry env use ${PYTHON_VERSION} + +dev-env: + poetry install --with dev && poetry update + +install: + poetry add $(pkg) + +install-dev: + poetry add --dev $(pkg) + +requirements: + poetry export --without-hashes --output requirements.txt + +update-version: + poetry version prerelease + +sync-version-with-git: + git pull -p && poetry version $(git rev-list --tags --max-count=1 | git describe --tags --abbrev=0) + +bom: + cyclonedx-py poetry -o bom.json + +docker: docker-rm docker-build-run + +docker-build-run: docker-build docker-run + +docker-build: + $(DOCKER) build \ + --no-cache --progress=plain \ + -t $(IMAGE_NAME) -f $(DOCKERFILE) \ + --build-arg USERNAME=${USERNAME} \ + --build-arg TOKEN=${GITLAB_TOKEN} \ + . + +docker-run: + $(DOCKER) run -it --rm -p $(HOST_PORT):$(CONTAINER_PORT)/tcp --name $(CONTAINER_NAME) $(IMAGE_NAME) + +docker-rm: docker-rm-container docker-rm-image + +docker-rm-container: + -$(DOCKER) rm $(CONTAINER_NAME) + +docker-rm-image: + -$(DOCKER) image rm $(IMAGE_NAME) + +tests: + poetry run pytest ./tests + +prep-commit: + docs get-license sync-version-with-git update-version pre-commit + +pre-commit: + pre-commit run --all-files + +get-licenses: + pip-licenses --format=json --order=license --with-urls > pkg-licenses.json + +docs: sphinx_apidoc sphinx_html + +sphinx_html: + poetry run sphinx-build -b html docs/source/ docs/build/html -E -a + +sphinx_apidoc: + poetry run sphinx-apidoc ./src -o ./docs/source/modules --no-toc --module-first --follow-links --separate --force diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo new file mode 100644 index 0000000..4ed10df --- /dev/null +++ b/docs/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 9fe322b0a30d48be95bbacb490584b25 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/.doctrees/README.doctree b/docs/build/html/.doctrees/README.doctree new file mode 100644 index 0000000000000000000000000000000000000000..91c38e3bf3af0aa2ecba6eba3b60fe08427e492b GIT binary patch literal 33698 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
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

Keyword-Service#

+

Service to get keywords of a paragraph or whole document.

+ +
+

API#

+
+

REST#

+

The service provides endpoints to extract keywords from a text and to embed a text. For details, download +OpenAPI schema and view it in a browser.

+
+
+

RabbitMQ#

+

The service listens to a queue and processes the messages. This method is ment to be used for extracting keywords from +whole documents. All RabbitMQ parameters including the queue names are set in environment variables, refer to the +service respective HELM chart for more information.

+

The input message should be a JSON object with the following structure:

+
{
+  "targetFilePath": string,
+  "responseFilePath": string
+}
+
+
+

The service downloads the file specified in targetFilePath. Supported data structures for the target file are:

+
    +
  • simplified text data (signifier key: paragraphs)

  • +
  • structure object data (signifier key: structureObjects)

  • +
+

As a response, the service uploads a JSON-structured file (as defined in responseFilePath) with the result under the +data key. The structure of the response file is as follows:

+
{
+    "targetFilePath"
+:
+    string,
+        "responseFilePath"
+:
+    string,
+        // and eventually further fields if present in the input message      
+        "data"
+:
+    [
+        {
+            "keywords": Array[string],
+            "paragraphId": int,
+            "embedding": Array[float]  // 384 dimensions
+        }
+    ]
+}
+
+
+

Note that

+
    +
  • the embedding key is optional and can be omitted. The service will not calculate the embedding if the environment +variable MODEL__COMPUTE_EMBEDDINGS is set to false.

  • +
  • the service also computes the keywords for the whole document. In this case, the paragraphId is set to -1.

  • +
+
+
+
+

Service Configuration#

+

The service is configured via environment variables. The following variables are available:

+

| Variable | Description | Default | +| —————————————— | ———————————————————————————– | ——- | +| LOGGING__LEVEL | Logging level | INFO | +| MODEL__MAX_KEYWORDS_PER_PARAGRAPH | Maximum number of keywords per paragraph | 5 | +| MODLE__MAX_KEYWORDS_PER_DOCUMENT | Maximum number of keywords per document, when set to 0, no keywords are extracted | 0 | +| MODEL__COMPUTE_EMBEDDINGS | Whether to compute keyword embeddings or not | true | +| MODEL__PREPROCESSING__MIN_PARAGRAPH_LENGTH | Minimum number of characters in a paragraph to be considered for keyword extraction | 1 | +| MODEL__POSTPROCESSING__FILTER_SUBWORDS | Whether to filter out subwords from the keywords or not | true |

+

NOTE that these variables are subject to change. For the most recent configuration, refer to the service respective +HELM chart.

+
+
+

Language#

+

Currently, there is an english, a german and a multi-language model for keyword extraction. The models are uploaded to +mlflow and can +be set in the Dockerfile when building the container:

+

example for german model:

+
ENV AZURE_RESOURCE_GROUP="mriedl"
+ENV AZURE_AML_WORKSPACE="azureml-ws"
+ENV AZURE_AML_MODEL_NAME="keyword-extraction-de"
+ENV AZURE_AML_MODEL_VERSION="1"
+
+
+

and example for english model:

+
ENV AZURE_RESOURCE_GROUP="mriedl"
+ENV AZURE_AML_WORKSPACE="azureml-ws"
+ENV AZURE_AML_MODEL_NAME="keyword-extraction-de"
+ENV AZURE_AML_MODEL_VERSION="1"
+
+
+
+
+

Usage#

+

Two Options:

+
    +
  1. REST: Send text per request to endpoint, endpoint returns keywords

  2. +
  3. Queue: Service gets text from queue, model calculates keywords, save keywords in queue

  4. +
+

To test the REST endpoint you have to set up an environment and do poetry install ( +see https://gitlab.knecon.com/knecon/research/template-python-project for details for setting up poetry) +Then run

+
python ./src/serve.py 
+
+
+

You don’t need to start a queue for that, just ignore the AMQP Error. +Port and host are set in settings.toml . +You can use the FastAPI under 127.0.0.1:8001/docs to send request to endpoint.

+

You can also test the service with docker:

+
+

Run Docker Commands#

+
docker build -t ${IMAGE_NAME} -f Dockerfile --build-arg GITLAB_USER=${GITLAB_USER} \
+                                            --build-arg GITLAB_ACCESS_TOKEN=${GITLAB_ACCESS_TOKEN} \
+                                            --build-arg AZURE_TENANT_ID=${AZURE_TENANT_ID} \
+                                            --build-arg AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID} \
+                                            --build-arg AZURE_CLIENT_ID=${AZURE_CLIENT_ID} \
+                                            --build-arg AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET} \
+                                            --build-arg AZURE_AML_MODEL_VERSION=${AZURE_AML_MODEL_VERSION} \
+                                            --build-arg AZURE_AML_MODEL_NAME=${AZURE_AML_MODEL_NAME} \
+                                            --build-arg AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP} \
+                                            --build-arg AZURE_AML_WORKSPACE=${AZURE_AML_WORKSPACE}
+
+
+
docker run --net=host -it --rm --name ${CONTAINER_NAME} ${IMAGE_NAME}
+
+
+
+
+

Run locally#

+

First you need to download the model from mlflow. This can be done with the “src/ml_flow/download_model.py” script. +This scripts downloads a model and copies config and model data to the specific locations, such that the model can +be loaded.

+

For running/testing the keyword extraction locally you can use the src/tests/test_process.py script.

+

Model ist stored and loaded via DVC, you need the connection string under +https://portal.azure.com/#@knecon.com/resource/subscriptions/4b9531fc-c5e4-4b11-8492-0cc173c1f97d/resourceGroups/taas-rg/providers/Microsoft.Storage/storageAccounts/taassaracer/keys

+
+
+
+
+

Upload models to ML Flow#

+

To upload the models to mlflow, you can use following script: src/mlflow/upload_model.py +For authentication following environment variables need to be set:

+
#AZURE_TENANT_ID=""
+#AZURE_SUBSCRIPTION_ID=""
+#AZURE_CLIENT_ID=""
+#AZURE_CLIENT_SECRET=""
+
+
+

Additional settings (resource group, experiment name, etc.) can be specified in the config ( +./src/mlflow/config/azure_config.toml). +The upload_model.py has the following parameters:

+
options:
+  -h, --help            show this help message and exit
+  -a AZURE_CONFIG, --azure_config AZURE_CONFIG
+                        Location of the configuration file for Azure (default: src/mlflow/config/azure_config.toml)
+  -b BASE_CONFIG, --base_config BASE_CONFIG
+                        Location of the basic training configuration (default: src/mlflow/config/settings_de.toml)
+  
+
+
+

the base config contains all information for the models used. Examples for German and +English are placed in /src/mlflow/config/

+

Note: Multi-language model tracking does not work for now. After the upload script reports an error, you have to +manually track the +model here +where you can find the run. Adhere to the naming conventions for the model name and versions, +see here

+
+ + +
+ + + + + + + +
+ + + + + + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/docs/build/html/_sources/README.md.txt b/docs/build/html/_sources/README.md.txt new file mode 100644 index 0000000..b1901d1 --- /dev/null +++ b/docs/build/html/_sources/README.md.txt @@ -0,0 +1,203 @@ +# Keyword-Service + +Service to get keywords of a paragraph or whole document. + + + +- [Keyword-Service](#keyword-service) + - [API](#api) + - [REST](#rest) + - [RabbitMQ](#rabbitmq) + - [Service Configuration](#service-configuration) + - [Language](#language) + - [Usage](#usage) + - [Run Docker Commands](#run-docker-commands) + - [Run locally](#run-locally) +- [Upload models to ML Flow](#upload-models-to-ml-flow) + + + +## API + +### REST + +The service provides endpoints to extract keywords from a text and to embed a text. For details, download +[OpenAPI schema](docs/openapi_redoc.html) and view it in a browser. + +### RabbitMQ + +The service listens to a queue and processes the messages. This method is ment to be used for extracting keywords from +whole documents. All RabbitMQ parameters including the queue names are set in environment variables, refer to the +service respective HELM chart for more information. + +The input message should be a JSON object with the following structure: + +```json +{ + "targetFilePath": string, + "responseFilePath": string +} +``` + +The service downloads the file specified in `targetFilePath`. Supported data structures for the target file are: + +- simplified text data (signifier key: `paragraphs`) +- structure object data (signifier key: `structureObjects`) + +As a response, the service uploads a JSON-structured file (as defined in `responseFilePath`) with the result under the +`data` key. The structure of the response file is as follows: + +```javascript +{ + "targetFilePath" +: + string, + "responseFilePath" +: + string, + // and eventually further fields if present in the input message + "data" +: + [ + { + "keywords": Array[string], + "paragraphId": int, + "embedding": Array[float] // 384 dimensions + } + ] +} +``` + +**Note** that + +- the `embedding` key is optional and can be omitted. The service will not calculate the embedding if the environment + variable `MODEL__COMPUTE_EMBEDDINGS` is set to `false`. +- the service also computes the keywords for the whole document. In this case, the `paragraphId` is set to `-1`. + +## Service Configuration + +The service is configured via environment variables. The following variables are available: + +| Variable | Description | Default | +| ------------------------------------------ | ----------------------------------------------------------------------------------- | ------- | +| LOGGING__LEVEL | Logging level | INFO | +| MODEL__MAX_KEYWORDS_PER_PARAGRAPH | Maximum number of keywords per paragraph | 5 | +| MODLE__MAX_KEYWORDS_PER_DOCUMENT | Maximum number of keywords per document, when set to 0, no keywords are extracted | 0 | +| MODEL__COMPUTE_EMBEDDINGS | Whether to compute keyword embeddings or not | true | +| MODEL__PREPROCESSING__MIN_PARAGRAPH_LENGTH | Minimum number of characters in a paragraph to be considered for keyword extraction | 1 | +| MODEL__POSTPROCESSING__FILTER_SUBWORDS | Whether to filter out subwords from the keywords or not | true | + +**NOTE** that these variables are subject to change. For the most recent configuration, refer to the service respective +HELM chart. + +## Language + +Currently, there is an english, a german and a multi-language model for keyword extraction. The models are uploaded to +mlflow and can +be set in the Dockerfile when building the container: + +example for german model: + +``` +ENV AZURE_RESOURCE_GROUP="mriedl" +ENV AZURE_AML_WORKSPACE="azureml-ws" +ENV AZURE_AML_MODEL_NAME="keyword-extraction-de" +ENV AZURE_AML_MODEL_VERSION="1" +``` + +and example for english model: + +``` +ENV AZURE_RESOURCE_GROUP="mriedl" +ENV AZURE_AML_WORKSPACE="azureml-ws" +ENV AZURE_AML_MODEL_NAME="keyword-extraction-de" +ENV AZURE_AML_MODEL_VERSION="1" +``` + +## Usage + +**Two Options:** + +1. REST: Send text per request to endpoint, endpoint returns keywords +2. Queue: Service gets text from queue, model calculates keywords, save keywords in queue + +To test the REST endpoint you have to set up an environment and do poetry install ( +see https://gitlab.knecon.com/knecon/research/template-python-project for details for setting up poetry) +Then run + +``` +python ./src/serve.py +``` + +You don't need to start a queue for that, just ignore the AMQP Error. +Port and host are set in settings.toml . +You can use the FastAPI under 127.0.0.1:8001/docs to send request to endpoint. + +You can also test the service with docker: + +#### Run Docker Commands + +```bash +docker build -t ${IMAGE_NAME} -f Dockerfile --build-arg GITLAB_USER=${GITLAB_USER} \ + --build-arg GITLAB_ACCESS_TOKEN=${GITLAB_ACCESS_TOKEN} \ + --build-arg AZURE_TENANT_ID=${AZURE_TENANT_ID} \ + --build-arg AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID} \ + --build-arg AZURE_CLIENT_ID=${AZURE_CLIENT_ID} \ + --build-arg AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET} \ + --build-arg AZURE_AML_MODEL_VERSION=${AZURE_AML_MODEL_VERSION} \ + --build-arg AZURE_AML_MODEL_NAME=${AZURE_AML_MODEL_NAME} \ + --build-arg AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP} \ + --build-arg AZURE_AML_WORKSPACE=${AZURE_AML_WORKSPACE} +``` + +```bash +docker run --net=host -it --rm --name ${CONTAINER_NAME} ${IMAGE_NAME} +``` + +#### Run locally + +First you need to download the model from mlflow. This can be done with the *"src/ml_flow/download_model.py"* script. +This scripts downloads a model and copies config and model data to the specific locations, such that the model can +be loaded. + +For running/testing the keyword extraction locally you can use the *src/tests/test_process.py* script. + +Model ist stored and loaded via DVC, you need the connection string under +https://portal.azure.com/#@knecon.com/resource/subscriptions/4b9531fc-c5e4-4b11-8492-0cc173c1f97d/resourceGroups/taas-rg/providers/Microsoft.Storage/storageAccounts/taassaracer/keys + +# Upload models to ML Flow + +To upload the models to mlflow, you can use following script: src/mlflow/upload_model.py +For authentication following environment variables need to be set: + +``` +#AZURE_TENANT_ID="" +#AZURE_SUBSCRIPTION_ID="" +#AZURE_CLIENT_ID="" +#AZURE_CLIENT_SECRET="" +``` + +Additional settings (resource group, experiment name, etc.) can be specified in the config ( +*./src/mlflow/config/azure_config.toml*). +The *upload_model.py* has the following parameters: + +``` +options: + -h, --help show this help message and exit + -a AZURE_CONFIG, --azure_config AZURE_CONFIG + Location of the configuration file for Azure (default: src/mlflow/config/azure_config.toml) + -b BASE_CONFIG, --base_config BASE_CONFIG + Location of the basic training configuration (default: src/mlflow/config/settings_de.toml) + + +``` + +the base config contains all information for the models used. Examples for German and +English are placed in */src/mlflow/config/* + +Note: Multi-language model tracking does not work for now. After the upload script reports an error, you have to +manually track the +model [here](https://ml.azure.com/experiments?wsid=/subscriptions/4b9531fc-c5e4-4b11-8492-0cc173c1f97d/resourcegroups/fforesight-rg/providers/Microsoft.MachineLearningServices/workspaces/ff-aml-main&tid=b44be368-e4f2-4ade-a089-cd2825458048) +where you can find the run. Adhere to the naming conventions for the model name and versions, +see [here](https://ml.azure.com/model/list?wsid=/subscriptions/4b9531fc-c5e4-4b11-8492-0cc173c1f97d/resourcegroups/fforesight-rg/providers/Microsoft.MachineLearningServices/workspaces/ff-aml-main&tid=b44be368-e4f2-4ade-a089-cd2825458048) + diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt new file mode 100644 index 0000000..e356eff --- /dev/null +++ b/docs/build/html/_sources/index.rst.txt @@ -0,0 +1,37 @@ +.. Keyword Extraction Service documentation master file, created by + sphinx-quickstart on Mon Sep 12 12:04:24 2022. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +==================================================== +Welcome to Keyword Extraction Service documentation! +==================================================== + +.. note:: + + If you'd like to change the looks of things 👉 https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html + + +Table of Contents +----------------- + +.. toctree:: + :maxdepth: 3 + :caption: README + + README.md + +.. toctree:: + :maxdepth: 3 + :caption: Modules + + modules/cv_analysis + modules/serve + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/build/html/_sources/modules/cv_analysis.config.rst.txt b/docs/build/html/_sources/modules/cv_analysis.config.rst.txt new file mode 100644 index 0000000..fc5ae0c --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.config.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.config module +========================== + +.. automodule:: cv_analysis.config + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.figure_detection.figure_detection.rst.txt b/docs/build/html/_sources/modules/cv_analysis.figure_detection.figure_detection.rst.txt new file mode 100644 index 0000000..430da95 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.figure_detection.figure_detection.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.figure\_detection.figure\_detection module +======================================================= + +.. automodule:: cv_analysis.figure_detection.figure_detection + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.figure_detection.figures.rst.txt b/docs/build/html/_sources/modules/cv_analysis.figure_detection.figures.rst.txt new file mode 100644 index 0000000..5c5b235 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.figure_detection.figures.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.figure\_detection.figures module +============================================= + +.. automodule:: cv_analysis.figure_detection.figures + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.figure_detection.rst.txt b/docs/build/html/_sources/modules/cv_analysis.figure_detection.rst.txt new file mode 100644 index 0000000..2f0f010 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.figure_detection.rst.txt @@ -0,0 +1,17 @@ +cv\_analysis.figure\_detection package +====================================== + +.. automodule:: cv_analysis.figure_detection + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + cv_analysis.figure_detection.figure_detection + cv_analysis.figure_detection.figures + cv_analysis.figure_detection.text diff --git a/docs/build/html/_sources/modules/cv_analysis.figure_detection.text.rst.txt b/docs/build/html/_sources/modules/cv_analysis.figure_detection.text.rst.txt new file mode 100644 index 0000000..d05b1d1 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.figure_detection.text.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.figure\_detection.text module +========================================== + +.. automodule:: cv_analysis.figure_detection.text + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.layout_parsing.rst.txt b/docs/build/html/_sources/modules/cv_analysis.layout_parsing.rst.txt new file mode 100644 index 0000000..78d7aee --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.layout_parsing.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.layout\_parsing module +=================================== + +.. automodule:: cv_analysis.layout_parsing + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.locations.rst.txt b/docs/build/html/_sources/modules/cv_analysis.locations.rst.txt new file mode 100644 index 0000000..6885b03 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.locations.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.locations module +============================= + +.. automodule:: cv_analysis.locations + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.redaction_detection.rst.txt b/docs/build/html/_sources/modules/cv_analysis.redaction_detection.rst.txt new file mode 100644 index 0000000..701fd0f --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.redaction_detection.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.redaction\_detection module +======================================== + +.. automodule:: cv_analysis.redaction_detection + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.rst.txt b/docs/build/html/_sources/modules/cv_analysis.rst.txt new file mode 100644 index 0000000..cdb3c8f --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.rst.txt @@ -0,0 +1,30 @@ +cv\_analysis package +==================== + +.. automodule:: cv_analysis + :members: + :undoc-members: + :show-inheritance: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + cv_analysis.figure_detection + cv_analysis.server + cv_analysis.utils + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + cv_analysis.config + cv_analysis.layout_parsing + cv_analysis.locations + cv_analysis.redaction_detection + cv_analysis.table_inference + cv_analysis.table_parsing diff --git a/docs/build/html/_sources/modules/cv_analysis.server.pipeline.rst.txt b/docs/build/html/_sources/modules/cv_analysis.server.pipeline.rst.txt new file mode 100644 index 0000000..9725050 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.server.pipeline.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.server.pipeline module +=================================== + +.. automodule:: cv_analysis.server.pipeline + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.server.rst.txt b/docs/build/html/_sources/modules/cv_analysis.server.rst.txt new file mode 100644 index 0000000..b382ab3 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.server.rst.txt @@ -0,0 +1,15 @@ +cv\_analysis.server package +=========================== + +.. automodule:: cv_analysis.server + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + cv_analysis.server.pipeline diff --git a/docs/build/html/_sources/modules/cv_analysis.table_inference.rst.txt b/docs/build/html/_sources/modules/cv_analysis.table_inference.rst.txt new file mode 100644 index 0000000..bddc8b8 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.table_inference.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.table\_inference module +==================================== + +.. automodule:: cv_analysis.table_inference + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.table_parsing.rst.txt b/docs/build/html/_sources/modules/cv_analysis.table_parsing.rst.txt new file mode 100644 index 0000000..76ef3f5 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.table_parsing.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.table\_parsing module +================================== + +.. automodule:: cv_analysis.table_parsing + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.annotate.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.annotate.rst.txt new file mode 100644 index 0000000..935a95f --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.annotate.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.annotate module +================================== + +.. automodule:: cv_analysis.utils.annotate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.banner.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.banner.rst.txt new file mode 100644 index 0000000..7b71ce9 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.banner.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.banner module +================================ + +.. automodule:: cv_analysis.utils.banner + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.connect_rects.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.connect_rects.rst.txt new file mode 100644 index 0000000..a9ee876 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.connect_rects.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.connect\_rects module +======================================== + +.. automodule:: cv_analysis.utils.connect_rects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.display.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.display.rst.txt new file mode 100644 index 0000000..a7b5f3b --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.display.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.display module +================================= + +.. automodule:: cv_analysis.utils.display + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.draw.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.draw.rst.txt new file mode 100644 index 0000000..fedcf58 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.draw.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.draw module +============================== + +.. automodule:: cv_analysis.utils.draw + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.filters.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.filters.rst.txt new file mode 100644 index 0000000..ae4f5e9 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.filters.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.filters module +================================= + +.. automodule:: cv_analysis.utils.filters + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.image_extraction.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.image_extraction.rst.txt new file mode 100644 index 0000000..08f2105 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.image_extraction.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.image\_extraction module +=========================================== + +.. automodule:: cv_analysis.utils.image_extraction + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.open_pdf.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.open_pdf.rst.txt new file mode 100644 index 0000000..28908b9 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.open_pdf.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.open\_pdf module +=================================== + +.. automodule:: cv_analysis.utils.open_pdf + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.postprocessing.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.postprocessing.rst.txt new file mode 100644 index 0000000..6dcb897 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.postprocessing.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.postprocessing module +======================================== + +.. automodule:: cv_analysis.utils.postprocessing + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.preprocessing.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.preprocessing.rst.txt new file mode 100644 index 0000000..d8b86a2 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.preprocessing.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.preprocessing module +======================================= + +.. automodule:: cv_analysis.utils.preprocessing + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.rst.txt new file mode 100644 index 0000000..ebb7f7d --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.rst.txt @@ -0,0 +1,28 @@ +cv\_analysis.utils package +========================== + +.. automodule:: cv_analysis.utils + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + cv_analysis.utils.annotate + cv_analysis.utils.banner + cv_analysis.utils.connect_rects + cv_analysis.utils.display + cv_analysis.utils.draw + cv_analysis.utils.filters + cv_analysis.utils.image_extraction + cv_analysis.utils.open_pdf + cv_analysis.utils.postprocessing + cv_analysis.utils.preprocessing + cv_analysis.utils.structures + cv_analysis.utils.test_metrics + cv_analysis.utils.utils + cv_analysis.utils.visual_logging diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.structures.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.structures.rst.txt new file mode 100644 index 0000000..10bae28 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.structures.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.structures module +==================================== + +.. automodule:: cv_analysis.utils.structures + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.test_metrics.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.test_metrics.rst.txt new file mode 100644 index 0000000..6734c5c --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.test_metrics.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.test\_metrics module +======================================= + +.. automodule:: cv_analysis.utils.test_metrics + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.utils.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.utils.rst.txt new file mode 100644 index 0000000..937b52d --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.utils.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.utils module +=============================== + +.. automodule:: cv_analysis.utils.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/cv_analysis.utils.visual_logging.rst.txt b/docs/build/html/_sources/modules/cv_analysis.utils.visual_logging.rst.txt new file mode 100644 index 0000000..afee2b1 --- /dev/null +++ b/docs/build/html/_sources/modules/cv_analysis.utils.visual_logging.rst.txt @@ -0,0 +1,7 @@ +cv\_analysis.utils.visual\_logging module +========================================= + +.. automodule:: cv_analysis.utils.visual_logging + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/modules/serve.rst.txt b/docs/build/html/_sources/modules/serve.rst.txt new file mode 100644 index 0000000..3eab85d --- /dev/null +++ b/docs/build/html/_sources/modules/serve.rst.txt @@ -0,0 +1,7 @@ +serve module +============ + +.. automodule:: serve + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css new file mode 100644 index 0000000..2af6139 --- /dev/null +++ b/docs/build/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/docs/build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js new file mode 100644 index 0000000..af417e6 --- /dev/null +++ b/docs/build/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '2.5.1', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/build/html/_static/file.png b/docs/build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /dev/null +++ b/docs/build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/build/html/_static/logo.png b/docs/build/html/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0a5234862f6675e17104b8c77b69e084a9d9bb GIT binary patch literal 30874 zcmeFYg;yOxkT-gfi_66&$i-a)!QI_8xD(vnT>^yQ?gV#t5AGV=-Gj?VcK6%e^WI2`N-ikr#|{P(X|v2 zQIrx90V_J%nORz!0sz!MT;lkcL?AFjvz3X33gqbfr~1jIe+>?4!u-IM_OWYfn*U;Z zvVRxp%xq|YiPqKKZ}O|!nFTi_E``DxMhYkGWEI;c;%B=@c01R>?ylf>nQ51Ccyg5@ zmd`BvS~}WyZ0(!TK^=KdC=$c8t8t}o1fJ5=n~!KEf6`{>^qa>L zd3>xSyO6CydXiqv2x%1=_5A7|YD>+lx!|=>i!h}44A=5P#WH6q67+D=^kMHvQ%xx| zIXM9B2M-5;hQJ2^KRAdF;)nS3-@G^kH2~^A@*x3$FiQaRe_`Z5(tlgr2mO=z&lD;? z6af2ihW=s0LlZkAQ$}|i`+s@>yzbl|tc|I&A=ur<+SZBN zosaZC5ZoX9zicK_@P9y@t@uba}YB4Y-wi;{-@W_$j-%?kCgOZMgP71XFE;ZE&rz`Tc`i()<*}K{*^GXFfud!x9$&7 z-ha8=ik9xC)>@*LHXkY zkMv`b{l^yiaispBf9VHthJ>Nd^|?M! zc-Gxu5|AVu^dJj!Olo*U92IWtfj}zpe%NErR>YN^f84HNlKs+F&(ybEtOih9v>+nf z**A!I&#KBZhMUI>@1|0UG9hO*-ud*2^45zEFT3@zpH!2N`@=s+ZII!VMD_$f_U?51 z95sk-xn^Z1H5648a#&hHRiR%5zX&)PKUjif_P^r)aKLa{sKk$b=pVaNTeSWU@(ZA3 zn&X(`xY_){I_NCSefkH%0+%AGeyAcy{$OK9(>(J(AUTkti2)-Y`_2d3@1Uh(_Yb1# z|BF?TOOeZ7=Y!>Bv^xI&4}t(vgQ10`g^d~gV24cQI+Q*jmq`%YSyok*tEC?msIy{Gkn(rp?MM5o%}PL&uJqe&WhVz>j}b zOD^kvE+fEY`Uk0cDxFhDiB9-vr})Tun$}*oyTb>>eO{xm(b1sbqf;!(u8U)|u!B(_ zkioJ}+J;0ZvVRu%QQKyw&c&?v52E*1t)zkgm*&G<(Ftqpbt3^++aHjt(kf}2y>3aa zk9HNDR;H?g*=fDDM}vU zSr3@~L+PWYZ)>A!a*O$L{$1r5+u3&=)G3b0MaBa$*x@m@c2JeA5VOjdfDphixvgk$QSn znmUiigj{O5bn|E%JRjblmv==7A*G>>`(M!u@fr6>Buw*M+Ira^mk+9dla$TeESquJ zmo6D3I|ab-7-{1@rQEkdqxy1ty03{BLu`vp4iy_`gVT4a^z~Fq`|`KXnJK$Z1j5Xp zHMdfUBG&<8Xx?)It#As-7g)1`Gh?O*$jd04)<=v~g16k6n$TeN@I?_H=s4^H+KVSB zS~SY|CV#6J;g9GM7*g+?Qhf z$^|d`kfua&3URR;h4kK6*8P~_B$8~KmMH18lGL}!3Vy@Ej_X@IsE?HTT?!0|ch@i&Ow?r@jxc>X5(?W4=14^U)nr2ll@6D{! zblNh0SR2}(M(c=@bw{M6m?GhND#}m& zzwOc>f2#_Gx0+zh^c!}kOObg#EQmmh6W!@28=TAyOPe#fD=8KRZw;h9Hi~trQKzYq zytKa}JEjTUgg$;i2_szPqP6ZBn+Z=uFQb#&Rf5V+?Fm1A^2>0xxYr2{02mp-yu?}0 z{W)dnO%O|!G=bzNdB=;o`USgc<^7zdM6XX^A`5 z8UYVogzo?OWqFQ@_w+wE&zX{|Eco0-my zB|Ibaoclr<*h#ZFL$8dBl;+0O&7h#izN;I%7h~SegSQm!2kkMCANnPZ$q;)+0YFKc z=_~hF@kH<+t%UB*!cDN`FVUYVV-gW{cF!~pd&T^C8XMOK(<`hvXUmqD-+m-*#Pq2P znjl`OH5&0?rV9U<@*(Z_x0Qase0%6ww2d9QXr+_q^JZ?O1m%R&(NS-RT84P!gg9cG zXk}|ID}QC|Bi+*??SeO%7g=J~lzvxMqB$V%;-Ma3br!67kkC&foziwSj&YnA=wH5w zj^cmm;d~E`9oRL!h+J63G;7q2l$Ui#>8!9m(zwcx>kdJm$F6Y5*a7kQ!Y^P>R$)9$x+c2U_rClj1|mjNlW%K3=eq*v^rTjVfsa)y|2 zmef8npCW?cp%=YqC@k@rjFm6`bdpuR+>T#m`MnQVK!GaozN-9LVq~oivC~$}Qn|WT zWWxNy=gSw2=#NWJ5J~)cR&n)k&a*Qo@@$MC&>svYL552`UZq>-pZW6sH)KvknVn)l zwaY&;or?lD>Gp_n7HgA3T^=?M7y`leXd+{?uen(gbjHBqHQ2TtFYqR)gTyJT^TOyJ zpl{|1Lv(0e*d}~ysceDD5FtBMe*+flEF790$3v(Y5k}`G|8fKawnk~64inJ!{;By@ z``as!K0F`sYS*S|(74TQKptQe&seBiPAZdLSKk#?`jY^xnnEI|I1D5T#fHvM5n@Zl z!2r7ss&V*zseIekHxjb`zE1v4yeuzB+1{e}69nlV4FjC2vj;y>%g*T4Ql;JCgvhgz zqba-uwgM!=ewG=3F^#HR;K>WN#S9T%<5G;eti7iCSD6qWJQBTJdY^Kb3Yrf1pG2!n z-7}G7&Lp1ZSvWX4H#P3}E{jH7I!MGt#_&(cJP+U*KV0kv!|^SYtavw{6=Q(EB6W zv@I?j2RS{S@cy{~2q!lCMfrrJ4VR{DU{!t;O^8F58OZ}0*~{k7g!{cYKhDMTwx2Ld zWAXN8y7ZPEH+10{O@%QT1_OQgt$?#eH5g^+-tOIz*Y}{3^K42e+J!)CcXlU>F%rHF z?^de~AU@0|#km!$EPhQDJIGDDAwn%nCo~%P1KE&#w46OZuMZ2?0ashS$bRvhmw~bK z{Hgg^CA-HFKtL%3vyDs%5mBHxH9endiwZh8A34zXZuiufn?%W5r1Wkq1X|)Pkt6F(jjF!@~Cbix^Clsz4-}IKYSRGaZ_kzT&kRMyTA!+#mhNAcrj)Y zUvdhu4=BCxlp(J^&m};&zJd)jhZ;&xo1ebyj`w+YnVQ+9)oQO40tiTexdaI>mK$}Q(Af%@4!=N8^fq|5bQqA!jzC?# zCeH78Rn?X+&4i=5_6E>oq{N(sOeQ5bL4#jGnjndToi;%Kj@vmSc5qDhIXc6aeO|E1 z$@+lKxbJ(YWIP3R*qPUa#%5c6oE5;Zn3nHsswO(`Ua(EQIaQ9;|e9i=~shiDR__=cNAo? zBhow<1%44bwkX+9l>7dDwj;j$$mAgGyN>^oR9BmnnAi>O7j|ztwlaVr#nQNDkCex) zq&6saw)d3R9oz^Bf+Em@6!o$YvIt@O+2rlaM{)*C<8MQ1ynqyWLQxsXB_8HL;dg&Q zo`Pd`=Gvb=)wtr4?Yuc{eo3?1Udw*9c3!`Vu^4An{%qLxEyD1_pIQ90_rB!h$I;z0 zxfo)+({Vod$8Gz!dMbr*GAcj$KF6)h#pP6q7m{s1dEXYF;1(KS8$M$SvOoIo^BtC{ zh$FuxM4mH@wMJN9ym}!d#8)63VTgL=K@|1)8=)pB`%M-CuG5g@9=(dk#*S5MhWd5fDU@c7ZP7%6fZe6 zQf!hICLHjW7(%?)@%npZ+hMa9b-j|;Nd%rD5QX$)`y^L*e5Bw%71%9wzb^2ONFP3% zH~A7iv-YJS7fd5c!)vu3ei~pDis~#%#77{|yv8UF1@a(c2!{lfGT_Dg`BwcDX}sFM zfTk9kuMCPTk4yjA{X?WYgG=j}8epF?ERSKHfpq|Zg0to>V%>4*_|V_b(sIZ%^FwFW zm{ifk5HayZ2buPJ?&Dq4J(smdhxIy9I#W2@TvPy~Dv`)aVH?*qKkqz45*k}HX;E?qPhJ{PIB~)SojO`xxOnp0H$)tD_d0Bm7RB)72VQ`nj?3)0!yW@< zzr5{K+VS=TCHYyf8pV{X&8|3w4HXKQUcyCreS{geFGCab)xxkIoZ-c+x|oakc>5G0 z{gjLD54r?TE@WR21%3rUTGUwy(G$i#)6639hm8u{)il2help&Vq!UWvLQm~4t(_b% zM_s_v7hQV7fikLL&2*HBC{Gmq~8;353D)5V1O@Yq2S^Hj;oyB-`22@po6i8XKgCF#z&Y?0&2 zlG!TY$4t}_l$yYW3hA#1N{wto0EyQ9*+H88Zt+#FZ>zZ=$aWA@pq{)IDya6@$sX%S zs1?iMc%pf;&yV1uYj0yKju%QdD+UWYPEPU5Drt-MtkKF}>1?SWe@gi@^12ltklwhO z;0RvgFfOTPB}r^(EXeo<_)Q=xA*5Chc_uTXzMCk)99Kr72=M|soOtbO{sE6a{EU;P z2>`;l%v+KbCGNA2hYVIrXP=+~$BhHJK%qu3UDHw#KoUXb`6noVD58~ctX~^MxV0rH zD1NsTmj)Fh?UL~j4ID!tjd2SPeaI%O*oNx~iy)Zrf+gnzJl^mOI?Jhh2yU?i7%f~+ z7nBqrrVK>=xzgttV-bHM#)_|w6Z)>BsOTpPoBk@rB1GDU|2(-fG`ybXW{ z>fO}lVwgxhZ_F&owy5@z%aZli>*$xCoGj)1u$@BTK?4yPJ71E+~yJwp{tF93v~IKtRt|J{qID_|mcwn@ zb&7rsE?1eYu(HBvHeSlM4r-3%d_2QVFXO%kbr4A0#%NaQ%K_KR3)_m#hoEq!e0K)P zwXtM+#LfD+844>Pm(<65``k7i&Ab>$#nlw}NG#7jY3?1vrk-+3VwahlLdW0ImMW}d zUYIv!ao^*J%{KcbuONmM-gVV}JR(M~P5Ctl7H^>W`+Tb@%Q})-k^&oW*snd#f*R- zzGtk15udNQRyliA9kT?cq)d-9Pn)n1+AL|ZzswA2M&i_Nd`@VNC*h+gXwhJRGijU- zGB|y~J;8QB)!8+R2*>xK&w(qcZx>608U7nSoxj-F#NjULFcE7`cV<3A%up$&sj`NH z{RkBVspaOPi60H+63BdSUc;#R0^oyZX5g+8O7WW$uMD6#@p*G$9|74dx0HFESWM7F znp8Xpe|=jo2{maN!0WSk{xE>rNn9rznO;wvL>Z1Y_&K8=kP9xS`O$lvO`9k`V(5c! z1&`R9n!u>44FzX}h+dy0#$S)qY@q)K(LXGoq~zN5iRB1Z0%Z`@&YbqV(rz=z9XT6N zhhXgzt7NUbYdAxRtfrV)4`js&(?|9|^~^+|N82|#sn|YBxb0l%g?@BXv<}GINHf|} z49l#+tu2VUUH`<7m;63#ZoI8~AQm;CxhBOMSD*$^kq3=cDghWM2CZJLTIw@f_90_* z5y`9^Zehyh2heynAAqyp^Y(5lWy7u1%fA^sFv?L$(UyG7!pGnfqL+G&<^#3dtb zQEt3Z*;znSM|}m|;oulw{WiottNk&>+SfA|?PXcsbN4C!Q_$>BA~0sKwPnR~t|q4c zZ$u9YhH!!bPVA3KybGVeJT6Ht-lQkvUmYN140F1}`4aHzLoevfC$A5Lo880{u0hKQ zUucB0r~za&Q^-*)soAF}bp@&m4Kos^2LiPOkyB1^rK6=*a2?6eb%QAeuHzsBmpuhV>POzv`2bamHbZlm>ah1y$SWlc>;yogOkD)U+kN(v!Th@ASYsI|Wdgd;>N!in92(SxL`i&zZ)Ug1N7$<^ zXGOy21QaQE7I2;qWY?{5zYoQM;T$_#mn&u&QZ$x@->~M!fuKeM+GbKsN^2~@RAk&j zJ<3Dlz=HG?q>@O3a6d(?5i(7cKYSU>0bahqZ^t z_Kv7t)}d5rL#JZMc?M~STMGTUEsaA+B!fbaQ_bmKl^NKM+(6LN%Btwa+PcMOxv_({ zyr?~PBs$1j=mipc`sw(-N*F&~)8SU6kQIqn6DAtfn0zUc5ieR74BUv%HD-AwGD*6( zAUxaT3~sv~o4pzn@!H1GL_wV7@0(cT)L&~!-^+r+qPQ=E?q~L(1i-f`0KZ7OV*uMM ztY{f<)_DsGE`Q8JN$zGFkUYQK5E1wB*k%33)u{joQP@!WOZLdrIGO;$XoQQD5g-C3 zj4NAHWWb|Xsl4QZhe|j)_+9;I6DXTrORnochiP`=aKx%-#W6iknzcw9-qCRAH4=_? z1Y{FHzHRth&9tx0)E^}nSBOY%3aEg`;nPC8snBDK2C%weew%-1HuH5dL+LP@P7`~ z#{&PVABP5smD|$_Yb=LuJi;L*A1C9E6zj%fWrWhnvQnp?bF&?nkF##{=v8$)+8cer zmggc{e~n1rzEoIsqc|$ z0D^Aykn;JwT9C7`SH*|A5%1r=)DFJ!iG8=Ky zT0S$mAHj{%IW8GQ08e11;E$vXmN0)q-9n09zEPgaTu5m4re%OIyGsUNQ;)=VXgE|C z&8<0N62WG*jQX~vF`z1;>^-C0EpL)2&V~p_&(?nP?w~@A+^UBrO8X1!=jO0@+NIA> zI+@Wbw43A!+|wzGjZu1yeMX9#S4y6_8Mg=dO&5vok8jV$lN;|o^}erVoIkP3AcH`P zcRBv*y( zKqs(rPj>OeTLH!y68o(MyP&;D5wPklbvj^)jLg)d{yxZ~iWvCx zM;5#PILg~1upZ3zm>E~#p{F|1f~*bb+!c4yt?L*+pRHJ${Nmtr3hlzOX%F<`meuoA zt9REmkd-}Y8rxeDGs61TMj39m(v#si(1L_vEtqaDR21M9Qmzj11nWmTMvuw6&Wsv?(?id_!Gmv858dS zQT#z&SixrXUTK+RxLT@g%t*g%Twj(j+VM=lbiy5J>!{B;Gr3lgLb9f<#9|R0tHJNu zru!22>s+s$BiK$1#4hhIjpYwn3=6uPrWy5o&XO}(X-gpJ9Qwa-(_<|n|ADKCCn}eTrN)>$Lrz2%>16RcbHl!4Jt0tZ@ z!_J!beYifJ{pYRb14>2GZrALdg$+%0(`oufS$&=E5jZICyIFSqy-}0>wfLa?^B3+ur-BnR%~2NA6i!b%qK+A7EF{+eyiOj1d8 z6a-cQ34cG2XZk(PnRO{c1mdsA0t}x|w*EA$@-KQmbjoiu7S_4}f*C7rS@S`3&csig zCCWaVtHY$(Gw`LTPwk=ZCKXf|@zvvR7WY!u5B9?bN z%)hyx{n?0Gd%y7$eQrqJVNqMQf8Ksm0eQb-8SEWixc*FS zaFxRtaV8uw{%LOaag9ZleE7q>>bs_CNz_5Rf<}WAhy!i4?X_Ig?wy+ zc1I$3xtA7WYZqY~@w2K%&mGUk?n36OEX)sA;Av2o<-PX?$(V6SefvTkh$ zO}Q~I_4v$1BQr`X*sQC|R0Lw4#9Red8xd9L8;F@4oI36362B3g z&55w|n3eRqiN|lU0)HW8+XZ)_xxWJOqL_Ht7y$l9YDaOW{P#M%@0&qaOFrcl?&l#( zp(2jyy3pPz?L*ugzSG`^b&8`>N-BWlPuvW~Ei=LJ^Gg8!AHZmc^c5vs> zaN73hUNt`hN-v4S`#d)}Aree;`a4cAPj0Q=`}t?)@MEcHbii(#r?fFAk|wJM?OCvx z2jqu{1;7XFUh9sD{tM9|$>vGX?HS6U%w0)y+@aZ>CM+hXr z)ci0PmNP>NTFGDL(F9v?+{RcQG_#IhF8jV%gEmNLmj*q5dmX_vt;dKhD`5<_`p7C%1Yn zY?g%&x~#iFLQnFIB}h$MTPJy^$<~DU&QNXw&o1 z%}O57M#j?7kpMpQ87Xj{YGFXL{X9%qJncGb1>$K!-e+OHJUl0e6B{y+dR zdv^eoR<;eT!a=4RL_p#_>G|2 zc+McsyQGHDB#uY8RT;<&Ab_E}nclchfA}kcI=H6)tUY#Vv~{M*

9cx#s9fv6c=k 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/minus.png b/docs/build/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/plus.png b/docs/build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css new file mode 100644 index 0000000..997797f --- /dev/null +++ b/docs/build/html/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #7971292e } +html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } +html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ +html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ +html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ +html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/build/html/_static/scripts/bootstrap.js b/docs/build/html/_static/scripts/bootstrap.js new file mode 100644 index 0000000..4e209b0 --- /dev/null +++ b/docs/build/html/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>ri,Collapse:()=>yi,Dropdown:()=>Vi,Modal:()=>xn,Offcanvas:()=>Vn,Popover:()=>fs,ScrollSpy:()=>Ts,Tab:()=>Ks,Toast:()=>lo,Tooltip:()=>hs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=X(T,O,C),k=f;i.modifiersData[a]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const it={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:I(e.placement),variation:Z(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,et(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,et(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var nt={passive:!0};const st={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=Ft(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?Mt(i.trim()):null}return e},we={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Xt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Fe=".bs.carousel",He=".data-api",Be="next",We="prev",ze="left",Re="right",qe=`slide${Fe}`,Ve=`slid${Fe}`,Ye=`keydown${Fe}`,Ke=`mouseenter${Fe}`,Qe=`mouseleave${Fe}`,Xe=`dragstart${Fe}`,Ue=`load${Fe}${He}`,Ge=`click${Fe}${He}`,Je="carousel",Ze="active",ti=".active",ei=".carousel-item",ii=ti+ei,ni={ArrowLeft:Re,ArrowRight:ze},si={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},oi={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ri extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Je&&this.cycle()}static get Default(){return si}static get DefaultType(){return oi}static get NAME(){return"carousel"}next(){this._slide(Be)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(We)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ve,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ve,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?Be:We;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&fe.on(this._element,Ye,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Ke,(()=>this.pause())),fe.on(this._element,Qe,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Xe,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ze)),rightCallback:()=>this._slide(this._directionToOrder(Re)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=ni[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=we.findOne(ti,this._indicatorsElement);e.classList.remove(Ze),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Ze),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===Be,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(qe).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(Ze),i.classList.remove(Ze,c,l),this._isSliding=!1,r(Ve)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(ii,this._element)}_getItems(){return we.find(ei,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===ze?We:Be:t===ze?Be:We}_orderToDirection(t){return Kt()?t===We?ze:Re:t===We?Re:ze}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}fe.on(document,Ge,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(Je))return;t.preventDefault();const i=ri.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Ue,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)ri.getOrCreateInstance(e)})),Qt(ri);const ai=".bs.collapse",li=`show${ai}`,ci=`shown${ai}`,hi=`hide${ai}`,di=`hidden${ai}`,ui=`click${ai}.data-api`,fi="show",pi="collapse",mi="collapsing",gi=`:scope .${pi} .${pi}`,_i='[data-bs-toggle="collapse"]',bi={parent:null,toggle:!0},vi={parent:"(null|element)",toggle:"boolean"};class yi extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(_i);for(const t of i){const e=we.getSelectorFromElement(t),i=we.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>yi.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,li).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(pi),this._element.classList.add(mi),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(mi),this._element.classList.add(pi,fi),this._element.style[e]="",fe.trigger(this._element,ci)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,hi).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(mi),this._element.classList.remove(pi,fi);for(const t of this._triggerArray){const e=we.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(mi),this._element.classList.add(pi),fe.trigger(this._element,di)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(fi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(_i);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(gi,this._config.parent);return we.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=yi.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,ui,_i,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))yi.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(yi);const wi="dropdown",Ei=".bs.dropdown",Ai=".data-api",Ti="ArrowUp",Ci="ArrowDown",Oi=`hide${Ei}`,xi=`hidden${Ei}`,ki=`show${Ei}`,Li=`shown${Ei}`,Si=`click${Ei}${Ai}`,Di=`keydown${Ei}${Ai}`,$i=`keyup${Ei}${Ai}`,Ii="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Pi=`${Ni}.${Ii}`,Mi=".dropdown-menu",ji=Kt()?"top-end":"top-start",Fi=Kt()?"top-start":"top-end",Hi=Kt()?"bottom-end":"bottom-start",Bi=Kt()?"bottom-start":"bottom-end",Wi=Kt()?"left-start":"right-start",zi=Kt()?"right-start":"left-start",Ri={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},qi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vi extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Mi)[0]||we.prev(this._element,Mi)[0]||we.findOne(Mi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Ri}static get DefaultType(){return qi}static get NAME(){return wi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,ki,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Ii),this._element.classList.add(Ii),fe.trigger(this._element,Li,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!fe.trigger(this._element,Oi,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Ii),this._element.classList.remove(Ii),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,xi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Ii)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Wi;if(t.classList.contains("dropstart"))return zi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Fi:ji:e?Bi:Hi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===Ci,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Vi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=we.find(Pi);for(const i of e){const e=Vi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ti,Ci].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ni)?this:we.prev(this,Ni)[0]||we.next(this,Ni)[0]||we.findOne(Ni,t.delegateTarget.parentNode),o=Vi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Di,Ni,Vi.dataApiKeydownHandler),fe.on(document,Di,Mi,Vi.dataApiKeydownHandler),fe.on(document,Si,Vi.clearMenus),fe.on(document,$i,Vi.clearMenus),fe.on(document,Si,Ni,(function(t){t.preventDefault(),Vi.getOrCreateInstance(this).toggle()})),Qt(Vi);const Yi="backdrop",Ki="show",Qi=`mousedown.bs.${Yi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ui={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Gi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Ui}static get NAME(){return Yi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Ki),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Qi,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const Ji=".bs.focustrap",Zi=`focusin${Ji}`,tn=`keydown.tab${Ji}`,en="backward",nn={autofocus:!0,trapElement:null},sn={autofocus:"boolean",trapElement:"element"};class on extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return nn}static get DefaultType(){return sn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,Ji),fe.on(document,Zi,(t=>this._handleFocusin(t))),fe.on(document,tn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,Ji))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===en?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?en:"forward")}}const rn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",an=".sticky-top",ln="padding-right",cn="margin-right";class hn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,ln,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e+t)),this._setElementAttributes(an,cn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,ln),this._resetElementAttributes(rn,ln),this._resetElementAttributes(an,cn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const dn=".bs.modal",un=`hide${dn}`,fn=`hidePrevented${dn}`,pn=`hidden${dn}`,mn=`show${dn}`,gn=`shown${dn}`,_n=`resize${dn}`,bn=`click.dismiss${dn}`,vn=`mousedown.dismiss${dn}`,yn=`keydown.dismiss${dn}`,wn=`click${dn}.data-api`,En="modal-open",An="show",Tn="modal-static",Cn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class xn extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new hn,this._addEventListeners()}static get Default(){return Cn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,mn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(En),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,un).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,dn),fe.off(this._dialog,dn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Gi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new on({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,gn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,yn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,_n,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,vn,(t=>{fe.one(this._element,bn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(En),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,pn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,fn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Tn)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Tn),this._queueCallback((()=>{this._element.classList.remove(Tn),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=xn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,wn,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,mn,(t=>{t.defaultPrevented||fe.one(e,pn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&xn.getInstance(i).hide(),xn.getOrCreateInstance(e).toggle(this)})),Ee(xn),Qt(xn);const kn=".bs.offcanvas",Ln=".data-api",Sn=`load${kn}${Ln}`,Dn="show",$n="showing",In="hiding",Nn=".offcanvas.show",Pn=`show${kn}`,Mn=`shown${kn}`,jn=`hide${kn}`,Fn=`hidePrevented${kn}`,Hn=`hidden${kn}`,Bn=`resize${kn}`,Wn=`click${kn}${Ln}`,zn=`keydown.dismiss${kn}`,Rn={backdrop:!0,keyboard:!0,scroll:!1},qn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Vn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Rn}static get DefaultType(){return qn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,Pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new hn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($n),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Dn),this._element.classList.remove($n),fe.trigger(this._element,Mn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,jn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(In),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Dn,In),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new hn).reset(),fe.trigger(this._element,Hn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Gi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Fn)}:null})}_initializeFocusTrap(){return new on({trapElement:this._element})}_addEventListeners(){fe.on(this._element,zn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Fn))}))}static jQueryInterface(t){return this.each((function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}fe.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Hn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Nn);i&&i!==e&&Vn.getInstance(i).hide(),Vn.getOrCreateInstance(e).toggle(this)})),fe.on(window,Sn,(()=>{for(const t of we.find(Nn))Vn.getOrCreateInstance(t).show()})),fe.on(window,Bn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Vn.getOrCreateInstance(t).hide()})),Ee(Vn),Qt(Vn);const Yn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Un={allowList:Yn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

"},Gn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Jn={entry:"(string|element|function|null)",selector:"(string|element)"};class Zn extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Un}static get DefaultType(){return Gn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Jn)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const ts=new Set(["sanitize","allowList","sanitizeFn"]),es="fade",is="show",ns=".modal",ss="hide.bs.modal",os="hover",rs="focus",as={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ls={allowList:Yn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},cs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class hs extends ve{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ls}static get DefaultType(){return cs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),fe.off(this._element.closest(ns),ss,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(is),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(is),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[rs]=!1,this._activeTrigger[os]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(es,is),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(es),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Zn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(es)}_isShown(){return this.tip&&this.tip.classList.contains(is)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=as[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Xt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===os?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===os?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?rs:os]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?rs:os]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(ns),ss,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=_e.getDataAttributes(this._element);for(const t of Object.keys(e))ts.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=hs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(hs);const ds={...hs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},us={...hs.DefaultType,content:"(null|string|element|function)"};class fs extends hs{static get Default(){return ds}static get DefaultType(){return us}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".bs.scrollspy",ms=`activate${ps}`,gs=`click${ps}`,_s=`load${ps}.data-api`,bs="active",vs="[href]",ys=".nav-link",ws=`${ys}, .nav-item > ${ys}, .list-group-item`,Es={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ts extends ve{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Es}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(fe.off(this._config.target,gs),fe.on(this._config.target,gs,vs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=we.find(vs,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(bs),this._activateParents(t),fe.trigger(this._element,ms,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(bs);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,ws))t.classList.add(bs)}_clearActiveClass(t){t.classList.remove(bs);const e=we.find(`${vs}.${bs}`,t);for(const t of e)t.classList.remove(bs)}static jQueryInterface(t){return this.each((function(){const e=Ts.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(window,_s,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ts.getOrCreateInstance(t)})),Qt(Ts);const Cs=".bs.tab",Os=`hide${Cs}`,xs=`hidden${Cs}`,ks=`show${Cs}`,Ls=`shown${Cs}`,Ss=`click${Cs}`,Ds=`keydown${Cs}`,$s=`load${Cs}`,Is="ArrowLeft",Ns="ArrowRight",Ps="ArrowUp",Ms="ArrowDown",js="Home",Fs="End",Hs="active",Bs="fade",Ws="show",zs=".dropdown-toggle",Rs=`:not(${zs})`,qs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Vs=`.nav-link${Rs}, .list-group-item${Rs}, [role="tab"]${Rs}, ${qs}`,Ys=`.${Hs}[data-bs-toggle="tab"], .${Hs}[data-bs-toggle="pill"], .${Hs}[data-bs-toggle="list"]`;class Ks extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ds,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?fe.trigger(e,Os,{relatedTarget:t}):null;fe.trigger(t,ks,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Hs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ls,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Bs)))}_deactivate(t,e){t&&(t.classList.remove(Hs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,xs,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Bs)))}_keydown(t){if(![Is,Ns,Ps,Ms,js,Fs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([js,Fs].includes(t.key))i=e[t.key===js?0:e.length-1];else{const n=[Ns,Ms].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return we.find(Vs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=we.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(zs,Hs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Hs)}_getInnerElement(t){return t.matches(Vs)?t:we.findOne(Vs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ss,qs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Ks.getOrCreateInstance(this).show()})),fe.on(window,$s,(()=>{for(const t of we.find(Ys))Ks.getOrCreateInstance(t)})),Qt(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Us=`mouseout${Qs}`,Gs=`focusin${Qs}`,Js=`focusout${Qs}`,Zs=`hide${Qs}`,to=`hidden${Qs}`,eo=`show${Qs}`,io=`shown${Qs}`,no="hide",so="show",oo="showing",ro={animation:"boolean",autohide:"boolean",delay:"number"},ao={animation:!0,autohide:!0,delay:5e3};class lo extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ao}static get DefaultType(){return ro}static get NAME(){return"toast"}show(){fe.trigger(this._element,eo).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(no),qt(this._element),this._element.classList.add(so,oo),this._queueCallback((()=>{this._element.classList.remove(oo),fe.trigger(this._element,io),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,Zs).defaultPrevented||(this._element.classList.add(oo),this._queueCallback((()=>{this._element.classList.add(no),this._element.classList.remove(oo,so),fe.trigger(this._element,to)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(so),super.dispose()}isShown(){return this._element.classList.contains(so)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){fe.on(this._element,Xs,(t=>this._onInteraction(t,!0))),fe.on(this._element,Us,(t=>this._onInteraction(t,!1))),fe.on(this._element,Gs,(t=>this._onInteraction(t,!0))),fe.on(this._element,Js,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=lo.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function co(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(lo),Qt(lo),co((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new hs(t,{delay:{show:500,hide:100}})}))})),co((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),co((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/docs/build/html/_static/scripts/bootstrap.js.LICENSE.txt b/docs/build/html/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 0000000..10f979d --- /dev/null +++ b/docs/build/html/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.2 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/docs/build/html/_static/scripts/bootstrap.js.map b/docs/build/html/_static/scripts/bootstrap.js.map new file mode 100644 index 0000000..64e212b --- /dev/null +++ b/docs/build/html/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' + '
' + '
' + '
',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' + '
' + '

' + '
' + '
',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both

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 C_L>a< literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/index.doctree b/docs/build/html/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f5b0768167a4cd64d706bb367afb87a75cb194e3 GIT binary patch literal 6273 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.doctree b/docs/build/html/.doctrees/modules/cv_analysis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cf097da2d283d70f32b841270ac363e520870d92 GIT binary patch literal 4123 zcmb7HOK&5`5vEomB~tHwAQB1=J~-$U ze{SETB$L@G55q)-!sKo%R6!Pt#O6=)S3b@EnIF5p=8ufZbRcrqfkr?w3bjb`_j9-B z)vb)oY4!c45rLH|X+Ebe^=R|`{FwT#Yo(1uYs=jXF5Y82;nAg$=3dH!b3PTh*N6JX zyJF`3@LHYkYdy|O|9UBhH#Vn3*Jq9UwC;M9*CV$P$wcI%Y|Pz&TdUtt@z@~Pj-X`k-U4&9}7I&yCfNyTC)4d=m7 zi&U9maB))K@WcpxAp&he)vsT#3h|;g% zKix;DUc~Pu{2t)$##I7MnZeu3vMOJ&`TH_hrA_|Kdw3UoY=2j((`$&x08aFQ zK^3PeOTzC5rGvz%z-rOP*^dN_?$qH~%EEFWNAA~GWoja)nHDS*wgUdY@{#-HRhmBc zLg#+}xvTbzI>NSaJ2DBPEEE$7TmWpxG^UUy!fnNT7K+qTezpO`^0X*5;CmXWaXxoF zl3|F-oV(r1L?hTrvUn`C2=lX!8x)0TR1#f6cYp$4AjU`iT{ zU(lEIKS3XyZP59MqB+HLO6H`_I+V`oLojO#f432pp*i!1TgO3yOh2Ebe8CXiZj zrCXN%0NRl11$d9?p}Wy0^txq<#xS-U9&b7tuerI#^Lh(RVEN?=YnM~g#ppG6(`ufW zsK_cywVG;S$}ZNm%JQfz?MkPp^vs{P=JtY2`yR=fj<{1x%FgJvjIb7P!U%BK^z?~V zi4|a3*ZUifGH_8d6!ZYWG_(1L_D8Ni6^YQ?Dh){VLyq2Rd7NUgt(5{)(KO{OcWc8O zWnPRD4CkIhVNfkI9bvT#W?{a|`dzrv^|W+}HZ_5nL|M_=eByTftN~hMvx(Ai{>1GW zw7ry}Irs_2z~G%yA|g>p*du9))tw&aRUcHXf8=(2%hr}f;zA&t*W7@3)GWL1P|PHv zXt~Wyt<-hhP>i!Fj@x_0b%H2DLkk{5(nrby;jiTVlL=zRP(3R2rR(~cot*sk#Gu^W z-Q`Utv{srCPr?Wk3mD*Tfz9218Tpo#Zeb;NM=LukCg}feuQa-Fp#Jpk^2W-S?!aFF zz%zvSM7U7yb|aolGfZm;cZl^hv>kUti$LiRY?1;tIK~elBiE}a4dIYsjRxwuJ)T*` z79w{|0&BZr7N@MiBcfUeB%r7S zWf#)O60iF##I)wAt?_cRt`pSU4lZL*8AZ{-=x(LP>gMcj`~PqV`n#uFB*t3{k?(CZ z)@FIO<_>+a0XE4LD2!w*ZT`oD2W~GFDMN{ryy`Er<0WGb-+f)UUy!w_d1E+)*qo-9 zmQ-@8^c3ZE%WD=6K$BS!BRv-B*n<4zrQf`cc<$**uwvdz7Uo~B&7*R;$LqP!r&8ES zaR%66NH&geSRX9_B^3JkW6K=@kTGj2v$+5>AVq<>;=o)cmd_Z;DMk1Jyc?17xZg1` zN0oh;p`;B0b)#69OBSJTm2;0f3W&oWq^~SCM7andzCO=V9O2&|#Vk{C00tjO(4&BX ziWIJUmOu+wQIoO9ZlriwiT;Ifo&z!%l0ua4B|IP@EY7$UKj10Kq$IStTNlZNe`&a_l1fm!Kq4l1iQ2Htay=EGCQRvva0nEQYlOnaWn-Ss7D z`SySq)+WuO=lK-R7RWcfu>Aj+zNK&IWBQ1`rmr&B_dE77g{%IZ@a>#Fp3~R!jPCp8 zH<+j%Vv_Ea4mHGHPxj5YMh}~wS@$qJNDLZk{shhCgV)zO9lU$~{?pz)MhES8&X6Ia zAXElWzk$Sgj!UNZ)MV+Eg0X+C9sx0TeS`}^S@hhzY&@mNI-oD0>PE5b&*zhtprpIUr$eaSvrg|<0r|JJIlY6rtO2r$571}H~+ z3{(^WD7XXq-{v1G`BUWZasFo%vmdJj!}HVtzvY1q4=#zf8*u@_?dm}Q$WJ}`2BD|w Miq-rul8sNl19|CAXaE2J literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.figure_detection.doctree b/docs/build/html/.doctrees/modules/cv_analysis.figure_detection.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c0b2745b932389ecb2189ce40cdd8be24ba9d8d4 GIT binary patch literal 3706 zcmb7HTW=dh6i%DiiJinr3ayaZKvB7*qK+O zMFojVBh4GbKjGK$#5X&;>kCjyBul$z&zw1z?|kRvhtBVEuu=WF16^`a%ui{W7BXep zyPZ@fHfM$LzxlgA`tSXT>nZwJOREy*-3BxgF0xdy!awqE5Y&yx^l5#5TeHLnS+vJ_ zhj;n*BY(nsu49DB*wQEWR&xH3(1Kx*m!>AdZZ1JZ@O+B+1PDmqF{b(C)D++F-lCVK}JFbHbtsK zwA)EWwT2MSor31^X(zSi;$;Gl6`KYf>$VM@g-@Oz@SA*(-{PD6*nKWb+PwZ{qhhes@D~$d3|LNGEQqq(XW3M!ff<+t0h#yE{>B_*^aC9UD(Ae}@kj zxft_Tk#W8op|-%vVIy$;uk56bKBC~pil{CyEPfKR8!gg*jWak9it%w&=l77YK3wPl z*fKArEz-XyZ3C5*iBW7By#J9Ae_4NX3wCRsEY27WsRv)(NmTpkAFm}T4yEm4*Iu>l$Qrobh zHrCz*{eSQ7mI`Upv5gO#OGrlVujXVq0WI0_d+ueUXrVJ2>O@K4Bm_qma$4g9t*=s zGZ1iJeW0EYW49NWT^W+GbB1(Yb$w2=_O;`V*jylsh8n9IrH<>QY+`4)Zt$3@0$GHH zVl;=Ohms{MgcSS}1#(7Mk;oKU-u0}R4nG)bf#+MR9|==RD#B@zW@rk)0I?;;yMvhd zB`clEig(9rU)D_UKinW1T{zGjy|wyb?W8*l0RVWKBR?4e@@_w)#mr*NBi$+9uYxGt zONu2@rC_)cu)#H9G>u(1kp)^Qq(h_)8hF}%%+me^MIy9HpiG|Wcg$Tk;IU5p+&^&0ZB2`Cs_!j_Hw)F6ZG63 zg3;)Vs_9^Kzg8m+ow^(037236s2YkWXr|UtpasZmdupH$v zD8~-u!#Cf35BVIZX|iTMNEYVbYRsc^X~63lQ>TKNX>|wKV8l(H;j*5g6SPnoCdQ6C z1|W0Nc4iv@(O^l2NpPqy3Pb0Fiy6=G19-PG8F0U+bBZqe&Z4C?67^E`9$!f&6B;L# zJ5D%-KPY@`He|U#N!{UPcXsIHjZmec32uvh}GG~*o0;1m9_ zb^FVBtTMEp2%tKo7+H&wKs$|IEXA@U>Y+fuZ$6P(3-L{fA(LZ!SR0*r~?1lXka>C h*mC2Fc()Z-u-vWJI<&zoAhMqZ`mUKSEGTwz`WJ<@wblRt literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.figure_detection.figure_detection.doctree b/docs/build/html/.doctrees/modules/cv_analysis.figure_detection.figure_detection.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c17fd0c192ee91342bdd5f00607cebd78dfd5b7c GIT binary patch literal 7556 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 ZjQuDJIDBG6VQoF2SYCuZDp;~X@4s9OS?~Y= literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.figure_detection.text.doctree b/docs/build/html/.doctrees/modules/cv_analysis.figure_detection.text.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ae8cc4520b08a3e151c2a4b708a9926b7b341ab6 GIT binary patch literal 11393 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.layout_parsing.doctree b/docs/build/html/.doctrees/modules/cv_analysis.layout_parsing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..587a9ffa6fe231c370d7e26c6f0aaa8c9c7ab6e0 GIT binary patch literal 2572 zcmZ`*OK%%D5cVUIEL)NvNs0oA+Xg|J292a5=%MJfN25LzMbSe7g5pvlVJ^8PxsG%Q z&>jNB0B>RcZ$IwKwtyNiyfd8ld^6*}d;jhp?o>bF*cC$R^^9hjHW_y@9At)-IoCdZ zj<5cSAL4gmXz6=rO3Qc*JCI;Ps?2g7-^DOV;$A8@YxD<>GcS$q)J0G9#o%2O!_f26 zD}LuCJZIN$3Ds0>oOClqH>UJ&NkOfXdi70ivJ&!*_JiN~Iz^R~cD9vvwv|4{I`}?} zrEJ7$7?LhGu^;+PN|)h*lA6cMazVo(_1?-w=~0T5`o7FuN^`&zbq-8?_cYDxuY;^C zZixkDSC%i6Oc@5AuF_K!$Kr_?iKk*;oQFT>!sL7|9i?n;d12g~T~FKmr;gie$@m;$ zx_KSmyskl#+fKR7cxD~a`|4s335c%|wRnaopWQWF7k1jzb=uUGisxv{i(2^qthY^| z;w6M%Avf{8I7CkSbxz{-w(HhvtI$4)fIBdw$Do|r@7)eM-uLz}w znC&Kpvn9-E4FtsgRyp zf6FQyFEc~dc|y|(Ut>pba#yp02=nAxI$7iOm}J-}3zZUSq8zkyf|(m38HdTJh7Lx@ zjTl)N&AXwq-tXZq0w&n#bhQgx4!>XOjD6tREc zs}e%{sx06l9nk75Hap-3=rK&{B{0w|g|oCJT)Eg1lX=3fGPIt=bj7YBAd@e6hVk7X z0>Qb5kH-vBSA^$ODuPp=mTndGX>+WBRkf@a+D+K!`Z`_1a8R!j%r1~9btW+zo_K0k z9IFXu;}k&wSswoYV4Y{__I<#ryT`5XBiOLE?1+Bar#P+P4-&Kf7H`Ddg<)d&O@RnM zMDgaviD&pb7b6$OcY9T7kC{ZrlY3aKIcX$YxjM|doLUaSqqq6OsIL8$=%X!WCq2Ap zaoBpTl+Nzi$7;1cVpbk++iG5L;jl26DbqT@IblXA6c#z)UJQO|_@9yd$M_q-pRP71 q_?N?>-?hVTZ`@-ab?mBTM^ZCYW(gvz)UCrTt+r+hq~l#KX8!^3w+RFQ literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.locations.doctree b/docs/build/html/.doctrees/modules/cv_analysis.locations.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1b6183549eb8af29f2f38c7c0e1b75992d332278 GIT binary patch literal 3207 zcmcguTWcIQ6!vY`Uf-P?h1ltalE$Ig-9Gf8q@ks>Z>9@rL!Vj(?TmIMJTsa~8fOg+ zG!KCo^cM9u^>6h%qnYvAIHi5*!ouk2NIIAAeCPbp`SbVfrRwMQOd(`GAF?FLRl<#T z8;Od`jOW(B_fOvV*Z$b`G<#)KsblWl5;S5V(?s*!|LWZ?sau(vVSRqx@YqU~x5q_C zbjA9w{#f)}$4Z;>g)Mg!pZyZCoTcYRnqjJ9Mu$y5Q%MO;I*4;?FZrAdBK4(zP=D)# z#odCzKI_GS>qV_YV%2qPKgMn?l{xq0a>CpuvsTMVY2iQlyDAeyzOBb8GX_F@cXF16 zuZ^TEE*BFPpK3lOozksaHlr;s_QZX$Ee^%1IC4LYgv$6x8ph(0=7ln&_-xSlJTP3J z$(WB|rWpnEM!|d1yTRF^Ht_7h$x1m9ORgjHgwGd38lo*eh9}}7qW1~@kMMtt{}b{G zfzh(^<=CwiOlpKRJor`r#s|GS4Euwdw?%hsJuAg$VzA&g|95U19WS~$Y9TNz&Yw|C zU~E3?tLX=96AzF>K%|G1vzcavScruieb1-Jv+2hGm1Vi@7t9LN*E|K#&UoLdKI?0x z!p1NF?%sbtS0fMpe;d+1t_))z%man%8*wDQMkbe=u$2?u9yk`y-Qglo+QMMaE)hk`Y-t*$j_V|RQqJ()?klEqL=hUA zvka0R(h+lViR_a(Vixf{RtdDc>y>so_;O$*z7MZ%MqF#9Bf;_{<=}@dnHpQ~_Cn+r zZs}CFfI_bAT)RTNal7HtO9PsthgUbQopk%;0Dxx%;*-K5?{-p_&q_Aq2zP?@3Yw9- zt$D0;5+%F)^?IIE20*Uh-xK}fTBj1 zq6_ybNriMu{iUcdyi8Oy&j?NXd=94P(c;MpBC(Cmq>%xydr^YEFiFXg+RF8&PEd2( zaK@lAs-nZCJGELgm1)J`?jC*N5pZfQk*U$!9=eDl=*Q z5BrbZZo!KPCBjjnaTTy_l1vzEr@C+-32O`UY&3${fRwFJ`B3Q@%IPj?Rt7*bvOGh2 zEYh(7`QXv#Um%{ldKzE5o+Ovof7)D+%4LMtQ?7@S+iCR%*kB}Vmg2FVWfPQ8Vue51 za7O@S7PXbxIuMzH5OU%6&3SIwJQ8vyQv3nlwNw%Aw@t=SWxtguX@fxBuGV205y{q} zJ&FZdN{qyZVndXx5aRS{S>OqpeX4<`=70;JN5wLq0s}QE+#;4R<>Z>0%m}-wVxbag z7CH5ROg7;O%J&==2+l3uxEn+3G~yYPX@n__NVl^3pq{gU)pQyN?ZU0{{ETKAw-KlW zwF@L-LXfBp8(F4j9Mps<-~dJeSr)S!=sckb<~6A9iZo0)5aYIKyXX?1VnBj?orK|A zyc92t>yf~o7qIZP7cVc2ct~T&3(P{#(WAS;fR@Oc(Xj1#;yG)2TGO*I;288f|Bjl; zUl^zUx4B}mEthU*5o?wAJFx^}DSU`XkPxLbdLhhd>t#_oFpv>rv}>uisVgphJW3VpS5Ip&iC5O#uw}fPT0BT`hl)L@m4FYAh#v+I4u)`_>9oDnGiMCEJnjeIT`*9XxQ}i literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.redaction_detection.doctree b/docs/build/html/.doctrees/modules/cv_analysis.redaction_detection.doctree new file mode 100644 index 0000000000000000000000000000000000000000..94771ec8b1c2e591223163d0c0b771dfc88eb341 GIT binary patch literal 2597 zcmaJ@OK%%D5O(ZHvTRwl^C*fYZW|PNp|Mm1Jruq6Xw-+I=qUj~k(5Z7OKwT7BOd~^ zhX66aTiE~GkGre2tOhk8m>kY~zM0v-djEX2w^jeeLtjc|mJ`akv0V5Rce!O%Axuc0 z(#yZo`}86X9ew9*<(Nou3mi-;&7CmmZHnW}9+dWzR({|G3(A^KT=ryN4&Ej?jJ=?O z7Hco@1-pDhsG<7GD?f39(^~iq;UYA8zAY@TAk?b3`@2|X*Rtf+XC$}&EBPTcVf0H1 zr$ds*aY(u-p2W9PX$vt`o>De-qO^X>E>BmPIQ7C^Dki3I z(@z`srcEL;-)G{!347u^V*L7S8&Sw_;JSPQSD&qG@A7=wrTMf?GnL<=R8Jd;|FyF! z43*Cz@e-lR@8ups+-X9TuQr`nsa^?miI=b9gW#y~nr7&b(%FR*zDay9*g$nU+lqTD z9>H;~vb{TT%qo}5O1dJBR+Ofgao39wlvx1W#~oVd&YB<$PqF_8)fKAP!M$&*P*x$G z%fs_HTnHl^4b~-GI0YO6ElOPWowWh3in&^*cxRg8e&Ygx-3u`6wb#mN+zx_eBm*PA z!j&F;c2_Chn?sGUL99J~j0d@kOjVHO+`1xtjAIWpmW0_N_oj!!M-4@2QB%k}6(m`K z6ZTqx7Om%Tlu_ma(c)4do!fCwQr%s9@mMSsvKVNn{EDd;dtA(_1ppEAf95r$a~t`vt=n4kW1>J`q9Z$A>@oOMJ}!?kdzKz5ad6c3xsuW9Mk zT2egOc-c@PNgOvyZyZ>OKED01AsLTy005qs$d5)qDIREQ78P9xq?_ZujZqixJHf2u z=(7^Aff)tNoX0-1W{wz<4#ih!ko`EORj}lS6t@+ycEGEmBpn`+)taCHMTa4n6&}`< z8tJ+8H>A>wid(WQGMbLW5+g&9b;%kcERaj(RfE?a_puXDr{;QgCm!c!18mF!DAcM@A^m#vJdR6I z610dwi?TXlqfD7m_@4VBeknsJ{m;`W$bM2@1!>L1x&_+lVdktI04E8eKzRbnu?za? z(;t3BKF4m(Hq>XzjrwOR_2^uh@p>WLM2Rr3ZD1NqWhgX^4FjE_g?NzZY&V_&kOk>F zvkQRuG9%$R$-512y5vw3K2D7ht9e2tsyl!gz^qqfD&>aP4X>w^tq z$348Iak#Qt3*Eb=AEVWUgkE{LsjGd#hQq*Mw#wrG>x5aYkyylleKGi@rGG;3AJT6C uKfY(sM)(5psCQ$qn;W;t`yIJ1*}gJNS3E;xk*l@G^Jr_QKwjR}Z1OMaHxje} literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.server.doctree b/docs/build/html/.doctrees/modules/cv_analysis.server.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eaed3a2eb6e8682559319b57164c53012e8b264f GIT binary patch literal 3483 zcma)9TWcIQ6n0|o+Pn7pmJ4khrwJjAL$lsK^r567Q2J=Pz0#)!p`FpLgl9%mN#m>u zg_MvIgB}V||3`mapZjSvGkZzW*03;h=IH2LzVn^q7p*`4=&h80c1P!2WYc3B$C-?o zc6K9{QIWFDxHs;>Z|+xjWIKvJ)3Q(zb9Mz95f@3USmvHOyY1DDNc3@aeqFQ32$?m< zd5gFC`crqrJGNznN!Z*cdk~%dOlU@vb1n3-X6lTo+c}L+>4Z6d45!w9WK-{sS6+Fq z@+%j-ZRZre8OQf*hcv%PA(TCzG7P z{2us_kQF7$K#uHMPK9#zM!4;Z+i&0I?1$lF{~h0WduSXj_$RzSi+0FwA*XyZz-CtW z-CAI~KNO=XzEIrj3!c5?a7>Y$LPHa+pA7Df{m<5M@+HUovhey*=ky5$vJepXyIA;ecFEH zhh@69kiPHG2@5&4J5`4I&lJsbrW~Dzl0W~=V%kx7)|jweJ*zXVfw&~CVCijjVXNwx zx`Z=hNBpt9vD`FF^=pz~jeTe>w@gDNv~Gj?zSTL%prIDypAWX-4gSzxHHv0Bp}r<0 zS8}454!qGa($FL%zS1e{Q26^U+3l!Mo|Q<$L0h#XaFN~6%ovePK*4(rr;e4(3 z7AI%`zyPsD#@U^a`8g}C(u%W(OJ9~u@W1SKFgkOfK6-QU!_rB+>jMDrG)I0C1mtWl zq1mLsm_)i`yk7<>*ei-fQpE%e0@&ah&-X*yj$}4Qj7W!wYc%k--KK?+WG1qg1+dnO zi!>(<9+A~jAOJ;$N$m~pl#;R=eCcPRT(csUWSV+3?XoE*9wYN7ONc~kMq&=FcF_S0d*9s-alX*#nBfM{?d1MBbV^UTmG;bOuQ`~cpyM0(tB>6D_&ekst> z8i~46zK2(m$cTo4WDg@w;SUNQnhjYlQ;5^2MUE@{{#Q<#iUTl~AQ9OZ7^p~L-?Ib; z!jhUuJ$4gGLnr#3?9>4=7-2Em_Z%K@#tiPb7D4Nju#}2~U{m#^TY9}$?V7-9G7f}x zVOLpp=65^05vT;c3nXG$66g&>3{?{bYQjRa2d986gZ&kBjxp@1-0m+(!?p)8tc{zO zw&znUijc2+VR$~`FZm1poKFke@ltc1!%e@Ay}aPhFA9FgKfl1JdyEaG9Xx3mz229a zDas!=qq81fSo$=U3-{VjmA|oH^8dGAY8B1zlY_8l4+zQ$HYGsxBUH^3TsFBa$M4z( zu~}WJ$22yqDSuMf-aPioZ1f@l1p9O%LqXyxrq&B-pO*wZ6a!dIM>1*PT&iAO5;oeM z1&f{f*7DH)f_;n%WgL3{+One;{KTWL8+)p*Sj{gZ#pw7S+^1Xa literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.server.pipeline.doctree b/docs/build/html/.doctrees/modules/cv_analysis.server.pipeline.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3369c16dbfa8c413f7d210df0f851cc9e581ee2b GIT binary patch literal 2575 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.annotate.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.annotate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b30e7a3ee3b30ae0ad427fd1edf414ca24a87147 GIT binary patch literal 15901 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.banner.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.banner.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ecb60f3dd174b530ff86c037856a5dbdc9dc7c84 GIT binary patch literal 4237 zcmcgv%WfpM71gU--Fmbh_81O4ng^GlzX=Zja0}y)4cTGdN&|-D|0hy z_HP@WTB*wUcF_@CvHh(-6@AyS(&l{WlY5e0{V8E3%WsS{qiAWu%986Rh01Cu(_U=d zdcm*BC)%<0{vF@@=y$hb@X~s59cHbTliC6Wih5IK zh9cZfb7l;L_}wX45r6fvx>_tIEWOlxN;E^2%~+^{kELNO z9cx}GGfuCDZRA74^_5Kd7;c(zbZ;C1Aia0TJJJThJv!g0Ct}TYWSQ~nC2S+?;xU2| zPl4g5`2P(5pX2|G0s}T$hHy^ZR>hD}X~GQ3wqbT6!DwfL17F5UQDgutGM_*>0a)3A7GtzCw%sb&)?a6{BqLVGA*nd%Dg);FK2)o$b$~v(f1? zea9ie$1%Z2)y*@aJ4jg0o~Y@)*SK_5kIvTv+4}*^yGZt0*jwNhf(1_MeK_?9rwCGy zj(8g%@lsq87{vk%ks}GCU&p~O)E(e#xy~grbm^)$8a}Mt&NBL~^*_IDoi8?>GfHNZ zD0u7L4*9GmFHv{>>Q#1|66!v_k76ikfd@ze*PGUP9s(Ax+)iRunjjEsyzt`H-#uz5 zi6S`51Sd4U7AFw}`2BkVINVaCe5y*j+)w^z@{_@TwuV~6^<)Wv5dB7V1BOoPGWMH0 zp=YXKvh?C#ZX4Lxn+o;#-{@|*)cK-R!&o$L-FB(kpMzFBqyl;4Z{1$=v0WcQqlwDQ zl@3bP%33|LM28t}EjaFPDYCBu|EMvX#9Up(bt;~_$ID$Iq{}d-%dojj-WGCFeRq*= zTPJI4J)OG)L^mV%#TT(_tX7F-9?n~&_`-c?H7iZdsH-QHRx{Lu*djYtS(f|rHMi61 z@C?hE&RchbwAR#slX<({YbCMmx?Y0}=8mKJATiZ}FqwDVZ&+TVLA4p=x~jHSZT*Ef zxN!X$$C$vZ(jJS9p>bPQR9Nh4r7T?KQ+e&(`q-oXh504HxtCDbX_mFlvDznIQwyiB zaHSLP&mB);rc{*G!k-7c?|y z1tfi3N6INA@=un)Ea7FUGGd|Y*LFJm%`g;?hpQhGuC>yMU}ctb%mZC=6?MfOMC6yO zbb=M{PVRiUV?zAL4WiM71MSv_s~_&{bcYlGh-U=w$wNch&sjOE*^C433=L`nQ>gnu z^Hk|9$#}&v1C=QaH5aanbey6<0uGtAY(SkGu-d9*A#xiMT-(p;qDtm`1gb$GQM)w8 zQ!;oEB!TI4^$SsDc%7*PjT2gj{2Id@PnLHEiljEVl14_p9wZq?!AVYmG+u7Ed4inV zLofz4BP1P+?l)@5ROVq~b05(!9D?>75)-W*)-v4pF2;4-Q(T^}yCX_A(59S$g}E%G z^k9pV9zEeD)6{@lut%k`oPq;QQ8=b5Vd}{pHCYgMbH!pN z((~iegEGa0XGq^0cpx~pIO9PIt;>X?i{%NXMk>0&>!ap@1+M1PSkP|WCNHn(8RL4f zlpuG(M07NX+^~sddd5+jF!dk7DKN{TwV<45^l16cyWjSkEU`P(DF^Dxq^w4jbOXnFn(n#s#A z*VoqYh`RhgPM!3!T1U?e4>*i7=i)`}_Lqqlpx93(=u21vo+zRE(&|ObmnBgTHvys+ z6P3@o98^ENBb;mZS1k71Q^Tg?75nHD+Il4ZgS)nxFKE}OeyOUdwxKtsD$l_Z#DM0v z{kul~18(wr|1~lhQy^*rC}BX}c;LJUu84Q%;=sRMS*CfN5#MJ-y`7BebW_sekU07; D9jbYT literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.connect_rects.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.connect_rects.doctree new file mode 100644 index 0000000000000000000000000000000000000000..aec82663031e466172c2e376003b7f26917a2d97 GIT binary patch literal 18126 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.display.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.display.doctree new file mode 100644 index 0000000000000000000000000000000000000000..39799ab6588c2965fe653a52c32c4c943815c363 GIT binary patch literal 9281 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 IM%?uB|B#+SaR2}S literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.draw.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.draw.doctree new file mode 100644 index 0000000000000000000000000000000000000000..91ba7487ed0d8f4806ca2018c0a0b7a25d696993 GIT binary patch literal 7895 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.image_extraction.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.image_extraction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..63d67adfbd3fa65b25c6200f564de285b3ba0579 GIT binary patch literal 62978 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.open_pdf.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.open_pdf.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7739e3dc343dc3519689bb529198035e1a29f9d3 GIT binary patch literal 5388 zcmcgw&2Jn@6}My0*yE3JoZUn~;>Fq3vSV##CP+xELiWT3$yy_=BD6xgYSnbtOqJc; z)#s@$YP7)w2j1>1AhTb7Z&vTF*neg(ON5N40~Q3a3V2qS%|Q8i#A982T^xN`{H*AiPRd?nDo=f0m=$pN zLWV)gDSdn{(*MJBU> zlcW+Jf9@s0_%KpI4t_e0)9cUpl+>a_E3Z1V(meFCaN4&M23>U__D#pDjT398UD|YF z)_ zJV-N`_s;RHd?Z#(OU418Hhk>dFTM?P#6vjpJ^a0ozYp+tM5e(zsk8?5%zDCPT9|j; ztv@(iersVKI;Q>&JfeM~3zmxyMStdn6Y&mwEd~x=6+Yfj!FDF&2{2*4OE4kxdq;;o z8JAeOLE$3{oTW~z#1%K`ykgdoCH^(<_Tcy~?Rc3)*ma)Hq5Q*2cn|tMIvh(x%uCpW zfBg8-A%ImbPE^c~EZRxlj+IB5NieFiQMAncq(CzKz+Y&+)m|2{R6oxZwYV#a(qEk# z{C|j2cfNRCi&LlGuZ(F>W{&&Ua-)_+>7Q`hA8R-)iO0Wh5c`*F!KY}D*uT|c*Qp>^ zio3;3=l|Rw{2z0|U*me*`NpolnbCYRLiD9aP(phtYYCPpCN|PPhlyn|u4+$1;xVJy z05cC@UzjbbXlitdajuvz_U&>kGv8X?h%hDDUV(0EHph7w+A1TSn=MZ(pOn*Car*A+ z%8GdYRe{NjsIGo)RmHe>WIM>G;=m~j<$p|0w+ZUHqpxD!oK;^tOaSkvM|5i`tCGDK zgPysST%ebY^Vp5E3oZy$#AIBYejl>T2Hd1C5?-8sL`&NMn(J8g-B5OAHeyx%>{jGH z4PY0=mDwpbtMxuON(-}^X)jh4t>Pm|bYI4`MpJaL{>0*wM$ZG+-e-~SiKpgabMCYq zwoiWVqeb+~`0{F0B<5vvQ#GTrYM!KuvIY09x%?21++@1E2h@YOcx2wzDT}j^(F?*$ zQZ>OS;Rf-RR+@#y@rv21czA$iPWP>vuAiqg=6m%}zf)1%aBntC@8FHIUq4#LsRd9_ znD$SoW@dGjH*J;cB-h1>*gG+u36IM*fJMMiJ2i`v;>2vHN@0A%+%KnvSsfM_o9tVO zvhWNHTjerOL#%cQ=k!pZU8vG>F*J9^5EG*&H#RTLEC)Jfc)p70 ziIzd&eMjLTw-oP%)WWMCE4Z&bP`+MH%nrRe&;>$%&f(5mW=k-1jB?pB`+O?lMU5FY zn^9W9+zl)@Y=>@0{lol^RBo!prY)#(TG8w-ccZL$H_%LH5$ z+EI2lWbq`&oDPo%7;SIi(QDpHxv$c|3pny6z%}%CIx%fz2vol=%eC@m zBy&pwZo5GqC0-3lIMxy*%2|rnFbUkV6bp8W{*07lJP(wIksDmM`4q26?ln(Zl=v6} zWF~2Hfh;e;n{yPBA*GfZRjMHEc3@0~(qZ!s?7JnKH}_u1Q2=QH zLcWc!0|=E{9hXq{wF zhC`4u4Eb89c%ae=GU_gIS_Q!AX&xaw+P*Y+(trQ)_u$WNI`$XD6J;j;JC%4OFC)mF z@pK@$9@{%m5QaiWAuj7^HbNE!S`^2d<^Y(CygE5+13dTGxiYu2i&(R%C*(wg_yc~| zLq*Wvv4fUZPFk0k0%n7k7b>5Xu08MtTD6bByL^L}tqZ|@mM3Tn^o_-SI4R4(70{!6 z8IOU1vM$`ALXqX81vVKGc08mgVYG4EU;l>Y3`qzl*%i>dHHfBZC2tXtQnB9eSQJf=h c*JO*wZ5jJv9uWQ~1jVg@>ULS;+#EUhFOlaW$p8QV literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.postprocessing.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.postprocessing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2cc87d43809c7d595c2cf958d23b0009e025a392 GIT binary patch literal 19123 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.preprocessing.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.preprocessing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a9748cba7a3231ba97acfcf6a86f90d1988ca6a3 GIT binary patch literal 5894 zcmc&&TaO$^72dTyvpeg(I`IOsH*thw&q8J%UtJir4tAtK)4f&1kTL`Zqy7XW$SJ5}91J+qft;31aA+kN^} z)j40C^PM{NX5)MR-d-^O)JB#FKRW6%&x>M@XId?Lv73iHlKO4E`<8w~w^b`;53@K= zU9QyvG+f~aUdkhVU#oRemwu3Si}6btccmXk)o{@eO|f)ew?#`eq%Q+r`=su;hhKGA z#De3@&$@P|B;`pOyFAPMXm~4(y&Pj`3e0fjb$&#q(ZGcZ4Sb}n7tMshW~s%NYB`mY z;<9QMzU`|kfgf?bpZA$sVN#}kKbOFSFu3e{8Tq^91}w`U#B(EJp?zBR@?`STXYN7D z2c(m$CCP^LNsA3}L#&FM;nOdLc!GgMiRB}(C-o}Qk(-$Z65fd^`r&3{aGJTsK zcTLRGpj9)7a+Ct8%uCTw^PKA1wAsFZVv#1;j<47lwcEj_@NcWDFuj8WHI}F~GR$Oz zdFNB1)H(`-yII1BHkL7jf|_gE^eSCU{fAESiLA8K`G*Ua6}R5pAowXo6jQ9(K!wods^0mN|);7>NS{D4YN!g37jQ z#x~FxqCoOA@R8}YU_iDG3!W_FtkOMG&+H(@qciJsZMtn@0?a+}^E+qzsTL#6>VZHG zeH#va3%oiNO?9Qx^G8s8Yo4O|NSFuGcZjZ?%168ckTEUyjg$EC$lRKM@ZeYt$YR*(g|@ zgjIXjWX5Y^$8I$g;!an zv=POntkk2KXt9h-iQKk({Hh5-DycjFPvsD=sFx=+g1s7Yhovby{%@o|2;cUefI-o{_2ET z+wigoL=|q=PX)OI>x{1xlKj_s2z^a_{ZxdA`U`}_KMU%Av$Cj0%8ySIs?&rg=zFxe zxUg`xapL=@@%LyIgXS?aQ4T14w0r?w@q>!1XB@6E)Vr3e#Sg`grs4YWd{!1e#cB6v z;(hV+(Tn8p`;WEwh5FE`n_A;vgF1HM?}QNe_ni{cIcMjRZp}E*ZLxbbXXeta`0eO3 zWa;llpQS&)w}1XH7JnRzKaIto$Ko$z@z=5Vn?ddb15TD|i+k#Jy`wPaB|5lGI;&1m z-gwyr(1>$;i?SDEWxGHwuK=pcHkiZK<(#T^ zQoQDAfVVZO^wbQ}SD4bU^-NtGV45hFy!P>lTBF7}%0uU95T~JjqSomon>cP9Qaheu z!W&k?18yYFLthG~Y)G+QF`(#B_th$OmZ@|Ce#immCAA`0P`x(P7C-WVqC_i_l}ZiO z@OVETV!8E)ER9fap^kE*h2<#Nz@sbfx6H>W>3JWb=& z5iIfoj+U}XrsBY*HZ1bBSsG>*t#)R<%uF#lM24t!JMYAXa`esV4>N<+Ci#Ha%LE__ zOpCG>uxOZ5`G-GfSuWv%Lp_ypH%>jr;|WJ69l6vR@2e(GC<7cGfr#&w0fEEcI?HA3 zOhoFEk8oS_@-T6#kOZ(s;Nv)#;^u=U+%OUo?6mt6QIhf8iygF5(AwljxGCUHeWZyJ zS2~A&=G&0na6H^A^aFCFuyUzP6{OuNoXK#EGI@td*9tXf;0LDfSKIW2MbNOB+(fg7 z**t9dRonz&tL*FEqS`Vi@PJ1{1Y+QazSOU7-cjobPaI?kN0#Cm2aBwdq|abGrH1;j zkTS{c_IeO!=-Z@-qi&oIkx|!4(-;6vNAeKcBTWa%lg{%meiC@DrvrCpdXh}0zgNKIl>=` z06)aIAXN3TSs+f%eVC#@l=Y$_7G=KFAXsk?B6o zT#^+uFh=ymt{)8$0|hT!BcjOi{*0Qr^1xcmCL`Tt9cYA1*ykQH_!t%l&e0&L>n^ko z9FBv1;NVt)c-L6HRovYnR)c}%w6VI(qeHqAQ_Gf3kiLjS9P)kShIAxLhaBvLyQ3`_ zg~*bqHDGj)ZouBq>e`f)8XqIZY=i2hNtB8UHmEO=&_0h|L5hz)hyOCwBC+WKpkzLb zGw~d5vCMZg0rzk@*tEt}yneDnx@V3P^~MudWEl#feuCOE`W02(9d-PHolMOc6b04X z6XNW#hkKHD#e2D0tB0ilYR&Z#+=Mj1vl3#TQqS&4U1IgHPYC0%9|u*W8`Y<0gq3z{ zYQ|Q%su^@`YJL=wRBF(|_1U?KFR16>MmNrh`A|IFI0z6!@B!6v>E%NHHg@=tehqn! s#uiu1b|5VEZwn;ZQ$Y(1ldBILTrKmc^C+cC-@1E)`dwiFdB<*mylYkpU z{m!r!6Q$GDx);Z2#Q9{?Ysj;iTBl_$mc8ozZGVOObog}Qt5ek+QXs%IB82Nq(#eKxH6OF%PTlISf-CQ!fLG%vPe5cqFdY#}U!Ght%so(|Rc(5qdOzTOXNKVCJa}}z=mtGe&6KLn$yb#b_*mNR% zgU}uaBh_@>LX`Qt`V(K=uG->S5{kWK6nn9?ew;)MrZ-pTq7^5~iz!NiUt@d%mRj8+ z-FXOpAKj_MAry}c$m+vq)hzQj2y>#|`$ccB*^Ck|XS4j~Gq+uzz}$|{9Tj{%di$}t z+w|;}xaC#-<8x`3xudt=4pkCnewa^+5nW|}5cnCX{7T>!nsOo=&G9*D?T0ze%nZIg zgO||}KK?-0v$dJjtV&Qj%YLS(-HFexHR{I&9dKzaI2%}=-=(o{$Jo1+xsF)gC&z_7 z?~#InlO}(n9dj_rkGQOEQFC&eUWUuR+?&hud^gl;0gMtj@V$hRkh8e5;H4^$x||&DmnT3!#uq<*nPx>-3(zTQJWzEy|H?1D^`}8ob<>!!tGOE)qEN1mq+g>ZMHRY<;dI(;}=Z?ek2$YWB zC+WH`HQQ;`#WK4u+AN31*wgZxHMp$G8p51C{h=Q7B5F_9!^CfUb*p>uH4)Jd^C`t! zBjj(|5VMAk$Rxn>9j$e;+4Tj<+l*j{abE|+o<%J0ZTwR}AO1HDa_-;?*@*rPFKl*$ z@9=3{CF?B&A0=JB8!i4?s~%RvqBOn1=^vY0*C!9ChCm(HZq_~Y3CWxs|Bh@RAcp*VZ2hjvkwkj* zC;o}k?T)V#gS%6(7cvQ8SC5a4*~T5zQaHsypIx6DkyGqeQPdY;@+w^voDk*N^HKo( zp;07usZ=R-r|9@_%93qjw(_6b^h(_-du2+gRJJTD=YvOs4`nRf3gH%)*ex`TMD^EF zRA((RWbn3H3<|H`28Absj}@YTc-;eqF@8wo5)|+n(BgJI#8Z%!9^HNMj73FFoy(>u z*x;uX__VJ`nkYS&Vcx=Y$J$LgTccCMwPh#Q_;_0|a1a^8LBS+~8nqCJ zlc;SYIetO|#+iW|Zv!{l3illuxU+mJY>LNfi_8gfT^gReFd*OO1_|b^c%6DuIqTIs zeil5xEbg>gQ9G%`4dhhs=tT7RPJw~F*T%|9^m32DO5xevvisX`=q$4{IHY<$tvs$2 zC-dxkJJyZ-aB7J94Vq6p`WG1f9T zn7-_W^;jO(_Og*E3?-W>83c<&gU3VVEpcW9^Ve=NT!Q&FhW06#e{w@{2}VKbUoijS zhE+l^5{2OeBeRl1!33#b0!uJ6J4##31cvr0n8R);F2N`${R`%WZdfG*BT*PiFw-hc zERxKQwVSnQ=+qd^2{$D!qj^>TvN`F7;*yPm(!Xrp?uJ!DHWG#5WV0?a_d?mM8`TryHnGBTQykMt>3>e5j4V>i4K(voNlC#}o^M3J;+bPr9LX)v@M+*vwh z*o&ckrVQ7*p|~WbpkyRAL2E9WDtTcjT5!WEAuWl*fYNez=T|lGJQh~yDUa5&>|LYwpm~gK7)6gPq8-;qz!fl*e1?D&<&mz zC$u(*h4ggg0_a?>@?<<5|Gs{>)9C)O97Px|_hS%5j zi{&j96K1IyH60R0cFj3OKRB}evhy7&_;j}UHWtTkK0fzwe`p_@OQJd!otjnu#4UP( z*(@E-7$l|In+D?xKdKn6G0rQ#YvHh)j^!U1=?ZVkK(*A%?t&N6hR<&uf~zWOW|pcB zsQFU)6@}JG(Md-jb!FK8bjrGcSFS#TpwI6KAy+d6dfRsk-*Q3-ir+2B$+Ihe)>^l4-KoP@H8+R3)x%KueK&l&ILCVV zC|!K|{xSGW<|SgkFQLTi%DClM!~i5SPwJ~PD2+)!K@qJomi5XW!P zG~vw9a-ADWiQG^EA5c#2?(7W^rkw;DPt1OobYHwhGIOxU&{#eRlv&18{7~xgEQhJPLtrzv%Bc9DGxt6$Hovy&arXvcZc}9Q~aF}e<$fLp`c!n%lNNjf7t}) z6{x86$|Nr@=`U?qr1^(PTneR zIKt*ul`ytG>h+{uo2wp5$$tUSvPw);BK0!Y-=tyZ*~jUyDGwtu*VnJKqei6`R+9=9 zehgr^qQc5Nd%V0)^UcB=!jNw^N|Bv&o(K^nZCl0i%3LX{^sa*xwC)ycP+r-%i9b-< zrIU*7D_Wk-jmSRA^vF61Og>Wds%ZIq3V`#`dY`Pgbb*U;!29wYq$|!h8*YC$C9UXr z#O;&~TiD;yGzCua%3cbkvd+x&)oj{X+|4}^WN)IF)#`5O`FAHh&Xn|DFf^Zt7ifeo zW_V6?&*s&8^}4Dk{Zce$N*c^Ut6GvW4Tgw`NpQ1VdBYfn_L)~7azkg7s^_xJk0E-benwpt)vR)*=ag#%EO2P_-ll-B)?KVcHcNi>?Tk{ zgl%gX(qJy!V$x~VQM{V*K6+iy6rNtRkln~x_x2&XlN-@j$R;p(Wh-#d^ivZSrU3W{ zFM*IPB`*S`^|&;ficy3LifN|Bgo8&@S_Y5Nh7ar0J<|^LIg# z-DGI`xRWMloPH8R2Z+-j72PjNoc>aIB0eXv>Zc6x8*V7BIIW=cAE*Du4XZ?)mMEB@ zxlNpw(sFm-5~mB5+|0phplbLyeOWHZN}Jwb|Bcx*A=)xx5uL9n7-$7%ZI|#`D~kOk z0<#{9z^o_C`^s$s^YoMm%rkV@Wa2R5z`VBpQwz*%>lZXI1M{`@we`w~1M_txOY1>m z`@nodZbV;!nZV?gtyf?^k^;Cy0y9azS74@l@(EhoG+Im$yFI04@W5>Nz)sLK#eunp z3iSxgx_5D4&fJxOIc+jDop#dX49s_8=m3HF=SBC65}51di3lWC{RHNBx}mrNvx3rp zV1C36t3+UyD3~a@O<LlihBxPhs}Lz>M2H0y9ON^bM7^ zO9bZUEB2QN%z7vSvz{>TE4K;Ee@MX3vp=H4raX)&Fdq+_)p`fz2Lr_AflF*OjGh5` z)I}!-LGkGb$1hCZXfi)NXg*2;zdcx~&xx1nhk3Koi;8I}3LT+LgK_5HRcfo((zDUr zy}J9IbnGR>Z~8rF_O;u~OYyTPfF4jYr7}~UGV8aKqLb#ix-ty^Val|kjKCQ^{}n?) z+#lmzcv`{Kqmbu+-BA8qy!5wlqXBam(iDu2qAJkJBp`TVC3k(+q9O$h#h)R4?OlSx$SoOo%GrtZWYt*7GL zXz8n+%ypuCtDv#3pHIHo4aJonDJYrrXk1c>#1&_TmNRZBB@!bEd_bwVyKhO1jB{nr zkui(x-^{`O0*%8bMpoU9i545|L9i^77n#r@(ju#FM-Q{IB8@MyqHildRFD;!lJA4H z2;Us@@ChjqujZCtt+le?j*;v8opQCGE~&PFs)@g)7zxDQs|M$-F+Yqdh%^zHL6bIM ze)c3mJI_8whfR4Xo1ZBnhWXIO?IAv5(^emhE0d?aw9i)>Hk_Whnhb-1BS*R>jkk;T zjPq@jL~l)d_Sk*2B4rzm4t>F?L+qk0a8_w_!yZ*iPPEbLDS)4b!{K;!U^^Kh|F(nIAB z0U+Z%v&ttNsP#tI7M|rqHSS=;(?mwO;zvCcu1ilipzHbx0YA^iW^mY)hqA6qS$f&x z$Crmur;NAy*?zrM)EUA_S!@4`GnI3Obpc9by9JD>w-9Nq!#wHy#JeS_VJc{6@TXqa#} z`!k&_FQXBJmpMeZmh&=tD7=iGa6m7!Ou)~xDjhcEVMJc$L>O08B3disZEo(@+ZZrI zc%6GJ!I}w$_Yq%G!;9QOe?oTe*3@dZ#T)I$GHu44J*c#) z%(~KAI+mXsu{$$7Ep%%?M{a&-Mi(Sz*V+@Ol1qiHzWJK1f81rpXyMpRMmCS9{2kbT zK8B%vEJlh#pH&iiAwQds$Bwn;#OVzbl*3ovk&7XWf|ew;08D z;@gh$qnG;ol>2kW+b#PWvab{g?u^!x@iP`J-*wW$T!NEO3V3F%@fkgQ&I!nV62Ej- z@Cx}T&5_of?zQ;%V<&li@X@UH(6XO%(M>9Kc7V;m+=JDJgf?VT%zXDPd5v+)>`@{u zpV!1_96qnHN?|h5W`n(8HkaRILXXIEo|k&aMQgB??`Xu4?{t)S3YMmNeXm{rMnw-r zzN04`FyFZmv>@NPi4L3cFrs|t6)cXLWfGl!e^N&C50T+mzc-SY3ZFG^)kscA2CBz2ej>j zyM%2YqQfQ=hY{QMKn3e*VcbA*o65>BVBDtZdd6)DD{I@C0_c|z>r3X}N7J#Fh;0*J zFMw?uy4b6T#Jp|)3>q(nZ4>$%>`j=x(6({AhizwSUNy?F?H4Kmm9T9+6t=A=9MHD! zA>ilPy>!@=hY{KKE2Q@u{F8G1K0-^kTsm4?&sWM%=acXW2|+zViwhH;&nhXG3D50x z?5H21C50EjdJReJeMDW}dK+jQ-g>P^Xo>j-djb<@3|C4m{|HUptx&9Sgtar5F}_Rp@oTv35WI1| zui9zT2ECPZJKjCIg}yA^J;i6#R&Us!7?rqc!(n`Xfc8MFVe`DV(T+fIx~mbsHQY&B zouqpz*nf)8uKG>2?GY|&9(D#wyhaPt?ruj>0#yB#aIMS7m+(?kqCj7?z8@WSsmo5g zj;p=2KO=4NOLu|FByh$?cKpx^rokSnzIF2vzL)A+o1I2wjXp5neT46$-CkRjYSf_Z zm19hJwQTY0zG$gD5GFxId}<2B0G=A4_8mUO_t1X9*yE_~pY_4c9eh{dVLv2wImr+D zYazIZ&0IUNX`QV3%biusw~w|Yq|F;KukSU`G7E83eIkkQ3!C6s#cx(4+Ts!Ke>=&_ z!YdcVMwr)RZ&v(vJ8D+~uUW&_eIWrt6_uTQzvR3%%cPj4%a7#l{*BR7~IAR3^1aR3(8K~tCSt)m{Ivi(4NPq z_!PDnT)}>y;7C~03V|&<_j#Qps+cCeBZRu`t#ul$N~)4ztY{GRli10cCfqMtgtC+L zO;aoOJGH2Sy=T$u0Je;bVjpEbD2Y)cg_htuZD+$cq@B7j7rt^9Q^5=fQCLoEQ-Rs- z0WmT5L6o1?h1RHUm6fm#;;^~%VLAg4>~KrF{6aP~TMZ)Ljh(&I%ah~$AlVx%->T3Km$1^RU>NoRZ9&_CJDCQ*GDwnEe0*sM%`x^i#+Ry_i&1+O z7Ig*n6bPVaCGi^&PXckwpnc&*H@*z~+}B>I=BB3>GyRM8^e|qJRQ7(qy%_q*ihu!! zuoNVXI)Ke4-ZHGHmIU3CGyDj2vQbHmGbKQ6I(&{Fh}WBmw^j+l)u4|5(BFxAM5@0> zY$H}t`-nY)Ev(G8VwHMS^%QH5R0DkWz6$Y4djppR3(@=jP79ybrTx*xrsv8HoP+j6 z)v&n&9Z-JZ5IKstvz+S|Hb{5tktdCjb|}BU3zcas`!!hbIxq-)Y#n-zUr|M``zt736jpG?Qm?Kq9PdtD8#oH8`{cg;|lmOsBsK~lK@l4ooU{kHVd2Ct*SF&qpRd*chxAiC^sw%SQq~vp^-u1 literal 0 HcmV?d00001 diff --git a/docs/build/html/.doctrees/modules/cv_analysis.utils.test_metrics.doctree b/docs/build/html/.doctrees/modules/cv_analysis.utils.test_metrics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd91243e71cb0b52d79308b316a018855c275492 GIT binary patch literal 11848 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 + + + + + + + + + Keyword-Service — CV Analysis Service 2.5.1 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +