From 3ba6d6194a10c332c7ef128edcc134c0cabe6f58 Mon Sep 17 00:00:00 2001 From: Alan Lujan Date: Thu, 17 Oct 2024 14:18:32 -0400 Subject: [PATCH 01/11] first update --- .copier-answers.yml | 12 + .git_archival.txt | 3 + .gitattributes | 1 + .github/CONTRIBUTING.md | 14 +- .github/release.yml | 5 + .github/workflows/cd.yml | 10 +- .github/workflows/ci.yml | 16 +- .github/workflows/deploy.yml | 46 + .gitignore | 7 +- .pre-commit-config.yaml | 50 +- .readthedocs.yaml | 17 + README.md | 12 +- _toc.yml | 38 - .../example_ConsLaborPortfolioModel.ipynb | 7 +- .../example_ConsLaborSeparableModel.ipynb | 5 +- code/examples/example_ConsPensionModel.ipynb | 9 +- .../example_ConsPensionModel_baseline.ipynb | 12 +- .../example_ConsRetirementModel.ipynb | 2 +- .../example_GaussianProcessRegression.ipynb | 2 +- .../example_WarpedInterpolation.ipynb | 2 +- .../example_ConsLaborPortfolioModel.md | 103 +++ .../example_ConsLaborSeparableModel.md | 109 +++ code/markdown/example_ConsPensionModel.md | 160 ++++ .../example_ConsPensionModel_baseline.md | 246 ++++++ code/markdown/example_ConsRetirementModel.md | 243 +++++ .../example_GaussianProcessRegression.md | 129 +++ code/markdown/example_WarpedInterpolation.md | 314 +++++++ content/docs/index.md | 11 +- content/paper/1_intro.md | 13 +- content/paper/2_method.md | 331 +++---- content/paper/3_multdim.md | 45 +- content/paper/4_multinterp.md | 103 ++- content/paper/5_conditions.md | 45 +- content/paper/6_conclusion.md | 10 +- content/paper/7_appendix.md | 64 +- content/public/SequentialEGMn.pdf | Bin 731390 -> 27883 bytes content/references.bib | 9 + docs/conf.py | 64 ++ docs/index.md | 17 + myst.yml | 828 +----------------- noxfile.py | 107 +++ pyproject.toml | 157 ++++ src/sequentialegm/__init__.py | 11 + src/sequentialegm/_version.pyi | 4 + src/sequentialegm/py.typed | 0 tests/test_package.py | 9 + 46 files changed, 2262 insertions(+), 1140 deletions(-) create mode 100644 .copier-answers.yml create mode 100644 .git_archival.txt create mode 100644 .gitattributes create mode 100644 .github/release.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 .readthedocs.yaml delete mode 100644 _toc.yml create mode 100644 code/markdown/example_ConsLaborPortfolioModel.md create mode 100644 code/markdown/example_ConsLaborSeparableModel.md create mode 100644 code/markdown/example_ConsPensionModel.md create mode 100644 code/markdown/example_ConsPensionModel_baseline.md create mode 100644 code/markdown/example_ConsRetirementModel.md create mode 100644 code/markdown/example_GaussianProcessRegression.md create mode 100644 code/markdown/example_WarpedInterpolation.md create mode 100644 docs/conf.py create mode 100644 docs/index.md create mode 100644 noxfile.py create mode 100644 pyproject.toml create mode 100644 src/sequentialegm/__init__.py create mode 100644 src/sequentialegm/_version.pyi create mode 100644 src/sequentialegm/py.typed create mode 100644 tests/test_package.py diff --git a/.copier-answers.yml b/.copier-answers.yml new file mode 100644 index 00000000..4238a816 --- /dev/null +++ b/.copier-answers.yml @@ -0,0 +1,12 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: 2024.08.19 +_src_path: gh:scientific-python/cookie +backend: hatch +email: alujan@jhu.edu +full_name: Alan Lujan +license: MIT +org: alanlujan91 +project_name: SequentialEGM +project_short_description: A great package. +url: https://github.com/alanlujan91/SequentialEGM +vcs: true diff --git a/.git_archival.txt b/.git_archival.txt new file mode 100644 index 00000000..7c510094 --- /dev/null +++ b/.git_archival.txt @@ -0,0 +1,3 @@ +node: $Format:%H$ +node-date: $Format:%cI$ +describe-name: $Format:%(describe:tags=true,match=*[0-9]*)$ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..00a7b00c --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +.git_archival.txt export-subst diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f8f46d46..62f89d93 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -45,7 +45,7 @@ py -m venv .venv py -m install -v -e .[dev] ``` -# Post setup +# Pre-commit You should prepare pre-commit, which will help you by checking that commits pass required checks: @@ -87,15 +87,3 @@ You can see a preview with: ```bash nox -s docs -- --serve ``` - -# Pre-commit - -This project uses pre-commit for all style checking. While you can run it with -nox, this is such an important tool that it deserves to be installed on its own. -Install pre-commit and run: - -```bash -pre-commit run -a -``` - -to check all files. diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..9d1e0987 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,5 @@ +changelog: + exclude: + authors: + - dependabot + - pre-commit-ci diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 6ea4db96..efc7d061 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -15,6 +15,8 @@ concurrency: cancel-in-progress: true env: + # Many color libraries just need this to be set to any value, but at least + # one distinguishes color depth, where "3" -> "256-bit color". FORCE_COLOR: 3 jobs: @@ -35,6 +37,8 @@ jobs: environment: pypi permissions: id-token: write + attestations: write + contents: read runs-on: ubuntu-latest if: github.event_name == 'release' && github.event.action == 'published' @@ -44,8 +48,12 @@ jobs: name: Packages path: dist + - name: Generate artifact attestation for sdist and wheel + uses: actions/attest-build-provenance@v1.4.1 + with: + subject-path: "dist/*" + - uses: pypa/gh-action-pypi-publish@release/v1 - if: github.event_name == 'release' && github.event.action == 'published' with: # Remember to tell (test-)pypi about this repo before publishing # Remove this line to publish to PyPI diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2fc41f58..98cc7c24 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,6 +12,8 @@ concurrency: cancel-in-progress: true env: + # Many color libraries just need this to be set to any value, but at least + # one distinguishes color depth, where "3" -> "256-bit color". FORCE_COLOR: 3 jobs: @@ -29,9 +31,7 @@ jobs: with: extra_args: --hook-stage manual --all-files - name: Run PyLint - run: | - echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json" - pipx run nox -s pylint + run: pipx run nox -s pylint -- --output-format=github checks: name: Check Python ${{ matrix.python-version }} on ${{ matrix.runs-on }} @@ -40,11 +40,11 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.12"] - runs-on: [ubuntu-latest, macos-latest, windows-latest] + python-version: ["3.8", "3.13"] + runs-on: [ubuntu-latest, windows-latest, macos-14] include: - - python-version: pypy-3.10 + - python-version: "pypy-3.10" runs-on: ubuntu-latest steps: @@ -66,4 +66,6 @@ jobs: --durations=20 - name: Upload coverage report - uses: codecov/codecov-action@v4.0.2 + uses: codecov/codecov-action@v4.5.0 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..de0c122a --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,46 @@ +# This file was created automatically with `myst init --gh-pages` 🪄 💚 + +name: MyST GitHub Pages Deploy +on: + push: + # Runs on pushes targeting the default branch + branches: [main] +env: + # `BASE_URL` determines the website is served from, including CSS & JS assets + # You may need to change this to `BASE_URL: ''` + BASE_URL: /${{ github.event.repository.name }} + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: 'pages' + cancel-in-progress: false +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v3 + - uses: actions/setup-node@v4 + with: + node-version: 18.x + - name: Install MyST Markdown + run: npm install -g mystmd + - name: Build HTML Assets + run: myst build --html + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './_build/html' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.gitignore b/.gitignore index 3810c935..7578f0d0 100644 --- a/.gitignore +++ b/.gitignore @@ -138,7 +138,7 @@ dmypy.json cython_debug/ # setuptools_scm -code/*/_version.py +src/*/_version.py # ruff @@ -157,6 +157,5 @@ Thumbs.db *~ *.swp -*_build -*_pdf_logs -*_pdf_tex +# MyST build outputs +_build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c4d1debe..90f6435b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,12 +2,14 @@ ci: autoupdate_commit_msg: "chore: update pre-commit hooks" autofix_commit_msg: "style: pre-commit fixes" +exclude: ^.cruft.json|.copier-answers.yml$ + repos: - repo: https://github.com/adamchainz/blacken-docs - rev: "1.16.0" + rev: "1.18.0" hooks: - id: blacken-docs - additional_dependencies: [black==23.*] + additional_dependencies: [black==24.*] - repo: https://github.com/pre-commit/pre-commit-hooks rev: "v4.6.0" @@ -32,38 +34,38 @@ repos: - id: rst-directive-colons - id: rst-inline-touching-normal - - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v4.0.0-alpha.8" + - repo: https://github.com/rbubley/mirrors-prettier + rev: "v3.3.3" hooks: - id: prettier - types_or: [yaml, html, css, scss, javascript, json] + types_or: [yaml, markdown, html, css, scss, javascript, json] args: [--prose-wrap=always] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.4.10" + rev: "v0.6.1" hooks: - id: ruff args: ["--fix", "--show-fixes"] - id: ruff-format - # - repo: https://github.com/pre-commit/mirrors-mypy - # rev: "v1.8.0" - # hooks: - # - id: mypy - # files: code|tests - # args: [] - # additional_dependencies: - # - pytest + - repo: https://github.com/pre-commit/mirrors-mypy + rev: "v1.11.1" + hooks: + - id: mypy + files: src|tests + args: [] + additional_dependencies: + - pytest - # - repo: https://github.com/codespell-project/codespell - # rev: "v2.2.6" - # hooks: - # - id: codespell + - repo: https://github.com/codespell-project/codespell + rev: "v2.3.0" + hooks: + - id: codespell - # - repo: https://github.com/shellcheck-py/shellcheck-py - # rev: "v0.9.0.6" - # hooks: - # - id: shellcheck + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: "v0.10.0.1" + hooks: + - id: shellcheck - repo: local hooks: @@ -74,13 +76,13 @@ repos: exclude: .pre-commit-config.yaml - repo: https://github.com/abravalheri/validate-pyproject - rev: "v0.18" + rev: "v0.19" hooks: - id: validate-pyproject additional_dependencies: ["validate-pyproject-schema-store[all]"] - repo: https://github.com/python-jsonschema/check-jsonschema - rev: "0.28.5" + rev: "0.29.1" hooks: - id: check-dependabot - id: check-github-workflows diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..67c194c8 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,17 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.12" + commands: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + - uv venv + - uv pip install .[docs] + - .venv/bin/python -m sphinx -T -b html -d docs/_build/doctrees -D + language=en docs $READTHEDOCS_OUTPUT/html diff --git a/README.md b/README.md index 35dafcab..09faf06e 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,4 @@ ---- -title: "EGMⁿ: The Sequential Endogenous Grid Method" -author: "Alan Lujan" -date: 2023/02/15 ---- - -# EGMⁿ: The Sequential Endogenous Grid Method - -## Abstract - -Heterogeneous agent models with multiple decisions are often solved using inefficient grid search methods that require a large number of points and are time intensive. This paper provides a novel method for solving such models using an extension of the endogenous grid method (EGM) that uses Gaussian Process Regression (GPR) to interpolate functions on unstructured grids. First, separating models into smaller, sequential problems allows the problems to be more tractable and easily analyzed. Second, using an exogenous grid of post-decision states and solving for an endogenous grid of pre-decision states that obey a first order condition greatly speeds up the solution process. Third, since the resulting endogenous grid can often be curvilinear at best and unstructured at worst, GPR provides an efficient and accurate method for interpolating the value, marginal value, and policy functions. Applied sequentially to each decision within the overarching problem, the method is able to solve heterogeneous agent models with multiple decisions in a fraction of the time and with less computational resources than are required by standard grid search methods currently used. This paper also illustrates how this method can be applied to a number of increasingly complex models. Software is provided in the form of a Python module under the `HARK` package. +# SequentialEGM [![Actions Status][actions-badge]][actions-link] [![Documentation Status][rtd-badge]][rtd-link] diff --git a/_toc.yml b/_toc.yml deleted file mode 100644 index b5940cd3..00000000 --- a/_toc.yml +++ /dev/null @@ -1,38 +0,0 @@ -# Table of Contents -# -# Myst will respect: -# 1. New pages -# - file: relative/path/to/page -# 2. New sections without an associated page -# - title: Folder Title -# sections: ... -# 3. New sections with an associated page -# - file: relative/path/to/page -# sections: ... -# -# Note: Titles defined on pages here are not recognized. -# -# This spec is based on the JupyterBook table of contents. -# Learn more at https://jupyterbook.org/customize/toc.html - -format: jb-book -root: content/paper/egmn -parts: - - caption: Content - chapters: - - file: content/paper/1_intro - - file: content/paper/2_method - - file: content/paper/3_multdim - - file: content/paper/4_multinterp - - file: content/paper/5_conditions - - file: content/paper/6_conclusion - - file: content/paper/7_appendix - - caption: Code - chapters: - - file: code/examples/example_ConsPensionModel_baseline - - file: code/examples/example_ConsLaborPortfolioModel - - file: code/examples/example_ConsLaborSeparableModel - - file: code/examples/example_ConsPensionModel - - file: code/examples/example_ConsRetirementModel - - file: code/examples/example_GaussianProcessRegression - - file: code/examples/example_WarpedInterpolation diff --git a/code/examples/example_ConsLaborPortfolioModel.ipynb b/code/examples/example_ConsLaborPortfolioModel.ipynb index 1e971c79..f8ddcbd5 100644 --- a/code/examples/example_ConsLaborPortfolioModel.ipynb +++ b/code/examples/example_ConsLaborPortfolioModel.ipynb @@ -43,8 +43,9 @@ "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "from egmn.ConsLaborSeparableModel import LaborPortfolioConsumerType\n", - "from HARK.utilities import plot_funcs" + "from HARK.utilities import plot_funcs\n", + "\n", + "from egmn.ConsLaborSeparableModel import LaborPortfolioConsumerType" ] }, { @@ -344,7 +345,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "egmn-dev", diff --git a/code/examples/example_ConsLaborSeparableModel.ipynb b/code/examples/example_ConsLaborSeparableModel.ipynb index 5ab414e5..30b3fc90 100644 --- a/code/examples/example_ConsLaborSeparableModel.ipynb +++ b/code/examples/example_ConsLaborSeparableModel.ipynb @@ -42,9 +42,10 @@ } ], "source": [ + "from HARK.utilities import plot_funcs\n", + "\n", "from egmn.ConsLaborSeparableModel import LaborSeparableConsumerType\n", "from egmn.utilities import plot_3d_func\n", - "from HARK.utilities import plot_funcs\n", "\n", "figures_path = \"../../content/figures/\"" ] @@ -316,7 +317,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "egmn-dev", diff --git a/code/examples/example_ConsPensionModel.ipynb b/code/examples/example_ConsPensionModel.ipynb index a6e87609..f7d4044a 100644 --- a/code/examples/example_ConsPensionModel.ipynb +++ b/code/examples/example_ConsPensionModel.ipynb @@ -561,11 +561,10 @@ { "attachments": {}, "cell_type": "markdown", - "metadata": { - "lines_to_next_cell": 2 - }, + "metadata": {}, "source": [ - "## Grids\n" + "## Grids\n", + "\n" ] }, { @@ -745,7 +744,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", diff --git a/code/examples/example_ConsPensionModel_baseline.ipynb b/code/examples/example_ConsPensionModel_baseline.ipynb index dd4c3dd4..8640b60c 100644 --- a/code/examples/example_ConsPensionModel_baseline.ipynb +++ b/code/examples/example_ConsPensionModel_baseline.ipynb @@ -48,9 +48,10 @@ ], "source": [ "import matplotlib.pyplot as plt\n", + "from HARK.interpolation._sklearn import GeneralizedRegressionUnstructuredInterp\n", + "\n", "from egmn.ConsPensionModel import PensionConsumerType, init_pension_contrib\n", "from egmn.utilities import plot_3d_func, plot_scatter_hist\n", - "from HARK.interpolation._sklearn import GeneralizedRegressionUnstructuredInterp\n", "\n", "figures_path = \"../../content/figures/\"" ] @@ -597,11 +598,10 @@ { "attachments": {}, "cell_type": "markdown", - "metadata": { - "lines_to_next_cell": 2 - }, + "metadata": {}, "source": [ - "## Grids\n" + "## Grids\n", + "\n" ] }, { @@ -922,7 +922,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", diff --git a/code/examples/example_ConsRetirementModel.ipynb b/code/examples/example_ConsRetirementModel.ipynb index 6e5fdb2b..76936043 100644 --- a/code/examples/example_ConsRetirementModel.ipynb +++ b/code/examples/example_ConsRetirementModel.ipynb @@ -1051,7 +1051,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "egmn-dev", diff --git a/code/examples/example_GaussianProcessRegression.ipynb b/code/examples/example_GaussianProcessRegression.ipynb index 19bb0806..d51576be 100644 --- a/code/examples/example_GaussianProcessRegression.ipynb +++ b/code/examples/example_GaussianProcessRegression.ipynb @@ -270,7 +270,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "egmn-dev", diff --git a/code/examples/example_WarpedInterpolation.ipynb b/code/examples/example_WarpedInterpolation.ipynb index fecbfb5b..26a76679 100644 --- a/code/examples/example_WarpedInterpolation.ipynb +++ b/code/examples/example_WarpedInterpolation.ipynb @@ -784,7 +784,7 @@ ], "metadata": { "jupytext": { - "formats": "ipynb,py:percent" + "formats": "examples//ipynb,markdown//md" }, "kernelspec": { "display_name": "hark-dev", diff --git a/code/markdown/example_ConsLaborPortfolioModel.md b/code/markdown/example_ConsLaborPortfolioModel.md new file mode 100644 index 00000000..cc570d2d --- /dev/null +++ b/code/markdown/example_ConsLaborPortfolioModel.md @@ -0,0 +1,103 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: egmn-dev + language: python + name: python3 +--- + +```python +import sys + +sys.path.append("../") +``` + +```python +import matplotlib.pyplot as plt +import numpy as np +from HARK.utilities import plot_funcs + +from egmn.ConsLaborSeparableModel import LaborPortfolioConsumerType +``` + +```python pycharm={"name": "#%%\n"} +agent = LaborPortfolioConsumerType() +agent.cycles = 10 +``` + +```python +def plot_3d_func(func, lims_x, lims_y, n=100, label_x="x", label_y="y", label_z="z"): + # get_ipython().run_line_magic("matplotlib", "widget") + xmin, xmax = lims_x + ymin, ymax = lims_y + xgrid = np.linspace(xmin, xmax, n) + ygrid = np.linspace(ymin, ymax, n) + + xMat, yMat = np.meshgrid(xgrid, ygrid, indexing="ij") + + zMat = func(xMat, yMat) + + ax = plt.axes(projection="3d") + ax.plot_surface(xMat, yMat, zMat, cmap="viridis") + ax.set_title("surface") + ax.set_xlabel(label_x) + ax.set_ylabel(label_y) + ax.set_zlabel(label_z) + plt.show() +``` + +```python pycharm={"name": "#%%\n"} +agent.solve() +``` + +```python +share_func = agent.solution[0].portfolio_stage.share_func +c_func = agent.solution[0].consumption_stage.c_func +labor_func = agent.solution[0].labor_stage.labor_func +leisure_func = agent.solution[0].labor_stage.leisure_func +``` + +```python +plot_funcs(share_func, 0, 100) +``` + +```python +plot_funcs(c_func, 0, 100) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func( + labor_func, + (0, 10), + [min(agent.TranShkGrid), max(agent.TranShkGrid)], + label_x="m", + label_y=r"$\theta$", + label_z="labor", +) +``` + +```python +plot_3d_func( + leisure_func, + (0, 10), + [min(agent.TranShkGrid), max(agent.TranShkGrid)], + label_x="m", + label_y=r"$\theta$", + label_z="leisure", +) +``` + +```python pycharm={"name": "#%%\n"} +plot_funcs(agent.solution[0].consumption_stage.c_func, 0, 10) +``` + +```python + +``` diff --git a/code/markdown/example_ConsLaborSeparableModel.md b/code/markdown/example_ConsLaborSeparableModel.md new file mode 100644 index 00000000..4a09767b --- /dev/null +++ b/code/markdown/example_ConsLaborSeparableModel.md @@ -0,0 +1,109 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: egmn-dev + language: python + name: python3 +--- + +```python +import sys + +import matplotlib.pyplot as plt + +sys.path.append("../") +``` + +```python +from HARK.utilities import plot_funcs + +from egmn.ConsLaborSeparableModel import LaborSeparableConsumerType +from egmn.utilities import plot_3d_func + +figures_path = "../../content/figures/" +``` + +```python +agent = LaborSeparableConsumerType(aXtraNestFac=-1, aXtraCount=25, cycles=10) +``` + +```python +grids = agent.solution_terminal.terminal_grids +``` + +```python +plt.scatter(grids["bnrm"], grids["tshk"], c=grids["labor"], norm="symlog") +plt.colorbar() +plt.ylim([0.85, 1.2]) +plt.savefig(figures_path + "LaborSeparableWarpedGrid.svg") +plt.savefig(figures_path + "LaborSeparableWarpedGrid.pdf") +``` + +```python +plt.scatter(grids["mnrm"], grids["tshk"], c=grids["labor"], norm="symlog") +plt.colorbar() +plt.ylim([0.85, 1.2]) +plt.savefig(figures_path + "LaborSeparableRectangularGrid.svg") +plt.savefig(figures_path + "LaborSeparableRectangularGrid.pdf") +``` + +```python +plot_funcs(agent.solution_terminal.labor_leisure.c_func.xInterpolators, 0, 5) +``` + +```python +plot_3d_func( + agent.solution_terminal.labor_leisure.labor_func, + [0, 5], + [0.85, 1.2], + meta={ + "title": "Labor function", + "xlabel": "Bank Balances", + "ylabel": "Transitory shock", + "zlabel": "Labor", + }, +) +``` + +```python +plot_3d_func( + agent.solution_terminal.labor_leisure.v_func, + [0, 5], + [0.85, 1.2], + meta={ + "title": "Value function", + "zlabel": "Value", + "xlabel": "Bank Balances", + "ylabel": "Transitory Income", + }, +) +``` + +```python +agent.solve() +``` + +```python +plot_3d_func( + agent.solution[0].labor_leisure.labor_func, + [0, 15], + [0.85, 1.2], + meta={ + "title": "Labor function", + "xlabel": "Bank Balances", + "ylabel": "Transitory shock", + "zlabel": "Labor", + }, +) +``` + +```python + +``` diff --git a/code/markdown/example_ConsPensionModel.md b/code/markdown/example_ConsPensionModel.md new file mode 100644 index 00000000..29a02da3 --- /dev/null +++ b/code/markdown/example_ConsPensionModel.md @@ -0,0 +1,160 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +import sys + +sys.path.append("../") +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +from egmn.ConsPensionModel import PensionConsumerType +from egmn.utilities import plot_3d_func, plot_scatter_hist + +figures_path = "../../content/figures/" +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +agent = PensionConsumerType(cycles=19) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +agent.solve() + +T = 0 +``` + +## Post Decision Stage + + +```python +plot_3d_func(agent.solution[T].post_decision_stage.v_func.vFuncNvrs, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].post_decision_stage.dvda_func.cFunc, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].post_decision_stage.dvdb_func.cFunc, [0, 5], [0, 5]) +``` + +## Consumption Stage + + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[T].consumption_stage.c_func, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].consumption_stage.v_func.vFuncNvrs, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].consumption_stage.dvdl_func.cFunc, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].consumption_stage.dvdb_func.cFunc, [0, 5], [0, 5]) +``` + +## Deposit Stage + + +```python +plot_3d_func(agent.solution[T].deposit_stage.d_func, [0, 5], [0, 5]) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[T].deposit_stage.c_func, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].deposit_stage.v_func.vFuncNvrs, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].deposit_stage.dvdm_func.cFunc, [0, 5], [0, 5]) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[T].deposit_stage.dvdn_func.cFunc, [0, 5], [0, 5]) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +%time +plot_3d_func(agent.solution[T].deposit_stage.gaussian_interp, [0, 5], [0, 5]) +``` + + +## Grids + + + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} + +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} + +``` + +```python +grids = agent.solution[T].consumption_stage.grids_before_cleanup +``` + +```python +plot_scatter_hist( + grids["lMat"], + grids["blMat"], + grids["dMat"], + "Pension Deposit on Exogenous Grid", + r"Market Resources $\ell$", + "Retirement balance $b$", + "PensionFullExogenousGrid", +) +``` + +```python +plot_scatter_hist( + grids["mMat"], + grids["nMat"], + grids["dMat"], + "Pension Deposit on Endogenous Grid", + "Market Resources $m$", + "Retirement balance $n$", + "PensionFullEndogenousGrid", +) +``` + +```python +grids = agent.solution[T].consumption_stage.grids_before_cleanup +``` + +```python +plot_scatter_hist( + agent.solution[T].deposit_stage.gaussian_interp.grids[0], + agent.solution[T].deposit_stage.gaussian_interp.grids[1], + agent.solution[T].deposit_stage.gaussian_interp.values, + "Pension Deposit on Endogenous Grid", + "Market Resources $m$", + "Retirement balance $n$", + "2ndStagePensionFullEndogenousGrid", +) +``` + +```python + +``` diff --git a/code/markdown/example_ConsPensionModel_baseline.md b/code/markdown/example_ConsPensionModel_baseline.md new file mode 100644 index 00000000..4fb68382 --- /dev/null +++ b/code/markdown/example_ConsPensionModel_baseline.md @@ -0,0 +1,246 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +```python +import sys + +sys.path.append("../") +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +import matplotlib.pyplot as plt +from HARK.interpolation._sklearn import GeneralizedRegressionUnstructuredInterp + +from egmn.ConsPensionModel import PensionConsumerType, init_pension_contrib +from egmn.utilities import plot_3d_func, plot_scatter_hist + +figures_path = "../../content/figures/" +``` + +```python +baseline_params = init_pension_contrib.copy() +baseline_params["mCount"] = 50 +baseline_params["mMax"] = 10 +baseline_params["mNestFac"] = -1 + +baseline_params["nCount"] = 50 + +baseline_params["nMax"] = 12 +baseline_params["nNestFac"] = -1 + +baseline_params["lCount"] = 50 +baseline_params["lMax"] = 9 +baseline_params["lNestFac"] = -1 + +baseline_params["blCount"] = 50 +baseline_params["blMax"] = 13 +baseline_params["blNestFac"] = -1 + +baseline_params["aCount"] = 50 +baseline_params["aMax"] = 8 +baseline_params["aNestFac"] = -1 + +baseline_params["bCount"] = 50 +baseline_params["bMax"] = 14 +baseline_params["bNestFac"] = -1 + +baseline_params["cycles"] = 1 +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +agent = PensionConsumerType(**baseline_params) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +agent.solve() + +T = 0 +``` + +## Post Decision Stage + + +```python +plot_3d_func(agent.solution[T].post_decision_stage.v_func.vFuncNvrs, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].post_decision_stage.dvda_func.cFunc, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].post_decision_stage.dvdb_func.cFunc, [0, 5], [0, 5]) +``` + +## Consumption Stage + + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[T].consumption_stage.c_func, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].consumption_stage.v_func.vFuncNvrs, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].consumption_stage.dvdl_func.cFunc, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].consumption_stage.dvdb_func.cFunc, [0, 5], [0, 5]) +``` + +## Deposit Stage + + +```python +plot_3d_func(agent.solution[T].deposit_stage.d_func, [0, 5], [0, 5]) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[T].deposit_stage.c_func, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].deposit_stage.v_func.vFuncNvrs, [0, 5], [0, 5]) +``` + +```python +plot_3d_func(agent.solution[T].deposit_stage.dvdm_func.cFunc, [0, 5], [0, 5]) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[T].deposit_stage.dvdn_func.cFunc, [0, 5], [0, 5]) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +%time +plot_3d_func(agent.solution[T].deposit_stage.gaussian_interp, [0, 5], [0, 5]) +``` + +## Grids + + + +```python +grids = agent.solution[T].consumption_stage.grids_before_cleanup +``` + +```python +plot_scatter_hist( + grids["lMat"], + grids["blMat"], + grids["dMat"], + "Pension Deposit on Exogenous Grid", + r"Market Resources $\ell$", + "Retirement balance $b$", + "PensionExogenousGrid", +) +``` + +```python +plot_scatter_hist( + grids["mMat"], + grids["nMat"], + grids["dMat"], + "Pension Deposit on Endogenous Grid", + "Market Resources $m$", + "Retirement balance $n$", + "PensionEndogenousGrid", +) +``` + +```python jupyter={"outputs_hidden": false} pycharm={"name": "#%%\n"} +plot_scatter_hist( + agent.solution[T].deposit_stage.gaussian_interp.grids[0], + agent.solution[T].deposit_stage.gaussian_interp.grids[1], + agent.solution[T].deposit_stage.gaussian_interp.values, + "Pension Deposit on Endogenous Grid", + "Market Resources $m$", + "Retirement balance $n$", + "2ndStagePensionEndogenousGrid", +) +``` + +```python +fig, ax = plt.subplots() +plot = ax.scatter( + grids["mMat"], + grids["nMat"], + c=grids["dMat"], + cmap="viridis", + vmin=-1, + vmax=5, + plotnonfinite=True, + alpha=0.6, + s=5, +) +cbar = fig.colorbar(plot) +cbar.ax.set_ylabel("Pension Deposits $d$") + +plt.xlim([-1, 10]) +plt.ylim([-1, 10]) +``` + +```python +fig, ax = plt.subplots() +scatter = ax.scatter( + grids["lMat"], + grids["blMat"], + # c=np.maximum(grids["dMat"], 0), + # cmap="viridis", + vmin=-2, + vmax=15, + plotnonfinite=True, + alpha=0.6, + s=5, +) +# cbar = fig.colorbar(scatter) +# cbar.ax.set_ylabel("Pension Deposits $d$") + +plt.title("Pension Deposits on Exogenous Post-Decision Grid") +plt.xlabel(r"Liquid Wealth $\ell$") +plt.ylabel("Retirement Balance $b$") +fig.savefig(figures_path + "SparsePensionExogenousGrid.svg") +fig.savefig(figures_path + "SparsePensionExogenousGrid.pdf") +``` + +```python +grids = agent.solution[T].consumption_stage.grids_before_cleanup +``` + +```python + +``` + +```python +gauss_interp = GeneralizedRegressionUnstructuredInterp( + grids["dMat"], + [grids["mMat"], grids["nMat"]], + model="gaussian-process", + std=True, + model_kwargs={"normalize_y": True}, +) +``` + +```python +# get_ipython().run_line_magic("matplotlib", "widget") +plot_3d_func(gauss_interp, [0, 5], [0, 5]) +``` + +```python + +``` diff --git a/code/markdown/example_ConsRetirementModel.md b/code/markdown/example_ConsRetirementModel.md new file mode 100644 index 00000000..3d174637 --- /dev/null +++ b/code/markdown/example_ConsRetirementModel.md @@ -0,0 +1,243 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: egmn-dev + language: python + name: python3 +--- + +```python +import sys + +sys.path.append("../") +``` + +```python pycharm={"name": "#%%\n"} +from egmn.ConsRetirementModel import RetirementConsumerType +from egmn.utilities import plot_3d_func, plot_retired +``` + +```python pycharm={"name": "#%%\n"} +agent = RetirementConsumerType() +``` + +```python +agent.solve() +``` + +```python pycharm={"name": "#%%\n"} +solution = agent.solution +size = len(solution) +retired_solution = [solution[t].retired_solution for t in range(size)] +worker_solution = [solution[t].worker_solution for t in range(size)] +working_solution = [solution[t].working_solution for t in range(size)] +retiring_solution = [solution[t].retiring_solution for t in range(size)] + +# Retired + +c_func_retired = [retired_solution[t].c_func for t in range(size)] +vp_func_retired = [retired_solution[t].vp_func for t in range(size)] +v_func_retired = [retired_solution[t].v_func for t in range(size)] + +# Worker + +c_func_worker = [worker_solution[t].deposit_stage.c_func for t in range(size)] +d_func_worker = [worker_solution[t].deposit_stage.d_func for t in range(size)] +dvdm_func_worker = [worker_solution[t].deposit_stage.dvdm_func for t in range(size)] +dvdn_func_worker = [worker_solution[t].deposit_stage.dvdn_func for t in range(size)] +v_func_worker = [worker_solution[t].deposit_stage.v_func for t in range(size)] +prbWrk_func_worker = [ + worker_solution[t].probabilities.prob_working for t in range(size) +] +prbRet_func_worker = [ + worker_solution[t].probabilities.prob_retiring for t in range(size) +] + +# Working + +# Post Decision + +dvda_func_working = [ + working_solution[t].post_decision_stage.dvda_func for t in range(size) +] +dvdb_func_working = [ + working_solution[t].post_decision_stage.dvdb_func for t in range(size) +] +v_pd_func_working = [ + working_solution[t].post_decision_stage.v_func for t in range(size) +] + +# Consumption Stage + +c_cs_func_working = [working_solution[t].consumption_stage.c_func for t in range(size)] +dvdl_cs_func_working = [ + working_solution[t].consumption_stage.dvdl_func for t in range(size) +] +dvdb_cs_func_working = [ + working_solution[t].consumption_stage.dvdb_func for t in range(size) +] +v_cs_func_working = [working_solution[t].consumption_stage.v_func for t in range(size)] + +# Deposit Stage + +c_func_working = [working_solution[t].deposit_stage.c_func for t in range(size)] +d_func_working = [working_solution[t].deposit_stage.d_func for t in range(size)] +dvdm_func_working = [working_solution[t].deposit_stage.dvdm_func for t in range(size)] +dvdn_func_working = [working_solution[t].deposit_stage.dvdn_func for t in range(size)] +v_func_working = [working_solution[t].deposit_stage.v_func for t in range(size)] + +# Retiring + +c_func_retiring = [retiring_solution[t].c_func for t in range(size)] +vp_func_retiring = [retiring_solution[t].vp_func for t in range(size)] +vp_func_retiring = [retiring_solution[t].vp_func for t in range(size)] +v_func_retiring = [retiring_solution[t].v_func for t in range(size)] +``` + +```python pycharm={"name": "#%%\n"} +plot_retired(0, 10, c_func_retired, vp_func_retired, v_func_retired) +``` + +```python pycharm={"name": "#%%\n"} +t = 0 +``` + + +# Working + + + + +## Post Decision Stage + + + +```python pycharm={"name": "#%%\n"} +# wa +plot_3d_func(dvda_func_working[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +# wb +plot_3d_func(dvdb_func_working[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +# w +plot_3d_func(v_pd_func_working[t].vFuncNvrs, [0, 5], [0, 5]) +``` + + +## Consumption Stage + + + +```python pycharm={"name": "#%%\n"} +plot_3d_func(c_cs_func_working[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(dvdl_cs_func_working[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(dvdb_cs_func_working[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(v_cs_func_working[t].vFuncNvrs, [0, 5], [0, 5]) +``` + + +## Deposit Stage + + + +```python pycharm={"name": "#%%\n"} +plot_3d_func(c_func_working[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(d_func_working[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(dvdm_func_working[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(dvdn_func_working[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(v_func_working[t].vFuncNvrs, [0, 5], [0, 5]) +``` + + +# Retiring + + + +```python pycharm={"name": "#%%\n"} +plot_3d_func(c_func_retiring[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(vp_func_retiring[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(v_func_retiring[t], [0, 5], [0, 5]) +``` + + +# Worker + + + +```python pycharm={"name": "#%%\n"} +plot_3d_func(c_func_worker[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(d_func_worker[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(dvdm_func_worker[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(dvdn_func_worker[t].cFunc, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(v_func_worker[t].vFuncNvrs, [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(prbWrk_func_worker[t], [0, 5], [0, 5]) +``` + +```python pycharm={"name": "#%%\n"} +plot_3d_func(prbRet_func_worker[t], [0, 5], [0, 5]) +``` + + + + + +```python pycharm={"name": "#%%\n"} +plot_3d_func(agent.solution[0].working_solution.deposit_stage.interp, [0, 5], [0, 5]) +``` + +```python + +``` diff --git a/code/markdown/example_GaussianProcessRegression.md b/code/markdown/example_GaussianProcessRegression.md new file mode 100644 index 00000000..ba210500 --- /dev/null +++ b/code/markdown/example_GaussianProcessRegression.md @@ -0,0 +1,129 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: egmn-dev + language: python + name: python3 +--- + +```python +import matplotlib.pyplot as plt +import numpy as np +``` + +```python +rng = np.random.RandomState(5) +figures_path = "../../content/figures/" +``` + +```python +def f(x): + return x * np.cos(1.5 * x) + + +# Define latex function +latex_func = r"$f(x) = x \cos(1.5x)$" + +x_min = 0 +x_max = 10 +n_true = 1_000 +n_test = 100 +n_train = 10 +s = 0.000005 # noise variance. + +X_true = np.linspace(start=x_min, stop=x_max, num=n_true) +y_true = f(X_true) + +X_test = np.linspace(start=x_min, stop=x_max, num=n_test).reshape(-1, 1) +y_test = f(X_test) + +X_train = (rng.rand(n_train) * x_max).reshape(-1, 1) +y_train = f(X_train) + s * rng.randn(n_train).reshape(-1, 1) +X_train.shape, y_train.shape +``` + +```python +fig, ax = plt.subplots(figsize=(15, 5)) +ax.plot(X_test, y_test, label=latex_func, linestyle="dotted") +ax.scatter(X_train, y_train, label="Randomly sampled points", s=100) +ax.legend() +ax.set_xlabel("$x$") +ax.set_ylabel("$f(x)$") +ax.set_title("True function and randomly sampled points") +fig.tight_layout() +fig.savefig(figures_path + "GPR_True_Function.svg") +fig.savefig(figures_path + "GPR_True_Function.pdf") +``` + +```python +# Define the kernel + + +def kernel(a, b): + """GP squared exponential kernel function""" + kernelParameter_l = 0.5 + kernelParameter_sigma = 1.0 + sqdist = np.sum(a**2, axis=1).reshape(-1, 1) + np.sum(b**2, 1) - 2 * np.dot(a, b.T) + # np.sum( ,axis=1) means adding all elements columnly; .reshap(-1, 1) add one dimension to make (n,) become (n,1) + return kernelParameter_sigma * np.exp(-0.5 * (1 / kernelParameter_l) * sqdist) +``` + +```python +K_train = kernel(X_train, X_train) +K_test = kernel(X_test, X_test) +K_cross = kernel(X_train, X_test) + +L = np.linalg.cholesky(K_train + s * np.eye(n_train)) +Lk = np.linalg.solve(L, K_cross) +mean_prediction = np.dot(Lk.T, np.linalg.solve(L, y_train)).ravel() +var_prediction = np.diag(K_test) - np.sum(Lk**2, axis=0) +std_prediction = np.sqrt(var_prediction) +``` + +```python +fig, ax = plt.subplots(figsize=(15, 5)) +ax.plot(X_true, y_true, label=latex_func, linestyle="dotted") +ax.scatter(X_train, y_train, label="Observations") +ax.plot(X_test, mean_prediction, label="Mean prediction") +ax.fill_between( + X_test.ravel(), + mean_prediction - 1.96 * std_prediction, + mean_prediction + 1.96 * std_prediction, + alpha=0.5, + label=r"95% confidence interval", +) +ax.legend() +ax.set_xlabel("$x$") +ax.set_ylabel("$f(x)$") +ax.set_title("Gaussian process regression on a noisy dataset") +fig.tight_layout() +fig.savefig(figures_path + "GaussianProcessRegression.svg") +fig.savefig(figures_path + "GaussianProcessRegression.pdf") +``` + +```python +L = np.linalg.cholesky(K_test + 1e-6 * np.eye(n_test) - np.dot(Lk.T, Lk)) +f_post = mean_prediction.reshape(-1, 1) + np.dot(L, rng.normal(size=(n_test, 50))) +``` + +```python +fig, ax = plt.subplots(figsize=(15, 5)) +ax.plot(X_true, y_true, label=latex_func, linestyle="dotted") +ax.scatter(X_train, y_train, label="Observations") +ax.plot(X_test, mean_prediction, label="Mean prediction") +ax.plot(X_test, f_post, linewidth=0.8, alpha=0.5) +ax.legend() +ax.set_xlabel("$x$") +ax.set_ylabel("$f(x)$") +ax.set_title("Random sample of functions from the Gaussian Process posterior.") +fig.tight_layout() +fig.savefig(figures_path + "GPR_Posterior_Sample.svg") +fig.savefig(figures_path + "GPR_Posterior_Sample.pdf") +``` diff --git a/code/markdown/example_WarpedInterpolation.md b/code/markdown/example_WarpedInterpolation.md new file mode 100644 index 00000000..bea05929 --- /dev/null +++ b/code/markdown/example_WarpedInterpolation.md @@ -0,0 +1,314 @@ +--- +jupyter: + jupytext: + formats: examples//ipynb,markdown//md + text_representation: + extension: .md + format_name: markdown + format_version: '1.3' + jupytext_version: 1.16.4 + kernelspec: + display_name: hark-dev + language: python + name: python3 +--- + +# Warped Interpolation + +import matplotlib.pyplot as plt + + +```python +import matplotlib.pyplot as plt +import numpy as np + +figures_path = "../../content/figures/" +``` + +Assume we have a set of points indexed by $(i,j)$ in 2D space for which we have corresponding functional values in a 3rd dimension, such that $f(x_{i,j},y_{i,j}) = z_{i,j}$. In practice, we are interested in cases where the $z_{ij}$ are difficult to compute and we are unable to compute them at other values of $x$ and $y$ -- which is why we want to interpolate. For the callibration below, we will generate these $z$'s arbitrarily using the function + +$$f(x,y) = (xy)^{1/4}$$ + +because the figures look good for our illustrations. + +These $(x_{i,j},y_{i,j})$ points however are not evenly spaced, and do not form a rectilinear grid which would make it easy to interpolate the function off the grid. Nevertheless, these points do have a regular structure as we will see. + + +```python +points = np.array( + [[[1, 7], [3, 8], [5, 9]], [[2, 2], [4, 4], [6, 6]], [[7, 1], [8, 3], [9, 5]]], +).T +values = np.power(points[0] * points[1], 1 / 4) + +fig, ax = plt.subplots() +ax.scatter(points[0], points[1], c="b") +ax.grid() +``` + +In the graph below, we can see the true function in 3D space, along with the points for which we actually know the value of the function. + + +```python +fig = plt.figure() +ax = fig.add_subplot(projection="3d") +ax.scatter(points[0], points[1], values, c="r") +ax.scatter(points[0], points[1], np.zeros_like(values), c="b", alpha=0.5) +for i in range(3): + ax.plot(points[0, i], points[1, i], zs=0, zdir="z", c="r", alpha=0.5) + ax.plot(points[0, :, i], points[1, :, i], zs=0, zdir="z", c="g", alpha=0.5) + +for i in range(9): + ax.plot( + np.array([points[0].flat[i]] * 2), + np.array([points[1].flat[i]] * 2), + [0, values.flat[i]], + "--", + c="b", + alpha=0.5, + ) + +x = np.linspace(1, 9, 100) +xmat, ymat = np.meshgrid(x, x, indexing="ij") +zmat = np.power(xmat * ymat, 1 / 4) +ax.plot_surface(xmat, ymat, zmat, alpha=0.5) +ax.set_zlim(0, np.max(values)) + +ax.view_init(30, -120) + +fig.savefig(figures_path + "WarpedInterpolation.svg") +fig.savefig(figures_path + "WarpedInterpolation.pdf") +``` + +The underlying regular structure comes from the points' position in the matrix, the $(i,j)$ coordinates. If we join the points along every row and every column, we can see that the resulting grid is regular and piecewise affine (curvilinear). + + +```python +fig, ax = plt.subplots() +ax.scatter(points[0], points[1], c="b") +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.grid() +``` + +As we can see, this curvilinear grid can be easily transformed into a rectilinear grid by using the coordinate values $(i,j)$ of the underlying matrix that contains the values. For interpolation, this rectilinear grid allows us to use the standard fast interpolation methods available in SciPy. + + +```python +coord_points = np.mgrid[0:3, 0:3] +fig, ax = plt.subplots() +ax.scatter(coord_points[0], coord_points[1], c="b") +ax.plot(coord_points[0], coord_points[1], "g") +ax.plot(coord_points[0].T, coord_points[1].T, "r") +ax.grid() +``` + +```python +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5)) + +ax1.scatter(points[0], points[1], c="b") +ax1.plot(points[0], points[1], "g") +ax1.plot(points[0].T, points[1].T, "r") +ax1.grid() + +coord_points = np.mgrid[0:3, 0:3] +ax2.scatter(coord_points[0], coord_points[1], c="b") +ax2.plot(coord_points[0], coord_points[1], "g") +ax2.plot(coord_points[0].T, coord_points[1].T, "r") +ax2.grid() + +fig.savefig(figures_path + "Homotopy.svg") +fig.savefig(figures_path + "Homotopy.pdf") +``` + +Below we graph values of the function at their index coordinate points in the matrix. + + +```python +fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) +ax.plot_surface(coord_points[0], coord_points[1], values, alpha=0.5) +ax.view_init(30, -130) + +ax.scatter(coord_points[0], coord_points[1], values, c="r") +``` + +The objective is to be able to interpolate the value of the function at any point off the grid, where presumably we are only interested in points internal to the curvilinear space and not outside the boundaries. For example, we can imagine that we want an approximation to the function at the point $(x,y) = (3, 5)$ pictured below. If we could find the correspoinding point in the coordinate grid, interpolation would be straightforward. + + +```python +fig, ax = plt.subplots(figsize=(10, 5)) +ax.scatter(points[0], points[1], c="b") +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.scatter(3, 5, c="m") +plt.grid() +``` + +### Method 1: Quad Interpolation + +A straightforward and generalizable approach would be to identify the quadrilateral in which the point lies, and then use quad interpolation to find the corresponding z-value. + +Quad interpolation consists of finding the affine transformation that maps the quadrilateral to the unit square, and then applying the transformation to the point of interest. Having located the corresponding point in the unit square, we can use standard bilinear interpolation to find the corresponding z-value. + +![Quad Interpolation](https://www.particleincell.com/wp-content/uploads/2012/06/mapping-small.png) +![Quad Interpolation](https://www.particleincell.com/wp-content/uploads/2012/06/interpolation-300x279.png) + +This approach is generalizable to any number of dimensions, and it is desirable for our purposes. However, we have not found a general tool in the Scientific Python environment that would allow us to do this. + +This appears possible in other proprietary software but we have not found an open source tool that would allow us to do this. + + + +### Method 2: + +We can find where the x-coordinate of the point of interest intersects with the index-coordinates of the matrix. + + +```python +fig, ax = plt.subplots(figsize=(10, 5)) +ax.scatter(points[0], points[1], c="b") +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.scatter(3, 5, c="m") +ax.scatter([3, 3], [3, 8], s=150, facecolors="none", edgecolors="m") +ax.axvline(x=3, color="c", linestyle="--") +ax.grid() +``` + +This is similar to assuming that we have 3 linear interpolators formed by connecting the points on the green lines in the x-direction, and for each interpolator we can approximate the corresponding y and z values using the grid data. + + +```python +fig, ax = plt.subplots(figsize=(10, 5)) +ax.scatter(points[0], coord_points[1], c="b") +ax.plot(points[0], coord_points[1], "g") +ax.axvline(x=3, color="c", linestyle="--") +ax.scatter([3, 3], [0, 1], s=150, facecolors="none", edgecolors="m") +ax.grid() +``` + +Now, for each circle in the figure, we have a corresponding pair $(y,z)$, and we can interpolate in the y-direction to find the corresponding z-value for the point's y-coordinate. + + +```python +fig, ax = plt.subplots(figsize=(10, 5)) +ax.scatter(points[0], points[1], c="b") +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.scatter(3, 5, c="m") +ax.scatter([3, 3], [3, 8], s=150, facecolors="none", edgecolors="m") +ax.axvline(x=3, color="c", linestyle="--") +ax.hlines(y=[3, 5, 8], xmin=1, xmax=3, color="c", linestyle="--") +ax.grid() +``` + +```python +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5)) + +ax1.scatter(points[0], points[1], c="b") +ax1.plot(points[0], points[1], "g") +ax1.plot(points[0].T, points[1].T, "r") +ax1.scatter(3, 5, c="m") +ax1.scatter([3, 3], [3, 8], s=150, facecolors="none", edgecolors="m") +ax1.axvline(x=3, color="c", linestyle="--") +ax1.hlines(y=[3, 5, 8], xmin=1, xmax=3, color="c", linestyle="--") +ax1.grid() + +ax2.scatter(points[0], coord_points[1], c="b") +ax2.plot(points[0], coord_points[1], "g") +ax2.axvline(x=3, color="c", linestyle="--") +ax2.scatter([3, 3], [0, 1], s=150, facecolors="none", edgecolors="m") +ax2.grid() + +fig.savefig(figures_path + "Mapping.svg") +fig.savefig(figures_path + "Mapping.pdf") +``` + +We can do the same by connecting the points on the red line, and interpolating $(y, z)$ values for the point's x-coordinate. + + +```python +fig, ax = plt.subplots() +ax.scatter(points[0], coord_points[1].T, c="b") +ax.plot(points[0].T, coord_points[1], "r") +ax.axvline(x=3, color="c", linestyle="--") +ax.scatter([3, 3], [0, 1], s=150, facecolors="none", edgecolors="m") +ax.grid() +``` + +```python +fig, ax = plt.subplots() +ax.scatter(points[0], points[1], c="b") +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.scatter(3, 5, c="m") +ax.scatter([3, 3], [1.8, 8], s=150, facecolors="none", edgecolors="m") +ax.axvline(x=3, color="c", linestyle="--") +ax.hlines(y=[1.8, 5, 8], xmin=1, xmax=3, color="c", linestyle="--") +ax.grid() +``` + +However, the two processes might provide different results. The differences in results arises from the values that are weighted in the interpolation. In the first case, interpolation uses the values that correspond to the quadrangle in which the point of interest lies. In the second case, the lowest cirle lies in an adjacent quadrangle, meaning that the $y$ and $z$ values corresponding to that point come from interpolation in the adjacent quadrangle. Because of this, the second result is weighing values that are further away from the point of interest, and the result is less accurate. + +Additionally, we could start this method in the y-direction, and the results could be different yet. + + +```python +fig, ax = plt.subplots() +ax.scatter(points[0], points[1], c="b") +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.scatter(3, 5, c="m") +ax.axvline(x=3, color="c", linestyle="--") +ax.axhline(y=5, color="c", linestyle="--") +ax.scatter([3, 3, 3], [1.8, 3, 8], s=150, facecolors="none", edgecolors="m") +ax.scatter([1.4, 3.75, 5, 9], [5, 5, 5, 5], s=150, facecolors="none", edgecolors="m") +ax.grid() +``` + +### Method 3: Dense Interpolation + +A third approach would be to use an interpolation method once (any of the above, or others), for the cross-product of all x and y coordinates, to create a rectilinear grid of $(x,y,z)$ values. Having done this, we can ignore the original curvilinear grid and use the rectilinear grid for interpolation. This method has the advantage of allowing us to interpolate in the original space and not in the warped space. + + +```python +all_coords = np.mgrid[1:10, 1:10] +fig, ax = plt.subplots() +ax.plot(points[0], points[1], "g") +ax.plot(points[0].T, points[1].T, "r") +ax.scatter(all_coords[0], all_coords[1], c="y") +ax.scatter(points[0], points[1], c="b") +ax.grid() +``` + +As illustration, we can use `HARK.interpolation`'s `UnstructuredInterp` which wraps `scipy`'s unstructured interpolators (`griddata`). This method is not very fast, which is why we are looking for a faster alternative. + + +```python +from HARK.interpolation import UnstructuredInterp + +z_interp = UnstructuredInterp(values, [points[0], points[1]]) +z_vals = z_interp(all_coords[0], all_coords[1]) + +fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) +ax.plot_surface(all_coords[0], all_coords[1], z_vals) +ax.plot_surface(xmat, ymat, zmat, alpha=0.5) +ax.view_init(30, -130) +``` + +# Why do we need other tools? + +`scipy`'s unstructured interpolators (`griddata`) can be used to interpolate with curvilinear or piecewise affine grids, but they do so by discarding the underlying structure of the grid and instead producing a triangulation of the input points. This triangulation is comparatively slow, and discarding the structure also prevents us from using more fine grained information we may know about the function, such as its derivatives. + +An additional tool that we found useful is `scikit-image`'s `PiecewiseAffineTransform` which can be used to find the affine transformation that maps the curvilinear grid to a rectilinear grid. Again, however, this tool starts by creating a triangulation of the input points regardless of the structure of the grid. + +In our applications, we already have a structure to the grid that should be useful for interpolation. Namely, the index coordinate $(i,j)$ of the matrix that contains the values describes a grid that is piecewise affine and/or curvilinear. We would like to use this structure to speed up the interpolation process. + + + +### Questions + +1. Which method is the most accurate? +2. Which method is the fastest? +3. Are there other methods that could be used? +4. Do these methods generalize to higher dimensions? + diff --git a/content/docs/index.md b/content/docs/index.md index c18ba6e4..9d0aa156 100644 --- a/content/docs/index.md +++ b/content/docs/index.md @@ -1,13 +1,16 @@ # SequentialEGM ```{toctree} -:maxdepth: 2 -:hidden: - +--- +maxdepth: 2 +hidden: +--- ``` ```{include} ../README.md -:start-after: +--- +start-after: +--- ``` ## Indices and tables diff --git a/content/paper/1_intro.md b/content/paper/1_intro.md index 7e6b66f4..7710de8e 100644 --- a/content/paper/1_intro.md +++ b/content/paper/1_intro.md @@ -1,5 +1,3 @@ - - +++ {"part": "abstract"} Heterogeneous agent models with multiple decisions are often solved using inefficient grid search methods that require many evaluations and are slow. This paper provides a novel method for solving such models using an extension of the Endogenous Grid Method (EGM) that uses Gaussian Process Regression (GPR) to interpolate functions on unstructured grids. First, I propose an intuitive and strategic procedure for decomposing a problem into subproblems which allows the use of efficient solution methods. Second, using an exogenous grid of post-decision states and solving for an endogenous grid of pre-decision states that obey a first-order condition greatly speeds up the solution process. Third, since the resulting endogenous grid can often be non-rectangular at best and unstructured at worst, GPR provides an efficient and accurate method for interpolating the value, marginal value, and decision functions. Applied sequentially to each decision within the problem, the method is able to solve heterogeneous agent models with multiple decisions in a fraction of the time and with less computational resources than are required by standard methods currently used. Software to reproduce these methods is available under the [`Econ-ARK/HARK`](https://econ-ark.org/) project for the `python` programming language. @@ -8,13 +6,18 @@ Heterogeneous agent models with multiple decisions are often solved using ineffi +++ {"part": "acknowledgements"} -I would like to thank Chris Carroll, Matthew White, and Simon Scheidegger for their helpful comments and suggestions. The remaining errors are my own. All figures and other numerical results were produced using the [`Econ-ARK/HARK`](https://econ-ark.org/) toolkit {cite:p}`Carroll2018`. Additional libraries used in the production of this paper include but are not limited to: [`scipy`](https://www.scipy.org/) {cite:p}`Virtanen2020`, [`numpy`](https://www.numpy.org/) {cite:p}`Harris2020`, [`numba`](https://numba.pydata.org/) {cite:p}`Lam2015`, [`cupy`](https://cupy.dev/) {cite:p}`Okuta2017`, [`scikit-learn`](https://scikit-learn.org/) {cite:p}`Pedregosa2011`, [`pytorch`](https://pytorch.org/) {cite:p}`Paszke2019`, and [`gpytorch`](https://gpytorch.ai/) {cite:p}`Gardner2018` +I would like to thank Chris Carroll, Matthew White, and Fedor Iskhakov for their helpful comments and suggestions. The remaining errors are my own. All figures and other numerical results were produced using the [`Econ-ARK/HARK`](https://econ-ark.org/) toolkit {cite:p}`Carroll2018`. Additional libraries used in the production of this paper include but are not limited to: [`scipy`](https://www.scipy.org/) {cite:p}`Virtanen2020`, [`numpy`](https://www.numpy.org/) {cite:p}`Harris2020`, [`numba`](https://numba.pydata.org/) {cite:p}`Lam2015`, [`cupy`](https://cupy.dev/) {cite:p}`Okuta2017`, [`scikit-learn`](https://scikit-learn.org/) {cite:p}`Pedregosa2011`, [`pytorch`](https://pytorch.org/) {cite:p}`Paszke2019`, and [`gpytorch`](https://gpytorch.ai/) {cite:p}`Gardner2018` +++ (introduction)= + # Introduction +> An optimal policy has the property that whatever the initial state and initial decision are, the remaining decisions must constitute an optimal policy with regard to the state resulting from the first decision. +> +> -- [](doi:10.1090/S0002-9904-1954-09848-8) + ## Background % Introduce the topic by providing a brief overview of the issue and why it is important to study it. @@ -31,8 +34,6 @@ I would like to thank Chris Carroll, Matthew White, and Simon Scheidegger for th Macroeconomic modeling aims to describe a complex world of agents interacting with each other and making decisions in a dynamic setting. The models are often very complex, require strong underlying assumptions, and use a lot of computational power to solve. One of the most common methods to solve these complex problems is using a grid search method to solve the model. The Endogenous Grid Method (EGM) developed by {cite:t}`Carroll2006` allows dynamic optimization problems to be solved in a more computationally efficient and faster manner than the previous method of convex optimization using grid search. Many problems that before took hours to compute became much easier to solve and allowed macroeconomists and computational economists to focus on estimation and simulation. However, the Endogenous Grid Method is limited to a few specific classes of problems. Recently, the classes of problems to which EGM can be applied have been expanded[^f1], but with every new method comes a new set of limitations. This paper introduces a new approach to EGM in a multivariate setting. The method is called Sequential EGM (or EGM$^n$) and introduces a novel way of breaking down complex problems into a sequence of simpler, smaller, and more tractable problems, along with an exploration of new multidimensional interpolation methods that can be used to solve these problems. -[^f1]: {cite:t}`Barillas2007, Maliar2013, Fella2014, White2015, Iskhakov2017`, among others. - ## Literature Review % Summarize the existing literature on the topic and highlight any gaps or limitations in the current research. @@ -89,3 +90,5 @@ Additionally, the Sequential Endogenous Grid Method often sheds light on the pro % hypotheses. Then [Section %s](#method) presents the econometric model, ..." [Section %s](#method) presents a basic model that illustrates the sequential Endogenous Grid Method in one dimension. Then [Section %s](#multdim) introduces a more complex method with two state variables to demonstrate the use of machine learning tools to generate an interpolating function. In [Section %s](#multinterp) I present the unstructured interpolation methods using machine learning in more detail. [Section %s](#conditions) discusses the theoretical requirements to use the Sequential Endogenous Grid Method. Finally, [Section %s](#conclusion) concludes with some limitations and future work. + +[^f1]: {cite:t}`Barillas2007, Maliar2013, Fella2014, White2015, Iskhakov2017`, among others. diff --git a/content/paper/2_method.md b/content/paper/2_method.md index 2c48f06e..1889f6b9 100644 --- a/content/paper/2_method.md +++ b/content/paper/2_method.md @@ -1,135 +1,141 @@ - - (method)= # The Sequential Endogenous Grid Method -## A basic model - -The baseline problem which I will use to demonstrate the Sequential Endogenous Grid Method (EGM$^n$) is a discrete time version of {cite:t}`Bodie1992` where a consumer has the ability to adjust their labor as well as their consumption in response to financial risk. The objective consists of maximizing the present discounted lifetime utility of consumption and leisure. - -\begin{equation} - \VFunc_0(\BLev_0, \tShkEmp_0) = \max \Ex_{t} - \left[ \sum_{n = 0}^{T-t} \DiscFac^{n} \utilFunc(\CLev_{t+n}, \Leisure_{t+n}) \right] -\end{equation} - -In particular, this example makes use of a utility function that is based on Example 1 in the paper, which is that of additively separable utility of labor and leisure as - -\begin{equation} - \utilFunc(\CLev, \Leisure) = \util(\CLev) + \h(\Leisure) = \frac{C^{1-\CRRA}}{1-\CRRA} + \labShare^{1-\CRRA} - \frac{\Leisure^{1-\leiShare}}{1-\leiShare} -\end{equation} - -where the term $\labShare^{1-\CRRA}$ is introduced to allow for a balanced growth path as in {cite:t}`Mertens2011`. The use of additively separable utility is ad-hoc, as it will allow for the use of multiple EGM steps in the solution process, as we'll see later. +The Sequential Endogenous Grid Method (EGM$^n$) is a novel extension of the EGM to solve dynamic programming problems with multiple choice variables. The key insight is to break down the problem into a sequence of subproblems, each of which can be solved using a simple EGM step. To demonstrate the power of thinking sequentially, I first present a simple model with one choice variable that is traditionally solved using one EGM step. + +## The Standard Incomplete Markets model as a sequential problem + +Consider the standard one-asset incomplete markets model by [](doi:10.1086/250034), also known as the Bewley-Huggett-Aiyagari-Imrohoroglu-Zeldes-Deaton-Carroll model. The consumer's problem is to maximize the present discounted value of utility from consumption and savings, subject to uncertainty in labor productivity and an aggregate process of interest rates and wages. The Bellman equation is + +$$ +\begin{align} +V_t(e, k) = \max_{c, k'} &\left\{\frac{c^{1-\sigma}}{1-\sigma} + \beta \mathbb{E}_t\left[V_{t+1}(e', k')|e \right] \right\} +\\ +c + k' &= (1 + r_t)k + w_t e +\\ +k' &\geq 0 +\end{align} +$$ + +We can think of this problem as a sequence of two blocks: one where the household makes a consumption-saving decision, and another where the household takes an expectation of the future conditional on their savings choice. Define the continuation value of any savings choice as + +$$ +\begin{align} +W_t(e, k') = \mathbb{E}_t\left[V_{t+1}(e', k')|e \right]. +\end{align} +$$ + +Importantly, this block does not require any optimization, as it is just an expectation step. The household can then use the value of any savings decision to optimize their consumption choice. The problem is then reduced to the following: + +$$ +\begin{align} +V_t(e, k) = \max_{c, k'} &\left\{\frac{c^{1-\sigma}}{1-\sigma} + \beta W_t(e, k') \right\} +\\ c + k' &= (1 + r_t)k + w_t e +\\ k' &\geq 0 +\end{align} +$$ + +Notice that this block has no uncertainty. This is a key advantage of thinking sequentially. By placing the expectation in a subsequent block, this block is now a simple optimization problem. + +We have now dissected this problem into two blocks, an optimization block and an expectation block, each of which is easier to handle than the whole. We now present the EGM. The first-order condition with respect to consumption is + +$$ +\begin{align} +c(e, k') = (\beta W_t^k(e, k'))^{-1/\sigma} +\end{align} +$$ + +@SolvingMicroDSOPs refer to this as the "consumed function", because it provides the amount a household must have "consumed" to optimally achieve a certain level of savings $k'$ given their current productivity state $e$. From this function, we can derive the endogenous grid of capital $k$ that the agent must have started with to consume $c(e, k')$ and save $k'$ using the resource constraint. + +$$ +\begin{align} +k(e, k') = \frac{c(e, k') + k' - w_t e }{1+r_t} +\end{align} +$$ + +These two equations now jointly define a parameterized curve[^fedor] for the consumption function $c(e, k)$, which can be interpolated to find the optimal consumption for any level of savings and productivity. This is the EGM step. + +[^fedor]: This comes from Fedor Iskhakov. + +:::{raw} latex +\begin{algorithm} +\caption{The Endogenous Grid Method (EGM)}\label{alg:egm} +\begin{algorithmic} +\Require $V_{t+1}(e, k)$ +\Ensure $y = x^n$ +\State $y \gets 1$ +\State $X \gets x$ +\State $N \gets n$ +\While{$N \neq 0$} +\If{$N$ is even} +\State $X \gets X \times X$ +\State $N \gets \frac{N}{2}$ \\ Comment{This is a comment} +\ElsIf{$N$ is odd} +\State $y \gets y \times X$ +\State $N \gets N - 1$ +\EndIf +\EndWhile +\end{algorithmic} +\end{algorithm} +::: + +## The Heterogeneous Agent New Keynesian (HANK) Model + +The baseline problem which I will use to demonstrate the Sequential Endogenous Grid Method (EGM$^n$) is the one-asset HANK model with endogenous labor from [](doi:10.3982/ECTA17434). + +In particular, this example makes use of an additively separable utility of consumption and disutility of labor as follows: + +$$ +\begin{align} +V_t(e, a) = \max_{c, n, a'} &\left\{\frac{c^{1-\sigma}}{1-\sigma} - \varphi \frac{n^{1+\nu}}{1+\nu} + \beta \mathbb{E}_t\left[V_{t+1}(e', a')|e\right] \right\} +\\ +c + a' &= (1 + r_t)a + w_t(e) n + T_t(e) +\\ +a' &\geq 0 +\end{align} +$$ + +The use of additively separable utility is important, as it will allow for the use of multiple EGM steps in the solution process, as we'll see later. This model represents a consumer who begins the period with a level of bank balances $\bRat_{t}$ and a given wage offer $\tShkEmp_{t}$. Simultaneously, they are able to choose consumption, labor intensity, and a risky portfolio share with the objective of maximizing their utility of consumption and leisure, as well as their future wealth. -The problem can be written in normalized recursive form[^f2] as - -\begin{equation} - \begin{split} - \vFunc_{t}(\bRat_{t}, \tShkEmp_{t}) & = \max_{\{\cRat_{t}, - \leisure_{t}, \riskyshare_{t}\}} \utilFunc(\cRat_{t}, \leisure_{t}) + - \DiscFac \Ex_{t} \left[ \PGro_{t+1}^{1-\CRRA} - \vFunc_{t+1} (\bRat_{t+1}, - \tShkEmp_{t+1}) \right] \\ - & \text{s.t.} \\ - \labor_{t} & = 1 - \leisure_{t} \\ - \mRat_{t} & = \bRat_{t} + \tShkEmp_{t}\labor_{t} \\ - \aRat_{t} & = \mRat_{t} - \cRat_{t} \\ - \Rport_{t+1} & = \Rfree + (\Risky_{t+1} - \Rfree) - \riskyshare_{t} \\ - \bRat_{t+1} & = \aRat_{t} \Rport_{t+1} / \PGro_{t+1} - \end{split} -\end{equation} - in which $\labor_{t}$ is the time supplied to labor net of leisure, $\mRat_{t}$ is the market resources totaling bank balances and labor income, $\aRat_{t}$ is the amount of saving assets held by the consumer, and $\riskyshare_{t}$ is the risky share of assets, which induce a $\Rport_{t+1}$ return on portfolio that results in next period's bank balances $\bRat_{t+1}$ normalized by next period's permanent income $\PGro_{t+1}$. -[^f2]: As in {cite:t}`Carroll2009`, where the utility of normalized consumption and leisure is defined as - - \begin{equation} - \utilFunc(\cRat_{t}, \leisure_{t}) = \PLev_{t}^{1-\CRRA} \frac{\cRat_{t}^{1-\CRRA}}{1-\CRRA} + (\labShare\PLev_{t}) - ^{1-\CRRA} \frac{\leisure_{t}^{1-\leiShare}}{1-\leiShare} - \end{equation} - -% \begin{equation} -% \begin{split} -% \vFunc_{t}(\bRat_{t}, \tShkEmp_{t}) & = \max_{\cRat_{t}, -% \leisure_{t}} \util(\cRat_{t}) + \h(\leisure_{t}) + -% \vEnd_{t} (\aRat_{t}) -% \\ -% & \text{s.t.} \\ -% \labor_{t} & = 1 - \leisure_{t} \\ -% \mRat_{t} & = \bRat_{t} + \tShkEmp_{t}\labor_{t} \\ -% \aRat_{t} & = \mRat_{t} - \cRat_{t} \\ -% \end{split} -% \end{equation} - ## Restating the problem sequentially We can make a few choices to create a sequential problem which will allow us to use multiple EGM steps in succession. First, the agent decides their labor-leisure trade-off and receives a wage. Their wage plus their previous bank balance then becomes their market resources. Second, given market resources, the agent makes a pure consumption-saving decision. Finally, given an amount of savings, the consumer then decides their risky portfolio share. Starting from the beginning of the period, we can define the labor-leisure problem as -\begin{equation} - \begin{split} - \vFunc_{t}(\bRat_{t}, \tShkEmp_{t}) & = \max_{ \leisure_{t}} - \h(\leisure_{t}) + \vOpt_{t} (\mRat_{t}) \\ - & \text{s.t.} \\ - 0 & \leq \leisure_{t} \leq 1 \\ - \labor_{t} & = 1 - \leisure_{t} \\ - \mRat_{t} & = \bRat_{t} + \tShkEmp_{t}\labor_{t}. - \end{split} -\end{equation} +$$ +\begin{align} +v_{(t,0)}(e, a) &= \max_{n} \left\{ - \varphi \frac{n^{1+\nu}}{1+\nu} + v_{(t,1)}(e,m) \right\} +\ +m &= (1 + r_t)a + w_t(e) n + T_t(e) +\end{align} +$$ The pure consumption-saving problem is then -\begin{equation} - \begin{split} - \vOpt_{t}(\mRat_{t}) & = \max_{\cRat_{t}} \util(\cRat_{t}) + \DiscFac\vEnd_{t}(\aRat_{t}) \\ - & \text{s.t.} \\ - 0 & \leq \cRat_{t} \leq \mRat_{t} \\ - \aRat_{t} & = \mRat_{t} - \cRat_{t}. - \end{split} -\end{equation} +$$ +\begin{align} +v_{(t,1)}(e, m) &= \max_{c, a'} \left\{\frac{c^{1-\sigma}}{1-\sigma} + \beta v_{(t,2)}(e,a') \right\} +\ + a' &= m - c \geq 0 +\end{align} +$$ Finally, the risky portfolio problem is -\begin{equation} - \begin{split} - \vEnd_{t}(\aRat_{t}) & = \max_{\riskyshare_{t}} - \Ex_{t} \left[ \PGro_{t+1}^{1-\CRRA} - \vFunc_{t+1}(\bRat_{t+1}, - \tShkEmp_{t+1}) \right] \\ - & \text{s.t.} \\ - 0 & \leq \riskyshare_{t} \leq 1 \\ - \Rport_{t+1} & = \Rfree + (\Risky_{t+1} - \Rfree) - \riskyshare_{t} \\ - \bRat_{t+1} & = \aRat_{t} \Rport_{t+1} / \PGro_{t+1}. - \end{split} -\end{equation} +$$ +\begin{align} +v_{(t,2)}(e, a') = \mathbb{E}_t\left[V_{t+1}(e', a')|e\right] +\end{align} +$$ This sequential approach is explicitly modeled after the nested approaches explored in {cite:t}`Clausen2020` and {cite:t}`Druedahl2021`. However, I will offer additional insights that expand on these methods. An important observation is that now, every single choice is self-contained in a subproblem, and although the structure is specifically chosen to minimize the number of state variables at every stage, the problem does not change by this structural imposition. This is because there is no additional information or realization of uncertainty that happens between decisions, as can be seen by the expectation operator being in the last subproblem. From the perspective of the consumer, these decisions are essentially simultaneous, but a careful organization into sub-period problems enables us to solve the model more efficiently and can provide key economic insights. In this problem, as we will see, a key insight will be the ability to explicitly calculate the marginal value of wealth and the Frisch elasticity of labor. -%\begin{equation} -% \begin{split} -% \vFunc_{t}(\bRat_{t}) & = \max_{ \labor_{t}} \h(\leisure_{t}) + \Ex_{t} \left[ \vOpt_{t} (\mRat_{t}) \right] \\ -% & \text{s.t.} \\ -% \labor_{t} & = 1 - \leisure_{t} \\ -% \mRat_{t} & = \bRat_{t} + \tShkEmp_{t+1}\labor_{t} \\ -% \end{split} -%\end{equation} -% -%\begin{equation} -% \begin{split} -% \vOpt_{t}(\mRat_{t}) & = \max_{\aRat_{t}} \util(\cRat_{t}) + \DiscFac \Ex_{t} -% \left[ \PGro_{t+1}^{1-\CRRA} \vFunc_{t+1} (\bRat_{t+1}) \right] \\ -% & \text{s.t.} \\ -% \aRat_{t} & = \mRat_{t} - \cRat_{t} \\ -% \bRat_{t+1} & = \aRat_{t} \Rfree / \PGro_{t+1} -% \end{split} -%\end{equation} - ## The portfolio decision subproblem As useful as it is to be able to use the EGM step more than once, there are clear problems where the EGM step is not applicable. This basic labor-portfolio choice problem demonstrates where we can use an additional EGM step, and where we can not. First, we go over a subproblem where we can not use the EGM step. @@ -138,219 +144,216 @@ In reorganizing the labor-portfolio problem into subproblems, we assigned the ut Restating the problem in compact form gives +$$ + \begin{equation} - \vEnd_{t}(\aRat_{t}) = \max_{\riskyshare_{t}} \Ex_{t} \left[ \PGro_{t+1}^{1-\CRRA} - \vFunc_{t+1}\left(\aRat_{t}(\Rfree + (\Risky_{t+1} - \Rfree) \riskyshare_{t}), \tShkEmp_{t+1}\right) - \right]. +\vEnd_{t}(\aRat_{t}) = \max_{\riskyshare_{t}} \Ex_{t} \left\[ \PGro_{t+1}^{1-\CRRA} +\vFunc_{t+1}\left(\aRat_{t}(\Rfree + (\Risky_{t+1} - \Rfree) \riskyshare_{t}), \tShkEmp_{t+1}\right) +\right\]. \end{equation} +\$\$ The first-order condition with respect to the risky portfolio share is then +$$ \begin{equation} \Ex_{t} \left[ \PGro_{t+1}^{-\CRRA} \vFunc_{t+1}^{\bRat}\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) (\Risky_{t+1} - \Rfree) \right] = 0. \end{equation} +$$ Finding the optimal risky share requires numerical optimization and root-solving of the first-order condition. To close out the problem, we can calculate the envelope condition as +$$ \begin{equation} \vEnd_{t}'(\aRat_{t}) = \Ex_{t} \left[ \PGro_{t+1}^{-\CRRA} \vFunc_{t+1}^{\bRat}\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \Rport_{t+1} \right]. \end{equation} +$$ ### A note on avoiding taking expectations more than once We could instead define the portfolio choice subproblem as: +$$ \begin{equation} \vEnd_{t}(\aRat_{t}) = \max_{\riskyshare_{t}} \vOptAlt(\aRat_{t}, \riskyshare_{t}) \end{equation} +$$ where +$$ \begin{equation} \begin{split} \vOptAlt_{t}(\aRat_{t}, \riskyshare_{t}) & = \Ex_{t} - \left[ \PGro_{t+1}^{1-\CRRA} \vFunc_{t+1}\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \right] \\ - \Rport_{t+1} & = \Rfree + (\Risky_{t+1} - \Rfree) \riskyshare_{t} \\ + \left[ \PGro_{t+1}^{1-\CRRA} \vFunc_{t+1}\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \right] \ + \Rport_{t+1} & = \Rfree + (\Risky_{t+1} - \Rfree) \riskyshare_{t} \ \bRat_{t+1} & = \aRat_{t} \Rport_{t+1} / \PGro_{t+1} \end{split} \end{equation} +$$ In this case, the process is similar. The only difference is that we don't have to take expectations more than once. Given the next period's solution, we can calculate the marginal value functions as: +$$ \begin{equation} \begin{split} \vOptAlt_{t}^{\aRat}(\aRat_{t}, \riskyshare_{t}) & = \Ex_{t} - \left[ \PGro_{t+1}^{-\CRRA} \vFunc_{t+1}'\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \Rport_{t+1} \right] \\ + \left[ \PGro_{t+1}^{-\CRRA} \vFunc_{t+1}'\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \Rport_{t+1} \right] \ \vOptAlt_{t}^{\riskyshare}(\aRat_{t}, \riskyshare_{t}) & = \Ex_{t} - \left[ \PGro_{t+1}^{-\CRRA} \vFunc_{t+1}'\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \aRat_{t} (\Risky_{t+1} - \Rfree) \right] \\ + \left[ \PGro_{t+1}^{-\CRRA} \vFunc_{t+1}'\left(\bRat_{t+1}, \tShkEmp_{t+1}\right) \aRat_{t} (\Risky_{t+1} - \Rfree) \right] \ \end{split} \end{equation} +$$ If we are clever, we can calculate both of these in one step. Now, the optimal risky share can be found by the first-order condition and we can use it to evaluate the envelope condition. +$$ \begin{equation} \text{F.O.C.:} \qquad \vOptAlt_{t}^{\riskyshare}(\aRat_{t}, \riskyshare_{t}^{*}) = 0 \qquad \text{E.C.:} \qquad \vEnd_{t}^{\aRat}(\aRat_{t}) = \vOptAlt_{t}^{\aRat}(\aRat_{t}, \riskyshare_{t}^{*}) \end{equation} +$$ ## The consumption-saving subproblem The consumption-saving EGM follows {cite:t}`Carroll2006` but I will cover it for exposition. We can begin the solution process by restating the consumption-savings subproblem in a more compact form, substituting the market resources constraint and ignoring the no-borrowing constraint for now. The problem is: +$$ \begin{equation} \vOpt_{t}(\mRat_{t}) = \max_{\cRat_{t}} \util(\cRat_{t}) + \DiscFac \vEnd_{t}(\mRat_{t}-\cRat_{t}) \end{equation} +$$ To solve, we derive the first-order condition with respect to $\cRat_{t}$ which gives the familiar Euler equation: +$$ \begin{equation} \utilFunc'(\cRat_t) = \DiscFac \vEnd_{t}'(\mRat_{t} - \cRat_{t}) = \DiscFac \vEnd_{t}'(\aRat_{t}) \end{equation} +$$ Inverting the above equation is the (first) EGM step. +$$ \begin{equation} \cEndFunc_{t}(\aRat_{t}) = \utilFunc'^{-1}\left( \DiscFac \vEnd_{t}'(\aRat_{t}) \right) \end{equation} +$$ Given the utility function above, the marginal utility of consumption and its inverse are +$$ \begin{equation} \utilFunc'(\cRat) = \cRat^{-\CRRA} \qquad \utilFunc'^{-1}(\xRat) = \xRat^{-1/\CRRA}. \end{equation} +$$ {cite:t}`Carroll2006` demonstrates that by using an exogenous grid of $\aMat$ points we can find the unique $\cEndFunc_{t}(\aMat)$ that optimizes the consumption-saving problem, since the first-order condition is necessary and sufficient. Further, using the market resources constraint, we can recover the exact amount of market resources that is consistent with this consumption-saving decision as +$$ \begin{equation} \mEndFunc_{t}(\aMat) = \cEndFunc_{t}(\aMat) + \aMat. \end{equation} +$$ -This $\mEndFunc_{t}(\aMat)$ is the ``endogenous'' grid that is consistent with the exogenous decision grid $\aMat$. Now that we have a $(\mEndFunc_{t}(\aMat), \cEndFunc_{t}(\aMat))$ pair for each $\aRat \in \aMat$, we can construct an interpolating consumption function for market resources points that are off-the-grid. +This $\mEndFunc_{t}(\aMat)$ is the \`\`endogenous'' grid that is consistent with the exogenous decision grid $\aMat$. Now that we have a $(\mEndFunc_{t}(\aMat), \cEndFunc_{t}(\aMat))$ pair for each $\aRat \in \aMat$, we can construct an interpolating consumption function for market resources points that are off-the-grid. The envelope condition will be useful in the next section, but for completeness is defined here. +$$ \begin{equation} \vOpt_{t}'(\mRat_{t}) = \DiscFac \vEnd_{t}'(\aRat_{t}) = \utilFunc'(\cRat_{t}) \end{equation} +$$ ## The labor-leisure subproblem The labor-leisure subproblem can be restated more compactly as: +$$ \begin{equation} \vFunc_{t}(\bRat_{t}, \tShkEmp_{t}) = \max_{ \leisure_{t}} \h(\leisure_{t}) + \vOpt_{t}(\bRat_{t} + \tShkEmp_{t}(1-\leisure_{t})) \end{equation} +$$ The first-order condition with respect to leisure implies the labor-leisure Euler equation +$$ \begin{equation} \h'(\leisure_{t}) = \vOpt_{t}'(\mRat_{t}) \tShkEmp_{t} \end{equation} +$$ The marginal utility of leisure and its inverse are +$$ \begin{equation} \h'(\leisure) = \labShare\leisure^{-\leiShare} \qquad \h'^{-1}(\xRat) = (\xRat/\labShare)^{-1/\leiShare} \end{equation} +$$ Using an exogenous grid of $\mMat$ and $\tShkMat$, we can find leisure as +$$ \begin{equation} \zEndFunc_{t}(\mMat, \tShkMat) = \h'^{-1}\left( \vOpt_{t}'(\mMat) \tShkMat \right) \end{equation} +$$ In this case, it's important to note that there are conditions for leisure itself. An agent with a small level of market resources $\mRat_{t}$ might want to work more than their available time endowment, especially at higher levels of income $\tShkEmp_{t}$, if the utility of leisure is not enough to compensate for their low wealth. In these situations, the optimal unconstrained leisure might be negative, so we must impose a constraint on the optimal leisure function. This is similar to the treatment of an artificial borrowing constraint in the pure consumption subproblem. From now on, let's call this constrained optimal function $\hat{\zEndFunc}_{t}(\mMat, \tShkMat)$, where +$$ \begin{equation} \hat{\zEndFunc}_{t}(\mMat, \tShkMat) = \max \left[ \min \left[ \zEndFunc_{t}(\mMat, \tShkMat), 1 \right], 0 \right] \end{equation} +$$ Then, we derive labor as $\lEndFunc_{t}(\mRat_{t}, \tShkEmp_{t}) = 1 - \hat{\zEndFunc}_{t}(\mRat_{t}, \tShkEmp_{t})$. Finally, for each $\tShkEmp_{t}$ and $\mRat_{t}$ as an exogenous grid, we can find the endogenous grid of bank balances as $\bEndFunc_{t}(\mRat_{t}, \tShkEmp_{t}) = \mRat_{t} - \tShkEmp_{t}\lEndFunc_{t}(\mRat_{t}, \tShkEmp_{t})$. The envelope condition then provides a heterogeneous Frisch elasticity of labor as simply +$$ \begin{equation} \vFunc_{t}^{b}(\bRat_{t}, \tShkEmp_{t}) = \vOpt_{t}'(\mRat_{t}) = \h'(\leisure_{t})/\tShkEmp_{t}. \end{equation} +$$ ## Alternative Parametrization An alternative formulation for the utility of leisure is to state it in terms of the disutility of labor as in (references) +$$ \begin{equation} \h(\labor) = - \leiShare \frac{\labor^{1+\labShare}}{1+\labShare} \end{equation} +$$ In this case, we can restate the problem as +$$ \begin{equation} \h(\leisure) = - \leiShare \frac{(1-\leisure)^{1+\labShare}}{1+\labShare} \end{equation} +$$ The marginal utility of leisure and its inverse are +$$ \begin{equation} \h'(\leisure) = \leiShare(1-\leisure)^{\labShare} \qquad \h'^{-1}(\xRat) = 1 - (\xRat/\leiShare)^{1/\labShare} \end{equation} - -## Curvilinear Grids - -Although EGM$^n$ seems to be a simple approach, there is one important caveat that we have not discussed, which is the details of the interpolation. In the pure consumption-savings problem, a one-dimensional exogenous grid of post-decision liquid assets $\aMat$ results in a one-dimensional endogenous grid of total market resources $\mMat$. However, as we know from standard EGM, the spacing in the $\mMat$ grid is different from the spacing in the $\aMat$ grid as the inverted Euler equation is non-linear. This is no problem in a one-dimensional problem as we can simply use non-uniform linear interpolation. - -However, the same is true of higher dimensional problems, where the exogenous grid gets mapped to a warped endogenous grid. In this case, it is not possible to use standard multi-linear interpolation, as the resulting endogenous grid is not rectilinear. Instead, I introduce a novel approach to interpolation that I call Warped Grid Interpolation (WGI), which is similar to {cite:t}`White2015`'s approach but computationally more efficient and robust. The details of this interpolation method will be further explained in [Section %s](#multinterp), but for now, we show the resulting warped endogenous grid for the labor-leisure problem. - -```{figure} ../figures/LaborSeparableWarpedGrid.* -:name: fig:LaborSeparableWarpedGrid -:align: center - -Warped Curvlinear Grid that results from multivariate EGM. This grid can be interpolated by WGI. -``` - -## Warped Grid Interpolation (WGI) - -Assume we have a set of points indexed by $(i,j)$ in two-dimensional space for which we have corresponding functional values in a third dimension, such that $f(x_{ij},y_{ij}) = z_{ij}$. In practice, we are interested in cases where the $z_{ij}$ are difficult to compute and $f(x_{ij},y_{ij})$ is unknown, so we are unable to compute them at other values of $x$ and $y$ --- which is why we want to interpolate[^f3]. These $(x_{ij},y_{ij})$ points however are not evenly spaced and do not form a rectilinear grid which would make it easy to interpolate the function off the grid. Nevertheless, these points do have a regular structure as we will see. - -[^f3]: For this illustration, we generate $z$'s arbitrarily using the function $$f(x,y) = (xy)^{1/4}.$$ - -```{figure} ../figures/WarpedInterpolation.* -:name: fig:warped_interp -:align: center - -True function and curvilinear grid of points for which we know the value of the function. -``` - -In [Figure %s](#fig:warped_interp), we can see the true function in three-dimensional space, along with the points for which we actually know the value of the function. The underlying regular structure comes from the points' position in the matrix, the $(i,j)$ coordinates. If we join the points along every row and every column, we can see that the resulting grid is regular and piecewise affine (curvilinear). - -In [Figure %s](#fig:homotopy) we see the values of the function at their index coordinate points in the matrix. We can see that there exists a mapping between the curvilinear grid and the index coordinates of the matrix. - -```{figure} ../figures/Homotopy.* -:name: fig:homotopy -:align: center - -Homotopy between the curvilinear grid and the index coordinates of the matrix. -``` - -The objective is to be able to interpolate the value of the function at any point off the grid, where presumably we are only interested in points internal to the curvilinear space and not outside the boundaries. For example, we can imagine that we want an approximation to the function at the point $(x,y) = (3, 5)$ pictured [Figure %s](#fig:mapping). If we could find the corresponding point in the coordinate grid, interpolation would be straightforward. We can find where the $x$-coordinate of the point of interest intersects with the index-coordinates of the matrix. This is similar to assuming that we have 3 linear interpolators formed by connecting the points on the green lines in the x-direction, and for each interpolator we can approximate the corresponding y and z values using the grid data. Now, for each circle in [Figure %s](#fig:mapping), we have a corresponding pair $(y,z)$, and we can interpolate in the y-direction to find the corresponding z-value for the point's y-coordinate[^f4]. - -[^f4]: For more examples of the Warped Grid Interpolation method in action, see the github project [`alanlujan91/multinterp`](https://github.com/alanlujan91/multinterp/blob/main/notebooks/CurvilinearInterpolation.ipynb). - -```{figure} ../figures/Mapping.* -:name: fig:mapping -:align: center - -The method consist of extending the loci of points in the $x$ dimension to find the corresponding crossing points in the $y$ dimension. -``` +$$ diff --git a/content/paper/3_multdim.md b/content/paper/3_multdim.md index aa1cf9e2..fb30c541 100644 --- a/content/paper/3_multdim.md +++ b/content/paper/3_multdim.md @@ -1,14 +1,14 @@ - - (multdim)= + # The EGM$^n$ in Higher Dimensions The problem in [Section %s](#method) demonstrates the simplicity of solving problems sequentially. However, as constructed, the problem has only one state variable and one post-decision state variable per stage. Can EGM$^n$ be used to solve higher dimensional problems? In short, yes, but it requires additional thought on interpolation. -## A more complex problem +## The two-asset HANK model For a demonstration, we now turn to the problem of a worker saving up for retirement. This worker must consume, save, and deposit resources into a tax-advantaged account that can not be liquidated until retirement. In the recursive problem, the worker begins a new period with a liquid account of market resources $\mRat_{t}$ and an illiquid account of retirement savings $\nRat_{t}$. The worker maximizes their utility by choosing consumption $\cRat_{t}$ and pension deposit $\dRat_{t}$. The pension deposit is set aside on a retirement account that is exposed to a risky return, while their post-consumption liquid assets accrue risk-free interest every period. The worker additionally receives an income that faces a permanent ($\PGro_{t+1}$) and a transitory ($\tShkEmp_{t+1}$) shock every period. At the age of 65, the worker is retired and their assets are liquidated, at which point the state reduces to one liquid account of market resources. The worker's recursive problem is: +$$ \begin{equation} \begin{split} \vFunc_{t}(\mRat_{t}, \nRat_{t}) & = \max_{\cRat_{t}, \dRat_{t}} \util(\cRat_{t}) + \DiscFac \Ex_{t} @@ -20,12 +20,15 @@ For a demonstration, we now turn to the problem of a worker saving up for retire \nRat_{t+1} & = \bRat_{t} \Risky_{t+1} / / \PGro_{t+1} \end{split} \end{equation} +$$ where +$$ \begin{equation} \gFunc(\dRat) = \xFer \log(1+\dRat). \end{equation} +$$ This problem can subsequently be broken down into 3 stages: a pension deposit stage, a consumption stage, and an income shock stage. @@ -33,6 +36,7 @@ This problem can subsequently be broken down into 3 stages: a pension deposit st In the deposit stage, the worker begins with market resources and a retirement savings account. The worker must maximize their value of liquid wealth $\lRat_{t}$ and retirement balance $\bRat_{t}$ by choosing a pension deposit $\dRat_{t}$, which must be positive. The retirement balance $\bRat$ is the cash value of their retirement account plus their pension deposit and an additional amount $g(\dRat_{t})$ that provides an incentive to save for retirement. As we'll see, this additional term will allow us to use the Endogenous Grid Method to solve this subproblem. +$$ \begin{equation} \begin{split} \vFunc_{t}(\mRat_{t}, \nRat_{t}) & = \max_{\dRat_{t}} \vOpt_{t}(\lRat_{t}, \bRat_{t}) \\ @@ -41,9 +45,11 @@ In the deposit stage, the worker begins with market resources and a retirement s \bRat_{t} & = \nRat_{t} + \dRat_{t} + g(\dRat_{t}) \end{split} \end{equation} +$$ After making their pension decision, the worker begins their consumption stage with liquid wealth $\lRat_{t}$ and retirement balance $\bRat_{t}$. From their liquid wealth, the worker must choose a level of consumption to maximize utility and continuation value $\wFunc_{t}$. After consumption, the worker is left with post-decision states that represent liquid assets $\aRat_{t}$ and retirement balance $\bRat_{t}$, which passes through this problem unaffected because it can't be liquidated until retirement. +$$ \begin{equation} \begin{split} \vOpt_{t}(\lRat_{t}, \bRat_{t}) & = \max_{\cRat_{t}} \util(\cRat_{t}) + \DiscFac \wFunc_{t}(\aRat_{t}, \bRat_{t}) \\ @@ -51,9 +57,11 @@ After making their pension decision, the worker begins their consumption stage w \aRat_{t} & = \lRat_{t} - \cRat_{t} \end{split} \end{equation} +$$ Finally, the post-decision value function $\wFunc_{t}$ represents the value of both liquid and illiquid account balances before the realization of uncertainty regarding the risky return and income shocks. Since we are dealing with a normalized problem, this stage handles the normalization of state variables and value functions into the next period. +$$ \begin{equation} \begin{split} \wFunc_{t}(\aRat_{t}, \bRat_{t}) & = \Ex_{t} @@ -63,6 +71,7 @@ Finally, the post-decision value function $\wFunc_{t}$ represents the value of b \nRat_{t+1} & = \bRat_{t} \Risky_{t+1} / \PGro_{t+1} \end{split} \end{equation} +$$ The advantage of conceptualizing this subproblem as a separate stage is that we can construct a function $\wFunc_{t}$ and use it in the prior optimization problems without having to worry about stochastic optimization and taking expectations repeatedly. @@ -76,60 +85,75 @@ In the deposit stage, both the state variables and post-decision variables are d First, we can rewrite the pension deposit problem more compactly: +$$ \begin{equation} \vFunc_{t}(\mRat_{t}, \nRat_{t}) = \max_{\dRat_{t}} \vOpt_{t}(\mRat_{t} - \dRat_{t}, \nRat_{t} + \dRat_{t} + \gFunc(\dRat_{t})) \end{equation} +$$ The first-order condition is +$$ \begin{equation} \vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t})(-1) + \vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t})(1+\gFunc'(\dRat_{t})) = 0. \end{equation} +$$ Rearranging this equation gives +$$ \begin{equation} \gFunc'(\dRat_{t}) = \frac{\vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t})}{\vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t})} - 1 \end{equation} +$$ where +$$ \begin{equation} \gFunc'(\dRat) = \frac{\xFer}{1+\dRat} \qquad \gFunc'^{-1}(y) = \xFer/y - 1 \end{equation} +$$ Given that $\gFunc'(\dRat)$ exists and is invertible, we can find +$$ \begin{equation} \dEndFunc_{t}(\lRat_{t}, \bRat_{t}) = \gFunc'^{-1}\left( \frac{\vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t})}{\vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t})} - 1 \right) \end{equation} +$$ Using this, we can back out $\nRat_{t}$ as +$$ \begin{equation} \nEndFunc_{t}(\lRat_{t}, \bRat_{t}) = \bRat_{t} - \dEndFunc_{t}(\lRat_{t}, \bRat_{t}) - \gFunc(\dEndFunc_{t}(\lRat_{t}, \bRat_{t})) \end{equation} +$$ and $\mRat_{t}$ as +$$ \begin{equation} \mEndFunc_{t}(\lRat_{t}, \bRat_{t}) = \lRat_{t} + \dEndFunc_{t}(\lRat_{t}, \bRat_{t}) \end{equation} +$$ In sum, given an exogenous grid $(\lRat_{t}, \bRat_{t})$ we obtain the triple $\left(\mEndFunc_{t}(\lRat_{t}, \bRat_{t}), \nEndFunc_{t}(\lRat_{t}, \bRat_{t}), \dEndFunc_{t}(\lRat_{t}, \bRat_{t})\right)$, which we can use to create an interpolator for the decision rule $\dRat_{t}$. To close the solution method, the envelope conditions are +$$ \begin{equation} \begin{split} \vFunc_{t}^{\mRat}(\mRat_{t}, \nRat_{t}) & = @@ -138,22 +162,25 @@ To close the solution method, the envelope conditions are \vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t}) \end{split} \end{equation} +$$ ## Unstructured Grid Interpolation ```{figure} ../figures/SparsePensionExogenousGrid.* -:name: fig:exog -:align: center - +--- +name: fig:exog +align: center +--- A regular, rectilinear exogenous grid of pension balances after deposit $\bRat_{t}$ and liquid assets after consumption $\lRat_{t}$. ``` As in [Section %s](#method), the resulting endogenous grid is not rectilinear, and in this more complex problem it is not even a regular grid. We can see in [Figure %s](#fig:exog) that starting from a regular and rectilinear exogenous grid of liquid assets post-consumption $\lRat_{t}$ and pension balances post-deposit $\bRat_{t}$, we obtain [Figure %s](#fig:endog) which shows an irregular and unstructured endogenous grid of market resources $\mRat_{t}$ and pension balances pre-deposit $\nRat_{t}$. ```{figure} ../figures/PensionEndogenousGrid.* -:name: fig:endog -:align: center - +--- +name: fig:endog +align: center +--- An irregular, unstructured endogenous grid of market resources $\mRat_{t}$ and pension balances before deposit $\nRat_{t}$. ``` diff --git a/content/paper/4_multinterp.md b/content/paper/4_multinterp.md index 4cf32cc1..6e157051 100644 --- a/content/paper/4_multinterp.md +++ b/content/paper/4_multinterp.md @@ -1,8 +1,68 @@ - - (multinterp)= + # Multivariate Interpolation on Unstructured Grids +## Curvilinear Grids + +Although EGM$^n$ seems to be a simple approach, there is one important caveat that we have not discussed, which is the details of the interpolation. In the pure consumption-savings problem, a one-dimensional exogenous grid of post-decision liquid assets $\aMat$ results in a one-dimensional endogenous grid of total market resources $\mMat$. However, as we know from standard EGM, the spacing in the $\mMat$ grid is different from the spacing in the $\aMat$ grid as the inverted Euler equation is non-linear. This is no problem in a one-dimensional problem as we can simply use non-uniform linear interpolation. + +However, the same is true of higher dimensional problems, where the exogenous grid gets mapped to a warped endogenous grid. In this case, it is not possible to use standard multi-linear interpolation, as the resulting endogenous grid is not rectilinear. Instead, I introduce a novel approach to interpolation that I call Warped Grid Interpolation (WGI), which is similar to {cite:t}`White2015`'s approach but computationally more efficient and robust. The details of this interpolation method will be further explained in [Section %s](#multinterp), but for now, we show the resulting warped endogenous grid for the labor-leisure problem. + +```{figure} ../figures/LaborSeparableWarpedGrid.* +--- +name: fig:LaborSeparableWarpedGrid +align: center +--- +Warped Curvlinear Grid that results from multivariate EGM. This grid can be interpolated by WGI. +``` + +## Warped Grid Interpolation (WGI) + +Assume we have a set of points indexed by $(i,j)$ in two-dimensional space for which we have corresponding functional values in a third dimension, such that $f(x_{ij},y_{ij}) = z_{ij}$. In practice, we are interested in cases where the $z_{ij}$ are difficult to compute and $f(x_{ij},y_{ij})$ is unknown, so we are unable to compute them at other values of $x$ and $y$ --- which is why we want to interpolate[^f3]. These $(x_{ij},y_{ij})$ points however are not evenly spaced and do not form a rectilinear grid which would make it easy to interpolate the function off the grid. Nevertheless, these points do have a regular structure as we will see. + +```{figure} ../figures/WarpedInterpolation.* +--- +name: fig:warped_interp +align: center +--- +True function and curvilinear grid of points for which we know the value of the function. +``` + +In [Figure %s](#fig:warped_interp), we can see the true function in three-dimensional space, along with the points for which we actually know the value of the function. The underlying regular structure comes from the points' position in the matrix, the $(i,j)$ coordinates. If we join the points along every row and every column, we can see that the resulting grid is regular and piecewise affine (curvilinear). + +In [Figure %s](#fig:homotopy) we see the values of the function at their index coordinate points in the matrix. We can see that there exists a mapping between the curvilinear grid and the index coordinates of the matrix. + +```{figure} ../figures/Homotopy.* +--- +name: fig:homotopy +align: center +--- +Homotopy between the curvilinear grid and the index coordinates of the matrix. +``` + +The objective is to be able to interpolate the value of the function at any point off the grid, where presumably we are only interested in points internal to the curvilinear space and not outside the boundaries. For example, we can imagine that we want an approximation to the function at the point $(x,y) = (3, 5)$ pictured [Figure %s](#fig:mapping). If we could find the corresponding point in the coordinate grid, interpolation would be straightforward. We can find where the $x$-coordinate of the point of interest intersects with the index-coordinates of the matrix. This is similar to assuming that we have 3 linear interpolators formed by connecting the points on the green lines in the x-direction, and for each interpolator we can approximate the corresponding y and z values using the grid data. Now, for each circle in [Figure %s](#fig:mapping), we have a corresponding pair $(y,z)$, and we can interpolate in the y-direction to find the corresponding z-value for the point's y-coordinate[^f4]. + +```{figure} ../figures/Mapping.* +--- +name: fig:mapping +align: center +--- +The method consist of extending the loci of points in the $x$ dimension to find the corresponding crossing points in the $y$ dimension. +``` + + \$$ + $$ + \begin{equation} + \utilFunc(\cRat_{t}, \leisure_{t}) = \PLev_{t}^{1-\CRRA} \frac{\cRat_{t}^{1-\CRRA}}{1-\CRRA} + (\labShare\PLev_{t}) + ^{1-\CRRA} \frac{\leisure_{t}^{1-\leiShare}}{1-\leiShare} + \end{equation} + $$ + $\$ + +[^f3]: For this illustration, we generate $z$'s arbitrarily using the function \$$f(x,y) = (xy)^{1/4}.$\$ + +[^f4]: For more examples of the Warped Grid Interpolation method in action, see the github project [`alanlujan91/multinterp`](https://github.com/alanlujan91/multinterp/blob/main/notebooks/CurvilinearInterpolation.ipynb). + This section presents alternative interpolation methods for non-rectilinear grids. First, I present the relatively simple case of fast warped interpolation on a curvilinear grid, which improves upon the interpolation in {cite:t}`White2015`. Then, I present a machine learning approach to interpolation on unstructured grids based on Gaussian Process Regression as presented in {cite:t}`Scheidegger2019`. ## Unstructured Grids @@ -11,14 +71,13 @@ Unstructured interpolation arises in many dynamic programming applications when As an alternative to these methods, I introduce the use of Gaussian Process Regression (GPR) along with the Endogenous Grid Method. GPR is computationally efficient, and tools exist to easily parallelize and take advantage of hardware such as Graphics Processing Units (GPU)[^f5]. -[^f5]: {cite:t}`Gardner2018` - %note: spell out GPU maybe or explain it in some way? ### Gaussian Process Regression A Gaussian Process is an infinite dimensional random process for which every subset of random variables is jointly Gaussian or has a multivariate normal distribution. +$$ \begin{equation} \begin{gathered} \mathbf{X} \sim \mathcal{N}(\mathbf{\mu}, \mathbf{\Sigma}) \quad \text{s.t.} \quad x_i \sim \mathcal{N}(\mu_i, \sigma_ @@ -26,9 +85,11 @@ A Gaussian Process is an infinite dimensional random process for which every sub \text{and} \quad \sigma_{ij} = \Ex[(x_i - \mu_i)(x_j - \mu_j)] \quad \forall i,j \in \{1, \ldots, n\}. \end{gathered} \end{equation} +$$ where +$$ \begin{equation} \mathbf{X} = \begin{bmatrix} x_1 \\ @@ -51,21 +112,26 @@ where \sigma_{n1} & \sigma_{n2} & \cdots & \sigma_{nn} \end{bmatrix}. \end{equation} +$$ Being infinitely dimensional, a Gaussian Process can be used to represent a probability distribution over the space of functions in $n$ dimensions. Thus, a Gaussian Process Regression is used to find the best fit function to a set of data points. +$$ \begin{equation} \mathbb{P}(\mathbf{f} | \mathbf{X}) = \mathcal{N}(\mathbf{f} | \mathbf{m}, \mathbf{K}) \end{equation} +$$ where $\mathbf{f}$ is the vector of function values at the points $\mathbf{X}$, $\mathbf{m}$ is the mean of the function, and $\mathbf{K}$ is a kernel function that describes the covariance between the function values at different points. A standard kernel function is the squared exponential kernel, or the radial basis function kernel, which is defined as +$$ \begin{equation} k(\mathbf{x}_i, \mathbf{x}_j) = \sigma^2_f \exp\left(-\frac{1}{2l^2} (\mathbf{x}_i - \mathbf{x}_j)' (\mathbf{x}_i - \mathbf{x}_j)\right). \end{equation} +$$ Using GPR to interpolate a function $f$, we can both predict the value of the function at a point $\mathbf{x}_*$ and the uncertainty in the prediction, which provides useful information as to the accuracy of the approximation. @@ -74,28 +140,33 @@ Using GPR to interpolate a function $f$, we can both predict the value of the fu In [Figure %s](#fig:true_function), we see the function we are trying to approximate along with a sample of data points for which we know the value of the function. In practice, the value of the function is unknown and/or expensive to compute, so we must use a limited amount of data to approximate it. ```{figure} ../figures/GPR_True_Function.* -:name: fig:true_function -:align: center - +--- +name: fig:true_function +align: center +--- The true function that we are trying to approximate and a sample of data points. ``` As we discussed, a Gaussian Process is an infinite dimensional random process which can be used to represent a probability of distributions over the space of functions. In [Figure %s](#fig:gpr_sample), we see a random sample of functions from the GPR posterior, which is a Gaussian Process conditioned on fitting the data. From this small sample of functions, we can see that the GP generates functions that fit the data well, and the goal of GPR is to find the one function that best fits the data given some hyperparameters by minimizing the negative log-likelihood of the data. ```{figure} ../figures/GPR_Posterior_Sample.* -:name: fig:gpr_sample -:align: center - +--- +name: fig:gpr_sample +align: center +--- A random sample of functions from the GPR posterior that fit the data. The goal of GPR is to find the function that best fits the data. ``` -In [Figure %s](#fig:gpr), we see the result of GPR with a particular parametrization[^f6] of the kernel function. The dotted line shows the true function, while the blue dots show the known data points. GPR provides the mean function which best fits the data, represented in the figure as an orange line. The shaded region represents a 95\% confidence interval, which is the uncertainty of the predicted function. Along with finding the best fit of the function, GPR provides the uncertainty of the prediction, which is useful information as to the accuracy of the approximation. - -[^f6]: For details see notebook. +In [Figure %s](#fig:gpr), we see the result of GPR with a particular parametrization[^f6] of the kernel function. The dotted line shows the true function, while the blue dots show the known data points. GPR provides the mean function which best fits the data, represented in the figure as an orange line. The shaded region represents a 95% confidence interval, which is the uncertainty of the predicted function. Along with finding the best fit of the function, GPR provides the uncertainty of the prediction, which is useful information as to the accuracy of the approximation. ```{figure} ../figures/GaussianProcessRegression.* -:name: fig:gpr -:align: center - +--- +name: fig:gpr +align: center +--- GPR finds the function that best fits the data given some hyperparameters. GPR then optimizes over the parameter space to find the function that minimizes the negative log-likelihood of the data. ``` + +[^f5]: {cite:t}`Gardner2018` + +[^f6]: For details see notebook. diff --git a/content/paper/5_conditions.md b/content/paper/5_conditions.md index 53f08ee6..cb44d04e 100644 --- a/content/paper/5_conditions.md +++ b/content/paper/5_conditions.md @@ -1,6 +1,5 @@ - - (conditions)= + # Conditions for using the Sequential Endogenous Grid Method ## Splitting the problem into subproblems @@ -26,17 +25,21 @@ As mentioned in that section, however, there are only two separable utility func Now that we have split the problem into conceptual subproblems, it is important to sequence them in such a way that they don't become more complex than the original problem. The key here is to avoid adding unnecessary state variables. For example, in the consumption-leisure-portfolio problem, if we were to choose consumption first, we would have to track the wage rate into the following leisure subproblem. This would mean that our consumption problem would be two-dimensional as well as our labor decision problem. As presented, the choice of order in [Section %s](#method) ensures that the consumption problem is one-dimensional, as we can shed the information about the wage rate offer after the agent has made their labor-leisure decision. If we did this the other way, the problem would be more complex and require additional computational resources. The consumption subproblem would be two-dimensional instead of one-dimensional, adding more complexity, - +\$$ +$$ \begin{equation} - \begin{split} - \vFunc(\bRat, \tShkEmp) & = \max_{\cRat} \uFunc(\cRat) + \vOpt(\bRat', \tShkEmp) \\ - & \text{s.t.}\\ - \bRat' & = \bRat - \cRat \ge - \tShkEmp - \end{split} +\begin{split} +\vFunc(\bRat, \tShkEmp) & = \max_{\cRat} \uFunc(\cRat) + \vOpt(\bRat', \tShkEmp) \\ +& \text{s.t.}\\ +\bRat' & = \bRat - \cRat \ge - \tShkEmp +\end{split} \end{equation} +$$ +$\$ while the labor-leisure subproblem would have an additional constraint +$$ \begin{equation} \begin{split} \vOpt(\bRat', \tShkEmp) & = \max_{\leisure} \h(\leisure) + \vEnd(\aRat) \\ @@ -45,19 +48,23 @@ while the labor-leisure subproblem would have an additional constraint \aRat & = \bRat' + \tShkEmp(1 - \leisure) \ge 0. \end{split} \end{equation} +$$ Therefore, strategic ordering of subproblems can greatly simplify the solution process and reduce computational the burden. Consider the utility function of the form +$$ \begin{equation} \UFunc( \yRat) = \uFunc_{-i}( \yRat^{-i}) + \uFunc_i(\yRat^i) \end{equation} +$$ where $\yRat^{i}$ is the $i$-th control variable and $\yRat^{-i}$ is the vector of all control variables except the $i$-th one. which is separable in the state and control variables that correspond to the index $i$. +$$ \begin{equation} \begin{split} \VFunc_{t}(\xRat_t, \sRat_t) &= \max_{\yRat_t \in \Gamma_t(\xRat_t, \sRat_t)} \UFunc(\yRat_t) + \DiscFac \Ex_{t} \left[ \VFunc_{t+1}(\xRat_{t+1}, \sRat_{t+1}) | \tilde{\xRat}_t, \sRat_t \right] \\ @@ -66,15 +73,19 @@ which is separable in the state and control variables that correspond to the ind \xRat_{t+1} &= \GFunc_{t+1}(\tilde{\xRat}_t, \sRat_t) \\ \end{split} \end{equation} +$$ For simplicity, define +$$ \begin{equation} \WFunc_t(\tilde{\xRat}_t, \sRat_t) = \DiscFac \Ex_{t} \left[ \VFunc_{t+1}(\GFunc_{t+1}(\tilde{\xRat}_t, \sRat_t), \sRat_{t+1}) | \tilde{\xRat}_t, \sRat_t \right] \end{equation} +$$ then +$$ \begin{equation} \begin{split} \VFunc_{t}(\xRat_t, \sRat_t) &= \max_{\yRat_t \in \Gamma_t(\xRat_t, \sRat_t)} \UFunc( \yRat_t) + \WFunc_t(\tilde{\xRat}_t, \sRat_t) \\ @@ -82,19 +93,23 @@ then \tilde{\xRat}_t &= \TFunc_t(\xRat_t, \yRat_t) \end{split} \end{equation} +$$ the first order condition +$$ \begin{equation} \frac{\partial \UFunc( \yRat_t)}{\partial \yRat_t^i} + \sum_{j=1}^{n} \frac{\partial \WFunc_t(\tilde{\xRat}_t, \sRat_t)}{\partial \tilde{\xRat}_{t}^j} \frac{\partial \TFunc_{t}^j(\xRat_t, \yRat_t)}{\partial \yRat_t^i} = 0 \end{equation} +$$ we require $\frac{\partial \TFunc_{t}^j(\xRat_t, \yRat_t)}{\partial \yRat_t^i} = 0$ for $j \neq i$ to be able to solve for $\yRat_t^i$. +$$ \begin{equation} \frac{\partial \UFunc( \yRat_t)}{\partial \yRat_t^i} + \frac{\partial \WFunc_t(\tilde{\xRat}_t, \sRat_t)}{\partial \tilde{\xRat}_{t}^i} \frac{\partial \TFunc_{t}^i(\xRat_t, \yRat_t)}{\partial \yRat_t^i} = 0 \end{equation} - +$$ ### Differentiable and invertible transition @@ -114,6 +129,7 @@ Once we have strategically split the problem into subproblems, we can use the En A generic subproblem with a differentiable and invertible utility function can be characterized as follows: +$$ \begin{equation} \begin{split} \VFunc(\xRat) & = \max_{\yRat \in \PGro(\xRat)} \UFunc(\xRat, \yRat) + \DiscFac \WFunc(\aRat) \\ @@ -121,19 +137,24 @@ A generic subproblem with a differentiable and invertible utility function can b \aRat & = \TFunc(\xRat,\yRat) \end{split} \end{equation} +$$ For an interior solution, the first-order condition is thus +$$ \begin{equation} \UFunc'_{\yRat}(\xRat, \yRat) + \DiscFac \WFunc'(\aRat)\TFunc'_{\yRat}(\xRat,\yRat) = 0 \end{equation} +$$ If, as we assumed, the utility function is differentiable and invertible, then the Endogenous Grid Method consists of +$$ \begin{equation} \yRat = \left(\UFunc'_{\yRat}(\xRat, \yRat)\right)^{-1} \left[ -\DiscFac \WFunc'(\aRat)\TFunc'_{\yRat}(\xRat,\yRat)\right] \end{equation} +$$ By using an exogenous grid of the post-decision state $\aRat$, we can solve for the optimal decision rule $\yRat$ at each point on the grid. This is the Endogenous Grid Method step. @@ -141,6 +162,7 @@ By using an exogenous grid of the post-decision state $\aRat$, we can solve for If the generic subproblem has no separable utility, but instead has a differentiable and invertible transition, then the Endogenous Grid Method can still be used. +$$ \begin{equation} \begin{split} \VFunc(\xRat) & = \max_{\yRat \in \PGro(\xRat)} \WFunc(\aRat) \\ @@ -148,15 +170,20 @@ If the generic subproblem has no separable utility, but instead has a differenti \aRat & = \TFunc(\xRat,\yRat) \end{split} \end{equation} +$$ Here, the first-order condition is +$$ \begin{equation} \WFunc'(\aRat)\TFunc'_{\yRat}(\xRat,\yRat) = 0 \end{equation} +$$ and the Endogenous Grid Method step is +$$ \begin{equation} \yRat = \left(\TFunc'_{\yRat}(\xRat,\yRat)\right)^{-1} \left[ 1 / \WFunc'(\aRat)\right] \end{equation} +$$ diff --git a/content/paper/6_conclusion.md b/content/paper/6_conclusion.md index 343f8fcd..5fb4e402 100644 --- a/content/paper/6_conclusion.md +++ b/content/paper/6_conclusion.md @@ -1,5 +1,5 @@ - (conclusion)= + # Conclusion % Summarize the method: Begin your conclusion by summarizing the new computational method you developed or proposed. Provide a brief overview of the key features of the method and how it differs from existing methods. @@ -8,10 +8,6 @@ This paper introduces a novel method for solving dynamic stochastic optimization EGM$^n$ is similar to the Nested Endogenous Grid Method (NEGM)[^NEGM] and the Generalized Endogenous Grid Method (G2EGM)[^G2EGM] in that it can solve problems with multiple decisions, but it differs from these methods in that by choosing the subproblems strategically, we can take advantage of multiple sequential EGM steps to solve complex multidimensional models in a fast and efficient manner. Additionally, the use of machine learning tools such as the GPR overcomes bottlenecks seen in unstructured interpolation using Delauany triangulation and other similar methods. -[^NEGM]: {cite:t}`Druedahl2021`. - -[^G2EGM]: {cite:t}`Druedahl2017`. - % Evaluate the method: Evaluate the strengths and limitations of the new computational method you developed or proposed. Discuss how the method compares to existing methods in terms of accuracy, efficiency, and ease of use. % Demonstrate the method: If possible, provide an example of how the new computational method can be used to solve a problem or answer a research question. This will help the reader understand the practical implications of the method. @@ -21,3 +17,7 @@ EGM$^n$ is similar to the Nested Endogenous Grid Method (NEGM)[^NEGM] and the Ge % Discuss future directions: Provide suggestions for future research based on the new computational method you developed or proposed. This can include improvements to the method, potential extensions to other areas of research, or new applications of the method. % Conclude with final thoughts: End your conclusion with some final thoughts that tie together the main points of your paper. This will help leave a lasting impression on the reader. + +[^NEGM]: {cite:t}`Druedahl2021`. + +[^G2EGM]: {cite:t}`Druedahl2017`. diff --git a/content/paper/7_appendix.md b/content/paper/7_appendix.md index e6cfcc76..8467bcd3 100644 --- a/content/paper/7_appendix.md +++ b/content/paper/7_appendix.md @@ -6,6 +6,7 @@ I designate as $\wFunc_{t}(\mRat_{t})$ the problem of a retired household at time $t$ with total resources $\mRat$. The retired household solves a simple consumption-savings problem with no income uncertainty and a certain next period pension of $\underline{\tShkEmp}$. +$$ \begin{equation} \begin{split} \wFunc_{t}(\mRat_{t}) & = \max_{\cRat_{t}} \util(\cRat_{t}) + @@ -16,6 +17,7 @@ I designate as $\wFunc_{t}(\mRat_{t})$ the problem of a retired household at tim \underline{\tShkEmp} \end{split} \end{equation} +$$ Notice that there is no uncertainty and the household receives a retirement income $\underline{\tShkEmp}$ every period until death. @@ -23,6 +25,7 @@ Notice that there is no uncertainty and the household receives a retirement inco The value function of a worker household is +$$ \begin{equation} \VFunc_{t}(\mRat_{t}, \nRat_{t}) = \Ex_\error \max \left\{ \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Work) + \sigma_{\error} @@ -30,9 +33,11 @@ The value function of a worker household is \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Retire) + \sigma_{\error} \error_{\Retire} \right\} \end{equation} +$$ where the choice specific problem for a working household that decides to continue working is +$$ \begin{equation} \begin{split} \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Work) & = \max_{\cRat_{t}, @@ -47,18 +52,22 @@ where the choice specific problem for a working household that decides to contin \nRat_{t+1} & = \Rfree_{\bRat} \bRat_{t} \end{split} \end{equation} +$$ and the choice specific problem for a working household that decides to retire is +$$ \begin{equation} \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Retire) = \wFunc_{t}(\mRat_{t}+\nRat_{t}) \end{equation} +$$ ## Applying the Sequential EGM The first step is to define a post-decision value function. Once the household decides their level of consumption and pension deposits, they are left with liquid assets they are saving for the future and illiquid assets in their pension account which they can't access again until retirement. The post-decision value function can be defined as +$$ \begin{equation} \begin{split} \vEnd_{t}(\aRat_{t}, \bRat_{t}) & = \DiscFac @@ -68,9 +77,11 @@ The first step is to define a post-decision value function. Once the household d \nRat_{t+1} & = \Rfree_{\bRat} \bRat_{t} \end{split} \end{equation} +$$ Then redefine the working agent's problem as +$$ \begin{equation} \begin{split} \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Work) & = \max_{\cRat_{t}, @@ -80,9 +91,11 @@ Then redefine the working agent's problem as \bRat_{t} & = \nRat_{t} + \dRat_{t} + \gFunc(\dRat_{t}) \\ \end{split} \end{equation} +$$ Clearly, the structure of the problem remains the same, and this is the problem that G2EGM solves. We've only moved some of the stochastic mechanics out of the problem. Now, we can apply the sequential EGM$^n$ method. Let the agent first decide $\dRat_{t}$, the deposit amount into their retirement; we will call this the deposit problem, or outer loop. Thereafter, the agent will have net liquid assets of $\lRat_{t}$ and pension assets of $\bRat_{t}$. +$$ \begin{equation} \begin{split} \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Work) & = \max_{\dRat_{t}} @@ -92,9 +105,11 @@ Clearly, the structure of the problem remains the same, and this is the problem \bRat_{t} & = \nRat_{t} + \dRat_{t} + \gFunc(\dRat_{t}) \end{split} \end{equation} +$$ Now, the agent can move on to picking their consumption and savings; we can call this the pure consumption problem or inner loop. +$$ \begin{equation} \begin{split} \vOpt_{t}(\lRat_{t}, \bRat_{t}) & = \max_{\cRat_{t}} @@ -103,6 +118,7 @@ Now, the agent can move on to picking their consumption and savings; we can call \aRat_{t} & = \lRat_{t} - \cRat_{t} \\ \end{split} \end{equation} +$$ Because we've already made the pension decision, the amount of pension assets does not change in this loop and it just passes through to the post-decision value function. @@ -112,39 +128,48 @@ Because we've already made the pension decision, the amount of pension assets do Let's start with the pure consumption-saving problem, which we can summarize by substitution as +$$ \begin{equation} \vOpt_{t}(\lRat_{t}, \bRat_{t}) = \max_{\cRat_{t}} \util(\cRat_{t}) - \kapShare + \vEnd_{t}(\lRat_{t} - \cRat_{t}, \bRat_{t}) \end{equation} +$$ The first-order condition is +$$ \begin{equation} \util'(\cRat_{t}) = \vEnd_{t}^{\aRat}(\lRat_{t}-\cRat_{t}, \bRat_{t}) = \vEnd_{t}^{\aRat}(\aRat_{t}, \bRat_{t}) \end{equation} +$$ We can invert this Euler equation as in standard EGM to obtain the consumption function. +$$ \begin{equation} \cEndFunc_{t}(\aRat_{t}, \bRat_{t}) = \util'^{-1}\left(\vEnd_{t}^{\aRat}(\aRat_{t}, \bRat_{t})\right) \end{equation} +$$ Again as before, $\lEndFunc_{t}(\aRat_{t}, \bRat_{t}) = - \cEndFunc_{t}(\aRat_{t}, \bRat_{t}) + \aRat_{t}$. To sum up, using an exogenous grid of $(\aRat_{t}, \bRat_{t})$ we obtain the trio $(\cEndFunc_{t}(\aRat_{t}, - \bRat_{t}), \lEndFunc_{t}(\aRat_{t}, - \bRat_{t}), \bRat_{t})$ which provides an interpolating function for our optimal consumption decision rule over the +\cEndFunc_{t}(\aRat_{t}, \bRat_{t}) + \aRat_{t}$. To sum up, using an exogenous grid of $(\aRat_{t}, \bRat_{t})$ we obtain the trio $(\cEndFunc_{t}(\aRat_{t}, +\bRat_{t}), \lEndFunc_{t}(\aRat_{t}, +\bRat_{t}), \bRat_{t})$ which provides an interpolating function for our optimal consumption decision rule over the $(\lRat, \bRat)$ grid. Without loss of generality, assume $\lEndFunc_{t} = - \lEndFunc_{t}(\aRat_{t}, \bRat_{t})$ and define the interpolating function as +\lEndFunc_{t}(\aRat_{t}, \bRat_{t})$ and define the interpolating function as +$$ \begin{equation} \cTarg_{t}(\lEndFunc_{t}, \bRat_{t}) \equiv \cEndFunc_{t}(\aRat_{t}, \bRat_{t}) \end{equation} +$$ For completeness, we derive the envelope conditions as well, and as we will see, these will be useful when solving the next section. +$$ \begin{equation} \begin{split} \vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t}) & = @@ -153,61 +178,75 @@ For completeness, we derive the envelope conditions as well, and as we will see, \vEnd_{t}^{\bRat}(\aRat_{t}, \bRat_{t}) \end{split} \end{equation} +$$ ### Solving the Outer Pension Deposit Problem Now, we can move on to solving the deposit problem, which we can also summarize as +$$ \begin{equation} \vFunc_{t}(\mRat_{t}, \nRat_{t}, \Work) = \max_{\dRat_{t}} \vOpt_{t}(\mRat_{t} - \dRat_{t}, \nRat_{t} + \dRat_{t} + \gFunc(\dRat_{t})) \end{equation} +$$ The first-order condition is +$$ \begin{equation} \vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t})(-1) + \vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t})(1+\gFunc'(\dRat_{t})) = 0 \end{equation} +$$ Rearranging this equation gives +$$ \begin{equation} \gFunc'(\dRat_{t}) = \frac{\vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t})}{\vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t})} - 1 \end{equation} +$$ Assuming that $\gFunc'(\dRat)$ exists and is invertible, we can find +$$ \begin{equation} \dEndFunc_{t}(\lRat_{t}, \bRat_{t}) = \gFunc'^{-1}\left( \frac{\vOpt_{t}^{\lRat}(\lRat_{t}, \bRat_{t})}{\vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t})} - 1 \right) \end{equation} +$$ Using this, we can back out $\nRat_{t}$ as +$$ \begin{equation} \nEndFunc_{t}(\lRat_{t}, \bRat_{t}) = \bRat_{t} - \dEndFunc_{t}(\lRat_{t}, \bRat_{t}) - \gFunc(\dEndFunc_{t}(\lRat_{t}, \bRat_{t})) \end{equation} +$$ and $\mRat_{t}$ as +$$ \begin{equation} \mEndFunc_{t}(\lRat_{t}, \bRat_{t}) = \lRat_{t} + \dEndFunc_{t}(\lRat_{t}, \bRat_{t}) \end{equation} +$$ In sum, given an exogenous grid $(\lRat_{t}, \bRat_{t})$ we obtain the triple $\left(\mEndFunc_{t}(\lRat_{t}, \bRat_{t}), \nEndFunc_{t}(\lRat_{t}, - \bRat_{t}), \dEndFunc_{t}(\lRat_{t}, \bRat_{t})\right)$, which we can use to create an interpolator for the decision rule $\dRat_{t}$. +\bRat_{t}), \dEndFunc_{t}(\lRat_{t}, \bRat_{t})\right)$, which we can use to create an interpolator for the decision rule $\dRat_{t}$. To close the solution method, the envelope conditions are +$$ \begin{equation} \begin{split} \vFunc_{t}^{\mRat}(\mRat_{t}, \nRat_{t}, \Work) & = @@ -216,18 +255,22 @@ To close the solution method, the envelope conditions are \vOpt_{t}^{\bRat}(\lRat_{t}, \bRat_{t}) \end{split} \end{equation} +$$ ## Is g invertible? We've already seen that $\util'(\cdot)$ is invertible, but is $\gFunc$? +$$ \begin{equation} \gFunc(\dRat) = \xFer \log(1+\dRat) \qquad \gFunc'(\dRat) = \frac{\xFer}{1+\dRat} \qquad \gFunc'^{-1}(y) = \xFer/y - 1 \end{equation} +$$ ## The Post-Decision Value and Marginal Value Functions +$$ \begin{equation} \begin{split} \vEnd_{t}(\aRat, \bRat) & = \DiscFac \Ex_{t} \left[ @@ -237,9 +280,11 @@ We've already seen that $\util'(\cdot)$ is invertible, but is $\gFunc$? \nRat_{t+1} & = \Rfree_{\bRat} \bRat_{t} \end{split} \end{equation} +$$ and +$$ \begin{equation} \begin{split} \vEnd_{t}^{\aRat}(\aRat_{t}, \bRat_{t}) & = \DiscFac @@ -251,9 +296,11 @@ and \nRat_{t+1} & = \Rfree_{\bRat} \bRat_{t} \end{split} \end{equation} +$$ and +$$ \begin{equation} \begin{split} \vEnd_{t}^{\bRat}(\aRat_{t}, \bRat_{t}) & = \DiscFac @@ -265,11 +312,13 @@ and \nRat_{t+1} & = \Rfree_{\bRat} \bRat_{t} \end{split} \end{equation} +$$ ## Taste Shocks From discrete choice theory and from DCEGM paper, we know that +$$ \begin{equation} \Ex_{t} \left[ \VFunc_{t+1}(\mRat_{t+1}, \nRat_{t+1}, \error_{t+1}) \right] = @@ -277,9 +326,11 @@ From discrete choice theory and from DCEGM paper, we know that \frac{\vFunc_{t+1}(\mRat_{t+1}, \nRat_{t+1}, \Decision)}{\sigma_\error} \right) \right] \end{equation} +$$ and +$$ \begin{equation} \Prob_{t}(\Decision ~ \lvert ~ \mRat_{t+1}, \nRat_{t+1}) = \frac{\exp \left( @@ -290,9 +341,11 @@ and \frac{\vFunc_{t+1}(\mRat_{t+1}, \nRat_{t+1}, \Decision)}{\sigma_\error} \right)} \end{equation} +$$ the first-order conditions are therefore +$$ \begin{equation} \vOptAlt_{t}^{\mRat}(\mRat_{t+1}, \nRat_{t+1}) = \sum_{\Decision \in \{\Work, \Retire\}} \Prob_{t}(\Decision ~ @@ -301,3 +354,4 @@ the first-order conditions are therefore \nRat_{t+1}, \Decision) \end{equation} +$$ diff --git a/content/public/SequentialEGMn.pdf b/content/public/SequentialEGMn.pdf index a9dce0b07ca96518ee4dc05d3c72e5ea433ccd6d..eecf5a1d9f40e7f2aaf6f6f05db2c77e2a05dda1 100644 GIT binary patch literal 27883 zcma&tLy#^^&?fAsZQHhS+SX~?wr$(CZQHhO+qS#Uyc6*+W@7%ux66HHRm62?7MZ+= z7#$P+A84}U`#v=G%##F*^2bip-l_s{Rnm)}~{FM*%l zw#Z($WDzkHbA~9pTLN>$tWEPoB9GF-%BB4+E47?vDh(Fv2JtLHMODT=wXzH+*-`O zt1jMPC10{XyCsru!z3<&fC#Ox$J3`ZnkC|fifA@5QZbyiuc}Yq%b(Um0)wcf5-~E# z^_9gw0)p|>46(hL8iccSLmA(w47R%#0cw_ zAj;@oZ|73Nc5OOuziw*p2l1rBcyiCeF4}s3LN(xUf*)zGk%+! zymR?4Gie;^49E^&9fk)*wz)muH_n*sbES1ujDmq!|764<*A5T+x;g^a6SVpu0pSUC zb%xOB#^QSFvKKK54Qk>}nWMcoEQ1j7dg0~+DT>CsHY2wyeCrkdq8}GprHUU-Q5t9? zQY&h?;@O$>RB{8@x)Vpd&!e{orXR_=-2Y97FTr1O25f?6A?EX}MJ|>3^=@ZQN zRs3DSE3o;8dFSCpCC3moGXuO9{^JJN*$}7$8}qllOC2;eqrud%iS)|TXr2JSa%`AI z+TJTq+xSuSzsnh|!;nxpnMG3r&hw_0IYIdamn6=2JII|ocz##|3+@}Y--o z&#<=j9T_f+kbzAd^k~+0Hdp2R_N>jCJ{IC*9sM}_q@QNI14&mNVQ^MbvvgmTA*X{A z3-d>STgC>$tnATQ zqLd*H7`d?0S7^2vbHI3YnszUQRjH~m5BBN2xT|VaMvWs(sc@gkXMpu!{7!qd&^UxZ zHl02v4u2v=shP?mdfFaboIcC@cm>Yl!T#rQJ>Mh|rmGy!xTrFa9xF^JKsiMVP0)Ug zZQIHMIPQqetav~5(uJn*xffhPi;Ltk#Jbp1s>Z1-48oS$R)h6jS*bJfkoOqc$$po& zo_RGvY1SjDoN+#0pXeqOqkZTDiSf+(IBN9$uvL2po?PnI&9c+J?NSNU6Dtlp_HPN( zyfM7Fx{B*88FYW!!Z9uN;j-p?;%~1l=P!Q_8NTd^`g(Re1Zq)~ipTf&LqkPQAgC?6 zZ8B7zX%!2r`zg0{hF>q!Iu{)3&4CpGw=f;pjk%Kz$yz zzj&u3I?5D%mlv1)rKfM}bO}p0V2&GjLwSV%0I%~r=o>zawBx{PJR-y&p=;tm;1>1Z z8>2MtkXX8N9*l(yg7iM#Was^As^uINGgS#D$ozmCtJ)~ zW&WMDW+wEQgs4J7LX)gvH*mP|o;C^5PEnXrArjO%D91EH5xp`l!0?X*x=B|a;n$udI_xW&TbKSpbcNKAmL7^ z2gf9*<G*}pj(Y;b#lGzKv^GE+ioeP_eFMVu}YME zrWG?LwH0)AvB`P~!}eTjotdAwFqt2uVCE$W!?SEn0pT(+X2=4NRqNFQ8xho#)tQ-r?6|=P^>v zAX3ns3+vS&uVTHY&u!ps2+bA&ekONoIDb8hL=KT{jIQ(u4hG}5HqJ=X2^mKLy}Syc z_W~{B)|<28lEtAJ4W8*XH_&bivs_F|y#?JCfrn+ykQJFsf1GQ)>niP-c1ysdPN7@- z?HD9NRF`Pk6)d%IeK4m%kszBo8GQ3Tt71*4Ch8AL?LE}}r~4@_k3N-*GHh(X%4J0C zlIns_T=}z@*!5NW7F4-_*v_HG}rGlX8-zZA+AX1!h69?*T) zmZ?LFR2QT-REMv}5h^@zN|M*83aSv|36r_25p|N}EZ7s$mmwu9#E^W($&+UO$@4T@ zA%WgY2#ovHzXJhUI%Ej0r&>($=GH*>=Ic*#jYUN%N*}h_ku-uY6%RSV7BlyXRGV!2 zwi|Og5CdOiW}(|QdZfgZ29uWWeKr(3A#4fIDo%OfJJ0(Dc!5g>`amC$^CtJf^PD-n z2b^JHoR~`Msr1dituWL#*7}}Ij?LI})dw_e)-?3;yg5m{4C^wHes5(`gY90};<)ps zO$H8X5^`)b)Ba01)Ue5}NG>TCvi#R^V4>V#8=`5~1f?cjWFkV)AbQt#EtLPMvrbFfg5)=m5>y$oeup$s>0;)yPx{XtnUcK;kgmTpW=|4-WmLL3PlcSS5&; z3{)~oR0@@QA}zu-g11r2G0%j&m??__rchEuUB)@c409rrOe51tjcq5y!wppcr9jP~E7|CMtIKkEy+=u|Yii34X zxE8m5bd#jEgXiW5bLGf66GQWd7)7+q^35g)k6p^9=p=&wN{dk5ezz|=WFD{0L{UFOGR7<7{X=D>?)HDo^ z$Mp6eDnL0W6Q{__e8uHlKu=4(~BR4*Q$(v_KH7Z2p}i~ZbBikjOT4koYB3e{L^pLP<~SBE#@_S4F% z$?D?)g{%X)LE$Vn$k5e2%i5MXl}(j#>?fQpxNa^Nx%rtazpVc|fxj&}4bru$IuhDi z;gUIIrh>XdiLJC>X7_I*za+S4kK%)KdBLj9u+kcQU3RcpxtE43M&szUs#i7uNPWsvErzF4z2KzL9;*!AW;>lxF1^A^b__J<> z@!7`f<0pe-Kg#JpK*nDX7-+I5x8CfMx19L||;(Sa}VY9q(Q3bUFc_ynxZ1 zTqtDkrmYrOV)$Fq1OuVuo=5xq=FJ5E3rTz?y8!)uRn?XWdILE&h? zyg0)i^k$#$b%+Ri9-EE>FM{c_W!=lku@61xHjZ0inRVCBVlri(&DQ>jw+bBwk=l_R zGKsj>*5*4Gz^BH=$m*+O;xR`y&Cv2@va?9FKgJtLIR>setoTM(Sc`|A_aW{AC z4BRYm$G_^-Dq+G~`%7ccyc*WWc|Fp)ZQ5sV#m(UFnOXje!6pmosAYeOs}j44<|B#;8Q6P%|tU)AF~50f=GpKn0r;iBnD!~hg-iqR7laNhi~RHn z7>aH)$2{A`aV;_fpv;FPY)PhBLm(2f5JMyvj~|cqcP<)XiS8U|PNP$YZqV*n_qpb2 zwaY|G`b0x{l^25y;Xn9}aKK>l(t(~po})hH;RYiCK;=wy^#Y}i?CIsU8g*p@?w*Y0 zBeKnD#j@SA#!cw%=-tjK=NwYYE1^ae2h=W*7<_u_DND}=J~mq)#a@txu=jN-fTn#%6T)m>KY zwW4nUar z$Rd|$1hE9gCGR&_xjFDK?5iPpeH|4|943*Cd1>O)OT#ce<)a7Cc5w49i(xINB2RgL zWwC~8WpM7&m|lpHR%~~OC(=dti`fL_flsAMZ?KXIjy8|*eQF^k>edo?poDov!`@o!1E(U7&w0Gtg9>ir0~!lwvp#%uYVShBJm-yLnqFe*qNIc$`A=ERn~V0ga5Y4 zK2+pZo6_f?_)#g-LUmhD@#)}I2a zkDSB0O-Pc6PjV_!p;++J9Ln3UCm@EtrY5xk!1LByf z{r-7{y?JWzGe1D>$5dj~2PY~+A%HQaTt6;n#K0U<;~(?pK}C=&!qk(0(tGkA$oNpu zFy+C0IzGtlM>NXL;qd@#dJFZ#lY?GAm|$7y+iLJ}>+|k}Zo|VY%9e(=GIWU)FfuzEvz#RqMdKcs`Ynh6xClGQ&?&$Inw z^W9a+(-;Ud@$IPo!j!L+i{CbP#BTp0MNrTdK*Es>l>n53OCO>55`%D z*p23X%+8AosXqIVwDr_ zXYcMU_%*T&^&t6swrq^11v=e;luF@%_$bksHCO--N@mXF4=r2Zm94pIx!>O#K-6hg z$F;TcnPJp$kMPZQ2?k80Hl-P4kbYdP^5eA0_a`nooq!hA*T~~jLCZ@cMGcI{=eUS( z6X#ELVRQ|>Flznw;o}IINwx-x(C(D$X2V(Hn7`P?Q6A@bNX~lkEHg>FSFaR%mRni@ zQ5sz;IjUdvmgOb&S^7lc$z+a{E)S)~CC@7rw1hV${KPU?HasCP4!js4g|L}%MqmEd z`84f$6%;y8^qKLkZ2sEjG~(T!*E-s z+tMTuNAfZ!ggF>OJ|wbrxoD}O&rKEwn426PP}nu~BK1&Rp2=9|1m#J$!+xjME1#gB z$wu*+Hx1_6yM$lmk1ka`p+jV?)Of?K$G(?8xQB>h*{>prrsT9U8OjC4a@@W;$a6H1ZN{T zI6pb>Df34XaiD280d394SggqUJFHzyxI#dUn5@3AFdv=A*^cR+AH{ha@|ofkr2k|s zpa|KN9)k1Q!<8m!K#2zhT)p2ee`*Pa8eNIGYXa$B&0XO95m|CZ-)(p!*64kC|Q=^KV7)M8-AZ9fD@cpBfge z&VZ1%(dz&?pgH}c=NwbIMn{#y_T6vPSKC=&JL(YGeP&UYTu z$*pg+ZVwh~)2`^F9bunRL!*V{f1`a)!#zw+>lYnr(Y#`veOv0KSo))110dW6yH8pD z1qVO!Rd;c7SVf_^DLEz(X&(}zC#4fLol6V%`c=Q3V+4g1*a`M#z$FwzA(aagtFDn! zFaCS@?E-sxX5KQ}h+lh-L2a^Ob{o$G6_tM+444ZulaN#}D@c=XyEBVmOS6*|XeX^# z(^sDYe}=m>2rXTu=71IQJYO9Ea^PSM6&=iFx&ETGVvx;?rTc3~I319+PE5d=_Oks$ z9c)<^<=cze?Y7=`3FQB+XIJEyr@t^~k+Vemds3MNWghXNIN7;PK*L zlb*Dl8XMgOP)-~n9Hy^(k2|f-a81CRL2?kfdt04QP#d$~I`jn7%WxVk&AF=<0wC8mcC-HE(G#hMPBu;|$@jz43 zFdvExg{8mG6{xamLSP=gG<}b)ziFU{)bD{IJ&VNw`NO|$@k z-3=m#tYPspKBb{{`JnWJ?(>1;S@48cQBu0F+q~!n z&CS8fLD~=UML{50BXF8H{F?f~#FDz6PFY25VcyL*qqa^Jt!1cdyI=82uU7&nNu5!O zTG$nB6phOKeHH|a@FP#=_14I%T1JGaTATD&gI%cC7Q$5U3$Z6>XQ-BOO?5Q3Z6JxP zZ6<{+{%v~Yds$V*Ro>9}OqpkPnV+uCRb!-XyF+Flm}i1$)84cNuC3PA!@0-)o>uy> zNGi?JeDBbV=EnRpBdv|_-&2-S32id890$Dg6vioz?t%c`)hBaKrk#fkh|*PQ<5FA` z%G}8E|M=;8oZGk(k#!p8`ASBpxp6$~lU49fEc2=~0l4Oia*8b`YiIrlY+lldck1x2 zc0c*$+)`bp6vXw=BWcIr1oucF%ocsq+oaIb^Ez(*nGxQ*NJB+r#z-&8STXO-)^~r= zoZ?W*IF3aroaOzC5QV-!&7sz$hvxjtU8RyT)JnzT`SP~<%dh9~S)bb(YhCt* zITL-Cxox#kigcxW|K#HXTv?T;L(q}~c&-5Ov|5HT6^f`m$J=SpEFEwW%=RpVJQ^*F zy05jjG&g7n3x>D|R+mIU$XRO2!>7phAjCxlC(j-sWO;T=@D4~b+hGMx+5O3-H2JGw zNJ_r2!{NL=ofVi>ad-FEOU^N5MP|i5RMpdQ>STZY zUn=Gw+9v5=Lakn{QJ>hi>RD>uZNVBJ-M{m{tui{XK4#Le=MtUa3+o@A-OuSO+xTj2bT5y!A!_a8sm z0Vji_CWB32XR@NP1%0w_VwhLf!40UG1{}@`Wco8X&yCg$_vOwATq_B7Lq?a);R5jf zNF*p_NA{10!7;S&>y5X@_*XZj{GBaRIL}|K)ihM%pwMo>+(HrJ_IWq{JRS_s+>fXc z)iJ1y;!@mAw7@&Q>$oV&cN$;To{C?hmE!w5N3n}XlYRk@JS;HH4aCLYfF;E zvW@2;=-rh5$Y%@$GKbVoy=T(}h}X37D`CC&jP26P;{2xP^+-I0b!Y!(%aYQslRntJ z+Ss2}@S6oNyS@8Y4GKYv0m35#krCaX$ZDI`*H~?`OQDVIY5H6w$=$IinZLahE2ePt z{nYcW`e>JPI3&knv%vX?XxWHbObHwn>T@A>oRo5ImJ(LV;a~OS>?MeW6R6f4$pR|f zbQwA@vxg3gUS?Ve_1v-4d`}$iO3L!SB#{Av4xkP^S3s6_bx7?DIoS#kM{8LDMshc9 z)eLly&AA%!_HYeg@|gnQJxwEmJEuLR>sPl*4YHaih-fLuH^;~~-vFrs+PK?P#?@!( zcB4Rhh}VCg+JX7aMx57DgLsrT9nqGwI&1|RK-yT4aLTGm^}z0n71krWg`HmLz$R$* z6h_#J8N_BIw2|YBcwKPm3R*)UU7nd8T54~+p5Dc~hbH-d=vk|0DNQLpgI9o>cZ zX%N`azXD#xf-<-s3LY;<-M}0-F4=e#8kK3YWewn70T8Kdf#Ye!_~C}Cm;Y>L&fq8#$SZ<0xHzKUB!`Ji?VUE}RG z?2MLzK^JB~3xv*J%He^+kJQni7_Z)AwT74H8sMV#MlN$ zuu*<2fvjcEA)ylAF(-Hm!b{g_h@X)}gHwHW2kc2B`m%_z;g=KIsS2422H5!I|9+Aa zivJC0=aHvmgETg-P`oA+#EFA17(~{xcLXjLr4Rq)e-GdeLI~a|D4-7uRn+%^jJY^h znWIY=claA8UFn^*+ti}ps*7(Cwu3TfM0?{N4H}7)_{coCEHQv|ng-O-tmvR>$v9sU zn-ux>k~b&lsG&OA!G{xp9J_T=RT4AT{lM6r&uio!fOl+Ik3iEHot8m)JT~gD0gANt z0ut&;v|_e92#8F-iO3Syp5E=j7Oh{XP7hQzZkjkTO@jN}vmj?;t@0WDQ01ON37vK6 zYox>vm47;=i`M*OcvHBx-Cy!-jT_?wFrF7gYoP8J>#O&efo-OVmP(>K_xz!aembB} zeYKWBES^yA!ps2&lB|odYo>bq(v%o8Nphqo-?^zk=1u;stn)}SQw<8*b^kfPyz76;h{PG2!!FUl%0(_x{Wjm$E z^&tZjSjEad0(#t99bVqYlZu>W<;;+Umvures)HAan*A|7@Ngm*Rg{PG6X9~yK*0!gej&eB`SZCH^csnEBpsf_~T|V7g5%;Me zz9qpjKt_-lNi@Mn1uk&>X`a9f2|$-2BAQ(ivD|+otg9x0>nrAtF#>J=bxqTKo=J&h zUC&=zNlkwWJykjXcf;J0sOdd=uUUl5<$+pooQ0Cd0z=wLSrkFw9wFkP7iz$rNL$BS zwJ}?{gy^iu%uowZr5_PMItt*(|5|sE~jQniWTM|QX zBQF`UeThvTP(V`9QpWR3_uH2myXau;jn@2^%vt;o;7l0sut@I}O#s*{9qSR$iR+<$ zEY8o|ZfKNm9FS)&Kco3<$kEbK*Zh>H_E(c+Xx{No!jO9!dVE6Z!)AW<{tH4PB0^~P zWmzwIG|Xg0N5qm(cX;5fXtgvxsi|xFLAo3P0$75Cm_I4e%I5m>uxHe>D83VP zxn`vI{1T5pjN!C#H;d|=p>ofZ9_9mzS6u9CyL4e2IX6ImnVhjk*}eSA;HkvTbIlHW z1R@PnC>_}MZyU7}nN3H6-bF|o_Ob9;Y4BM+-gkc@w&NmP&`y0PpC7rVj%hz7*Uo8p zpJ)Z%c|Q-`DFSBv%}@N3rsPU%nn3n}izGW+mB%zv4;br(5g88peVa|n`S$4O#5j->LEiLSj63kP_Esl za#NnesV2T$0tI~T#yXE+%fM;d1?{REx{WMkmUA?xP+g6JxD`>=Z+1v}+p!XKuBSgf z{@z~rr&*x}*2ty~4ec|GU~3NpiuwUTVza)zXtIm`F zW~sp=-t+gqATScwARg(e2I@ApC@|i8>2*VxU$%pUvKdm+Nl(nuaI3Wve&I3#^tUm4 z2*L&7H1=pa2j-B$CptnIP2W@*3P8*lE`0PrC+F}Pv!0|d$2)b2#ma98$TUB(fjev^ zA3x_o0x@|NsaHwO5cBujNRm9s74u}jIVz}{BV0n!Lt9K4iaB7;{;7*+9D;m_B$`O1 zdmSnZIsWE%V9@(5>7RuCM&;c&!}fyMRsd)y^$2`sUoug@9eN4I+P)&%sq2{4W4O&6 zs2x^fAT;JqH^(a&FO%t8ieHCC$*S(gT`dyjLag}r*%jeR0F^?db%k->pQZQ?J&}&G zYkvS)88|v~{l2NQh`dcDM5IB%jLnsi_uSC?aDL;dxW1ZFcDemvrI9cKD59BT83udb zOOW&BDV!U7!UrxGd{%zSL@+X*?OFG2eJx}vnC&ly{GysFCr?pnjLb4`B>x1g;1<1( zJZ9^3UBAVUJ+I1j7TsFC49qUc&1%+Vdni-FzQ zGE((|?j|k{-N@Mym>=E<3w7vlz-P9Ji<*>IpLsY`4b7m94iyVqqVj*z{Jsf*>L?-q zUqdo6vHXt^$;SGBZ79rWZYBP=8tpTucAucN+TWhkEQR1eT$P=ybK*|pkWvD13#%q& zVcJe^Mq1Oyw__d;YRZ(>a?DXO<*yH7&WgQr2AKAp5g9#*8;6GS^Jv}fUy^!%8~x|S z$?NBoS*1RxWgv>Btwb1usSVl*pM=g6QUDr90HfQM?{+p7s__2gEu8*Dm?uKT#MvLb{o z`itu~>8<1^T|t%aV$u`>CfaP(_U(D8Wtyo{A}@<5T_vzIiIW;9L@l4M53C!Nh^3T> ztUWOtt!+lGg(^Mpyi;!E#w9Py0yar)3a0TlT8JD`Q6BjyoAazfLzDc(7^8OC$Sl4) z5DaAl*n5l;h>s}6P+M6Ejx*FLeEeKVN~L}gm(mg;+6bQpdvhcO{)Gp#&Tw-uSWD5Jh;L$}z*^u+^$ZC(b8>Dl`FEj*I8pe*yx^n!9)tMe zHycZRy6n0%S=ho<1?(RTl9wk>3Gk@;v{2X<^EG1T1oMKywOAPM;I9k^l4V`btKCxM zfG6%WJuZY9J9M|~jlm_55Y*a80ZAwcUGOMGI36Ohi^ZYMG>ICE{658w%kyV35F9AQ z0c?334q|YA+6e7S_Te7QdJGJeiKBV=p_rQQHQ!0rrbp6~jE@BF+QT80Mv&QM z+fx|8_QHMLj3xe*84M_Z{hIlyy=jFp1GMqM)Ju=hu<;PX!y$skc#H;UkcZWr!dNggXl%uT_>J-k}zIFX@ z08bmN6k7MZE^bM5miUasNkhdHkZQI7el|^p@=I1f_HZD1HZ|0!>=Y^c#m)cebd8j3 zc!4#9y{UyOhia{yF$_F1VL*j#-T113*C87Z4z1Ite)!&kdcY%MVWFzTRxLR0yp3o3+*<{7?O6V-mtXy<6YAV|B@+}AO` zA1aUfAXxhnGX}JG8@96?^i{I220DOX6{h19=TMRO@sdN}1Ya6AghN&We75?I3~6Kl zYa)tU4-H+fE<^5_Kgpp#u*LNHb<6$vqLlmBKmSS>bRuL|)L~WNzqxFG7N@8Xw;AE3 zCC+Rddb6GCmr2uOK}VEO^Q>LhpK20QIr*?3yTTnUl*jC|5eED6$)5`HiTBOqB!C?s?#ceEuNRr89NkTlRTO~ zd3ZEKc|3s@s59PyShIw9a>#i$l=$UN<=pX3c>jJ)E;S>ZYNn<&@Hr7>aEh_cCYTmu zQ5R!jIQ2dX&6?3eai6lDE%|YrDN&hJp`1k%ow4LTZ9GX8$g%LDb!^<3c{c*L7(zY> zw~<7{N4UAE87;D*^s(>+;1UY1{hqWI?eWI*_!HKEz;GWUAc&Ld7^=lXj?IqlW%`Db z^15f&2R7SiC(;K9^gM8N9Lr$a>~R)`$_>-*nA`N|h86id2@t0nn;nqSxmtBC8FD{?+_L8R+oG2V3es z*Yv3rqPTUVX+}+B!|x7C?8xD(!?YC?_wawOLu!fB-w$fZctT}Kd8kw7-OUq5jW!Bs z-g`i7vS0oX(+O2A8qrgF0|+nES@cIQoIx+oLV|zqzD(13MWQD52&0@%6XDGeoBzEq zdtU$WiYKc;3!swi28r_xWMDA#<#oa^$QOp9>GL_v$0szd9a+bJybakdyi_f~FF^(6 z*>!alAx~RqqB-_jg!eC!h{rrIdU!|P3p)laV|2;u63F1NFd) z4Jcd)Krf~-#t4amsRIRFDUV^jrMnyo4NVi%)Q%8N>+)%fLnM*qi$E zU}ApC;dL>{AG-W@GnoUHY-Pz?PY-9H3Xs{oArnF(Hiaz=dk8KDEKKhq#R%1h1#y<*y! zHmHWq!Tvcw`dmup(po(0?g_xAd-LI^fOQYE^1lLk_FL<+?Wz^rn-oI#;N&`la z^W8e`$iwhX4(M>iv2oQ0(H3D@vcuHFqSPrO;MHC7UbdAP03G z*TaG~Z&pE-{X`N5fG-0p`!cRN)`n5ZF3LXp-_tD#bACimggZ(=qVtz8=bk!j*KPy6 zx>2g)G&2p7jk@aOA%~jC3m?m>`(cc;vkBtOV`b zqeNIiXhyG-8F8$$)6sr`q>q->4CB-Yw?orq7j}V^z^)Xa_r6=lJB?-&F6u8-ojq$K>yE_tM(Me4AOF9Uz#K*#~5% zFfFy^%*c-J?kJ`^fvbY9686#cFmcA}94g^Tp7) z{4NCGQhV)O-FC4_KcQVD@bx2s*Gc~Q_2m0>=BX(#k0D5k?-Q+vVx52U_<$LePF=-W zY^_Uzr4yq8Bq6hihfxtKmXR+L$pf zDXIC>B^#3^UN(>iqZ=^BgDHi(!wKoul}j4}F{m@%B%JJZ&Wt)OGVx7O@vS*y_GFtR zu7>Gz*2pcA0q&$XT(7qvrd1+=Ri|YOP7imyrb+M@+j2M8m*A0f(SD@!^h(-NOdUI& zxXPxP-V}HoAiV4cxT;9R&WO~)=Z2z3AkTCBB_J<^)IRhc=Ecs~UjXAEk<@z}ut1Qu zIgh9aMb!E7PT0!sg~|vsojadpA2blNB+4Lhdmo#wJ*CJwf`S7B7_oZ0HsLcj+ffO_ zLs@x+RrvNPm66Ddlk&i$rbfW@j(P`5J9qtP{+&`GS{1bVUKvUKLZRx~Flht@MEX-4 z+#~%>)s@1?Ax#!P)s_Ta{v($`O_?g(v|pxYeK0`rXHvn{Uj|$uZy2O$xhBv6VemfZ zKPnTGiNHhbyZJQ)#SUxwx#y86Hd1B?j9Xc*ym?bHd1nG&DgV|Zig%C*#_O(d{@JA3-En^l zP$XLss6qH4FkWKo*1XTY6S##h2O8bcIdbITvQ;E-tl8Q!eb!33 zb4zd-i<5pivMRZdw%lnR>a|;6euG`^+gfz%@8@&7aqO%8GILJm(zQBTGjHj0ZsGa$ zZhs!I_%`(T&E-%<2Bo;Y;Fm4ka{7mqT>|JRtemZSCdO5Bf3SIXXyGi9J9us& zG6Pq+E9JezLt%LRj%aVYnkOXd(;!&i8Ff|L^^&^lN!oZZe;xOd)0OJ1i`D~Frh0&BoasB`CCkx~M%%6<^mp^xKree3*9((l)g#FF;kw|()pvB<3V8;6C z9mRRpdDr>Ic^{(>eWgiTC}!8}(4rE>TRc0*@Nou+nMfO=Mhtt@5o8~|29t1qk0Oxn z{c@|>?q869ci#ON#_s&I$@ssGQKlvfmDy&y(s-OijcO&Tw|MnE)C9V_3ZWGBgTj@EIC;ew$uQwF_DP> z0FZ$o`vcdYzymY-{_Q}8@j4`=sz{n_b2UsFj(`* zWw>e57fMGGn-q50Uu_%&&=}8xLX;q8vsgtL_@fR{iA+B`=t99}CTM{A_gln20%Z`X z-OJ2YWEW6nERtQ1NxINi-tF9_TG;3p7IN=;G0~d7Zu!{WZyLMB-Xr{egJdc*`+`#T#$FGne z?|a%A9WS9YCf&)>gfogPCN9?>kK$X+nC8B&gS{A7cV(f&pOL7mh-v21hOf(_L(jvUC(Ol1%(Pmn73 zTU20NSfL@AxaU7MJFAE?Xyi9`J5e%U|NThq&`ko#Tj5NI;(&!REtb>@?89XGgSRkm z%^;HSdIL|}B3}1a^|`s!Tx8awdq*D()Z%u3=T<{dHr8dSWAj6rv{7<{hr|0EaO-t^s4o&gHL4*Ko zFM+S)X;*|&k3W)fawe{X1B%)c;juR^8#t`Uo3H1#|B;GR%w;gz7Bo1 z{XGW2ZSKpo=e0iR87U-*FP3}7rONp?gi`4O98JIPHml2pmpPcz4^%Kq*4GEirxnIJ z5u3y{0(agXJ@Lu?;qff#JB4jbnk0Aq*?`E~X6pu;GDs;l+( zlFsmkS6Y-`@N?sa-9<|8t&Q8$47T`RuCUw}V# z9KNW~lgSV<-YVq~RrJXS3RWH}r`HmErKa`8b}v9fBSn`Ogw7GYX561d`0hq`d=a)o z(!19Fm(F8R=YKWwPTiGofwpa&72CFLJE>G`n-$xs*ha;+ZQHh;tk~xL+I>2wo&B)? z!ff+lj5$Z|KtJ;J?feuTU5e9DJ}L|gnUQvJbe^`Re%(@6g4QjoN6XCXAgZGova{Wr zm6+1JPJ(gg0XJE6;?nS-BFemSKGLIBFOFAKe5@is-dX%LSLVsAxwqIYbN!z)j(bML zRc|k-k77_%ZbO|_xmNoN86kcx6sx@qbwbI}e|^Bq4_}=yN{#A|&BNzok$wjeVLS!Z zW(w0C)6>Hq+xMPlQ_k=9?dD9Y?N2T5icPO(`_6EIJxH!N2V2r5MT9?0DfGl-+*Yb$!Bat;W2TH`CU_$bPhL%AD-9j!|gLrv~-?@oY zCq`TziYfvD{W)Y151yg`E9&|IP**3dI@WsI~Klf(~M-q zs<6mYgKDup>IZ4dm1RTyaCg7hrD!Q~%^V(<@11&d-{!31n#Pl&hP{IZwK3{P=ubhe zrW<^yosOJXJQJaoAbhd?VGleD9GCQ)#DRu2`qq z6n#f{0gUOG*sXo$G9TE1GX_Tx6&4l+6YxakQ1Wyi%jJxO!cWMBST5+sZmH5J<0mrk zXkG1y;A*vavndFw0L@li`hYCm7LPh7TxR0f!WdraAbdU|(Z~kTz(qaG^Hir(qk1G& zQ`id_8S4~TP1h1|Z$mkLyJ4ONZWlwPaJU$z z46W0!;6s}d=T0S$##l@({iYj$AB<_SV5<1L^GOS^hYPTu zJ1YX+ZDaT)F?TNuXX;MKy|2ckTxuWv5)%SnAUIccyT(w`4xNO?)~WKREVIFPEVC|$ zX)N(V%6mcoViQv>GkH!PE4R%(RUn7@I=H*37$)9woX%b#n3m03OVML`2!!_6m4+i) zf*kZTUjE+OcK4LDx~J{>6!1=lJN-Ik!8%wB1qw>`(+o_qaS{_1>;j`>O(&54n}0Bd zTWJ7rAKPxdvZMpL4RiUOYVS13AS_8rajlO+eygK@PR5{YV*mq=TRDybbhOuxQ$z`l z`nXqi)dji(?nO9v=aWYi)>r%<_e~ARSHfL8nTPGwZM0eG)){V6y^vgam)_P)zO79Sl zGxiJztP$TyhBQCxj3I8NsMTN6XAz&^ug5qGskkMaMuTFZO-3RFVBAV0~6-pUx^ zpJVwYRRrC_*V@A*Zn^Ic?@$V-9>NE4uxbRD+>;*SlO`Bk)YN+ME>_=%l_5+; z-t;H@hM%Z-dS6t2KToDUq-Z>X`1S@xBWT!4C9C##I2%;d2;Pr`+Ff0HT^<11x7r=5k%|9TG*Lom$1 zrn#y}?eo{oK&n3-ibaM!ZiAQneIK|tHh8EXfp2__(PEdeogz|_dGT0Ua^(eZPrfHX z6;s$H`Y$$H1Pbkwk|ruBi!bJ%|tS8Fua5_r2{23vPZmg^PgZ}pK-|(4` z2@-_dzAj=9nBI#c|;lvKHhO{i* zTPSkxfl&-52&Iqg-{(rs!s5&dA-=3`RG0(GfB`n;ZnY3*nMcCx&&| zO7Icv|M)286p9Wq4k9O+6dDr_{w6AIL>XS%@mSWd6?!(=Y3-a|V~W7V=bCoA=wDjP z!1)k-Si57rtPv+bgV_XaR^Rk$nMtI3Xv>S79z8~_!(e=2F?%zl z4yR%!;P`qtz6f84US%&C!hmCotJ8l+yU3%AM99Y?L8RBFt6R~Xb$jL-=k2_PnM--Lm=p8c!NB*3M{2Gh2+6_w;D_Bc2z z;`j1c{^Z&rPBdC_0CkHO4Sbvxeb1&v-q^XIdneq8rs#=bj7NZ%_R0csIADvnvx2O8 zqAS9LG66axd_jYXd-ah+?T_=M%s)#M9yn@4-G0!vfxTh@D!c9dq*%!6Nx5I0m4%Vc zcJm=+s@MFk!RNVZo7cq9nvvau?NC2|jU-1dq^c3^bf>vU@4NWh*&P-$)`wbChXVF- zkCBHDHGQZg91Y%bw$BtF_-L7vuFLwEROo|ruPq$_0sOMZANkn8~d3R$-z6L6)E{c1sg1b^pF-3}{cR46Gl>RZ5J0b1p#DCU}Z zUhTryel+e+hxyo3Nc1UF6aUl`*#axr1nkJ6faIi-S-3N2rLn-gQzI^>K9n0+AT>BY z^KzZjI;TucFFAV z38l9f&Pzz8gM{<~b{{uua}^7(jSMlsj+ztBuHeWb+&1eY-8ibN5t4($jJSo%B>03@ z26Yk`*eTQ(ZmqOvKuXwo6@nrk8)-SEiMjM}*86$omkU(a`yYBGJL~_dSF$kwU*p(e z-0_sdmb;wVy?*F(PjM6I1W!Tk@u{Kl$$qz9-AkVTc>PSA$V-xPtP^n(gJ|gdSA^ zU&L0k!?%y?=FIs9Qk5-Aoil&7t8!m}p)Libv-*ktB|TOj+H93G;dv{2;2lod6t|5D zp|MAM=r4zZSWg<|$#P^ZBaISGn0w%t=bxUfI(n&;00Yc9ts(5 z4W|ynN(=$w0M9qOb!wcpw`zUc?#8f6m0qrvcfH#+ewA231gQmFRMsN8u-qU{tRkBA zeIV^9S}SnF0Gkm4g+ass?TFTy7j1-pBr`;@a5<~}X4O~Xp=|vy!)Tub_uFN1qgICs zoGgwzSRaAeSzXhmAgZjU4=q`|x^qgHF|UzRxd@xXN%-Sx{eY4QT8R#Pc&oQ+WaXel%+qwSUZujYLHObvKya&DV0r3ySaJtK~8pMk+?up?X3VVtdAJxGlpsL z)B8m|y{pRnkzer_k8AIW4%8R-!pOrqv)QL$-^XPNB_Lq~gos(&d)s z<3gkJoib+uAi)^$*r*3l6lXu$SfzwRq=|BUpObUhZYXcv!_0$CVCw=vHYrb9E{`I& z2w~=aLJC@lwQOBGpU!pKYyJ;|0Wia{d}qzPcO7?Hq+#1HY9e_hiB}&4Zh&UAL7BhM z?+mdrlLJ{#`^M=N)`ahFiKw?WP!l?#*Ioj0>SE1zvOi}gYOCy4_2$BO!6P&bh+(ig zDWvr3at7O5Ud}g;l+bhxP}<;Zk0pU08=)tCp&yB%qfTuICp*wJe~DGL<*USC`l$b@ zO35Z+E}G8g(Sc(8+54zr>O{h;UIfD#9MAfk6gPKRitkGcslH67n_?+~ED>l*goUM9XdJK=PaM2TbwzU(i2 z27d~#3$g5MqMD!dg|x_j?kNH}qNnJ!ALl@^mcffvQz59_1;>TOXTF`vjeT{8##RDv zn$t(?`AZ!NBJN z_T1clSl}X|8w3b1#m80GiJF5htK3|n!b=ZcE(3^!+(m-0M9~rW@1e&fVQ?{1(&$|rkY&H;P^I-+Dql|}$cX03CjOVm*b#X^{7ev`#3?Wh@fW&D z(n*EiWXlzV?KHqJ4l$|})$KAW^z;gVHvQZ*YXYAPIz)tq*e3oSwr+zJ~rW?6(3;5(ZBc< z5vQ#TWT_z@Do(3k< zMw4L)#$34QFvCzC^tnl`BVp%2+?JP;)ALWxg?-HhHYr%V)K@2N!cYl@Ic)+mkgr8g zlZHew%~wsi=y8D+#~1~~O9w`FZh6t@3VYYH;4hnpZyR}`J+Ko^6^UwniPevMN?1_BSVBVUVD@HZ~O#*C`Jhf-+Z<=|R=KwWoD1gKl1xNvX?^FR z4Q(X2|DG0gdheTgKrEBB=&!-=iuqNx^bN!2s{sj`rIbCkvhZ>$sA-AW5_=U>nBwns zgsKqSm0fVu7@|)OTJb|c?%E^Mg#V)GK3kuMPJ)lQHlXW)V!$R{83x`MdB}IAGZPjdk{#wg2FeDD`_5o7ux7ono_AEo1ND+=QAS!J5mWTT5*#&gIZz^PLOlk04 z_$Voek()%EBV7Ji@okG4-%3*dkOL38YR@}bhJqP9BjE&D(Lc}zV;p4Y<=6a|zZ=Jc zbn;$scT*t|T4s0r0tJG3ylx|cS|MP|qp2T?aZJ=8F-BJW791g#|79+WI>ZdgY1*-U zwN)ghkuoe{GcPp8TIy281Z-mxhAE$vQ}INnm?GF=k}4>TB)=iB^cklv<`3mB8X97< zG8ss7lE-0JJJ$51Y-2`rdEo$TSO^2|{b&U!ZtljRH%MYeg%sdXRS9zJY}4rl#)#DM zzSX=~#pBg@G`^)n8ijc9Ao<}Nb>)sbK7gYMsJn3P);t!q4&x2e$gOL{j)RE^z=0=4 z8hJ28zXO459IdM>rpP*6c>*@%%+W{6Qb3d>Fxt>t8u~cKp$W3rH0dAf&4*y;dV7sg zJ&ojA+U1L8wS_MH1r(dxQ8V?iXZQKc3>5$*8w&oj)WYW;b*Lkwk) zNk|#6xCeKHGptr`F?o`f4(Sz{clGYpCE(v?@`$mPe~8$z}LO-&p%s z%{s*1fE-+hwO!1FV0(rA2maSR{O!#?!|Sx24AP%QPOirR5@o~8ROfr)(+uC?ePbg# zf;BWf{WfPl_*SesW_x#^LP5@-hexBqukc~X4md8l6$2^uumZlhRtFQdHhu zhhpyR&MssR2Ch$;`!oETD0u=78CrJ8gyT~-M3V`6pQi2iTH||)e>_c&&@)!Xd)S*A8Fpn{5*ykp7B@kPFx z-Fx=vD*JF)?tp&Hcj!$q#tM~i`FPFgB)cuR} zev1g_<%uX0mv{@QMwAQt6#Pv*Zp9R#)75C*4c~kQ1CJ(o)^9Z%QPYVr3!cZqqb)JS zSD{w-AHgn0GHg)ipBG{>CQ@+CKcD09I$!;$=?iYbA368i8&RI&MdFXMbUU*g-;_3= z7-|#4E?Dk<22A--65BXs6c36XX%DtSUuV6sO4N-1L&@OyUwLI&xjDK1PXh1iKd{;f@EdR$y0Pm z6F@$<4f1~H3O=72E=luQm|%V@6qADI;f3V)@_qAl{ieV*f8)oRK$5OZ+R+{bAp?U& zY8)CKEyY!7aNs`KQNeZGp!ezZ06g86d!!)cXJhq(K$S(#KDR`JF?$bleVjc7(nPUO z_(Q6Uk;b6#El?-9k5LF;i)} z7Hc---LZ=-(d{tWny3EBb~n>&C-H2)N4I|EaNMS_?f&jCG1$F|xMMjk_|sWrr!H}5 z*{5Cgn_T+RiadCd{|AX~ zszFPMk`c({|0aItZd}hL#PSY=(vUV^%s&Z?=uAY&8hu3EcD}P9&hHOd!bCx4P$(=e z%+H-2f&ohpTS*dC{b?77nl^G<0J48?=ZjVb@#St&`T#VcsO3)tlidtWxNa3yQSZ~~D?%%d%fnT*`# zmnbtFe5|5PDKmMRBVr$&3k~5rr-1Q+_FvTCGvsV}M${F=Q26v6@V=sossd^AbJitA>j6?d8;Xk&Jt}6R=G+O}*nkl8 zIrsfe3Q^_2i}*g;U*~~ihhp>Sqpc|!@Ulc|3UH)pUiID6^6|VK#wQsV-t)+m@*&K) zurB!8-7f-|hp4M(fx=j~RnQ5Dg-~iXjM+i{d5jyjj%u$w0M~mjUyt)8OcDwQ6+F^e zYEikN2>@hVHvEQDu_lZfjx<6L6jdazwtY5hFKn%#N$~q}Zj`mE$J=l~O02|^c+_9i zQP6=L@d$KYdQC}quF}@Xpu$74@j&&fp$yg#^fPP~^P!No3kU@~hZ^noyHDmC<Nucpx9Vh%CHNyVcJYHAqz!=fm&BZB@yrH9f?%*zA}YS(R1%x zsUR?rDk|mHF*wDr?LYcM#VnOLyT}`mt>{2<@N%pnQ|Dx89_CYVkU9H>4;4the4JZJ zr2RtJFvq}3;3U$V3U~j9kvde@A&Kk7EJT_~&{yx5zuZMNk#B2t%9o7|rw6J6Pj4bK z4GeJI+0^@B-Ecw%VjG7=BS#KzJ-W%!Er%58K~kbAC$nKzp?B$N^HX&GxgAx;Rmqr! zQJVhjtxLJ1>)vO{e5Ld8ZAAuM=P%!sH8@lflxT%0wMd)Bm<-v;j{^lzJ8EgxAJxL9 z+rz5f0=|FdPnZWK1bt1#Gd}I%+*#GdJCo=#anI^Uta0F68tBzZ0t2(Be~BoF9GpcI z(KYdRr3(lqYm_ZXHXSb0YRDi1!T?fnm@<2`!!5XX%pNrV&O6w9(1rSL`>OwM?cKsh z@QaCF%gzHfVhR}2&uU2#LI$DZe0aC3%J0{`%5S%$LE@?;swc45R`(}NnGbnp7N)aQUx{8fB14>F@mmbWwF@>#Z`J^FmBq1esMlPFP^Rs6 zm^Z$+gf5u!W{4l+x}64RG^*cJvzU^B)bfN7_P3MCxzT|@1w3M?@cO+)TwUBc?0%4q z-}YWNu?+Z+#%EDXTZ>41Gh;x}qsaqsPh?Pia})3o$%=p^eAt+G7b5~ESL5LOf39a2 z=Zxd*VAHkRc7lbVl(s#4?B5-gC24xux99QE$rtus zYUhFtv8%fdC9lPKE`oG7Cf1?HqikjlFg3n5vXg-szXe0csJQ0vw8?^=v*Nr}ZkFlr zCtOu7aBc2wg1N9RDfUTnJ;H1(mOVq)2aBjBtpLsxo7 zM~ndu1HnhTU9ii_{#DmP?m0T2L{XY+uuFe{SoCsAL@mQs*4~b%YA=BQM^1uYDYd5) zHV9kbmF;u63;7O%m)i&eCuaouny!>MQmk8AZ8h9BX$}X&JIC=fjLvi+Apcz0HqvkC z?OAtHGF@r4+%!aW9s8NruVw zq3VkHR0xa4kW+$Fpv(G4E&m8P!X6iUC$eJp!j7=!jWh9hFGLF(Q7qHE#hL~K7Nuj3v+co#>N4WQNR&? zC668j!CCb$6uIhEm@WOhOCEI#dg|JN!&)4yVIbvHP<|n|rI{F%i3@nC;57plD)Mwl zt~c!f9=@Vz(EhRHP3@(lmV5lI`=7Jw~LWYWdM!ZeNI zWZlWLSZbn#byC`cOF+qSA5;gZ+zMt-^gY1;ik$C<(@z!+)RHa~LFb|KJWec9RT!O_ z)Z-aaA}c{>{H;d;AFOJ{ip-`F0dP26$VNoLNXr!hjH>4n8~55;7b0=mGQ#FY*+2Oz zE$awf_t0q6goGxEcmbKt-^43i3%y?>Y*SZ$Ye-kC3;Yalw5YwA=|DUQ2N@Ka_sH;~ zCXw`&^<>$V-h3&+^2DSOE_7DzJvX%7LR#41moKf^4?fwHfW)RgpMwrslYO0jZSKb! z#Yv2n_dC0GwCUB^{t5Uz1)7wCa0yB z_A>z2IsVmx+80cP*`vB!%Fxwo!s>dPH0_MD&|nj%AGq851Y*RlM4AcnF}q}yEhJQW zfjCa6NMJUdgvMie?PEJ9W1jZ1*e}z7qRt0R<^}7X-mO91LXTz{XopMzgGbhdJG;LgKa6WlRx#LKjq9m+Vc25P^|P7y zAZ$9l)%al@D`wc7(V(k&c%3>Sn!G*(Y5rj_8s7BorP*w#LA*;^*5=LmDMVZoByCAJ z8O7jgA6+gb-TLI!qDeVwz;p;*2>hfTo2OW(htWp1UXpNXnRIePV-|~ck)HC?;#W6r z;*pUVdL+ZfYDvb71{h$=XeeyA25pIgE_8>D9Yufe}j#AYGZdU4(Ny{@li zPfD=0sG+{bd=q5+yGxzGYUs)b+o-q+m+qH3GOagn2%q~Hs_xlH{qXV#Tvlj(BzaF; zY#Uqw6ukwFjA{<0k*r2|c~d9L(P~+Jd$UU7KS_SO;Iq%f{b-G{s3S)}8(}m=#JwLY zaA$)&_SqG(C13{&8_>SLToZYGPi^N!m%L8oA7vl0!5oDQ3K5l8GnAwrD*@euEodmQ zhd$RuHPfbVlQ7-A+s}7<`L6w!T|meVIzhdUT?7ij+A@50TE18#eWFMYQH&bY&pZYJ zZp4_oD;xIRb^DsjrUF2{X?L27{~!BeUnxLd7niiZSRaMGhL^|vU@sO5%iGrh#|51c zQ}^2bO9#_sQHzq)PMZF7h*y~}79SM>wu4#J*U|cb|HmAL0zB&=an6dn_f)n9XrI6& z3sW=8w5B}Oa)+E~r2M;=xStFr)Ewe-W)IdhP+MmBmm&f;a=}?ZLa5?W({_j5wXZX| z?1-w;Q2cjvf>Tm~o(7c)(G^}GB}C6cD|Es`8ka}+?mIf`SC}u#86iR_esW5Cyfq&b zPnW=TRDWNVr~y4=qowOOOc|Vs1ShH>#>Hc5xGUG4-$vp|o4Ga=NpLw%LslhL#R&X- z*c}M#&}aj#@=Wv1gzb8W?v={K1EKyYs%e1QMB+rvY(YhRh2;id#H7K4KZrGyyDpmp zE1pWnIblK8Dhy4^7G~8e5feUihF}OUDLO&^%0PanRs3$pcpX&?HFlT4gnGnZgrS54 zK3J8bpGzDx^Fhi?u1lqQdVZBVxwAN|!?|KzU>8Z5?*O{%Vf+VB5< zOw0XR>-j|>rT_dCc|p2LKUpc$Rm;^%lPchRD3-_K0K5hX?M@aWpFL9gY1XjtIX$@0 zVx9xDo#7%Lr$L;IvF z)u5h4l4$x>@caE`nhxN9r|pSERU{TZ!-kCRxH+xUF36aLv0l5jG3s4n#^x~W?qDpv z*Mzb$mLC?f!PwReGJqH`*Tb3#vbZ z4Syg*05b`LW=GkLo$7C;C33c(Do!beLOBz0$qWFmOswdVJ!Me>OF0RcpC9T|wcn$x zsEgVNSL}Zi5ZpIbRU0*~4t6TrAhoK#cyd5@5!ZwEB0>QXFsZ-F5oX|6wB&vj%^Yhr z3v1W@pvB1wiae=HMRUccKf{ryAMw4u_YILND;Poq@aJL&XId$HaJHE5DZfb(M^Zh* z_HW|W2JwYWGL{YXT;1B$0XdbZk=Oeq?f;0d&_QUKcLSY`jp(nN>>~oYq7&Arp@LF) z^z)Ax-1GVn7(*9fq7weo(D}??`P|qHG&-E@<3^MEqswW8?x8>80=p$6&yaNF)eJIffPg@xCbrV#~M&?%AuS0Oh&|n<{aaC|wZhuqZ`jPi0IDuXJq2 z&tTJM8IJ>cbY%Y`EY&B$kL1u47bMVd;4}p*$)RNxT;Gf;^Yt|ddJ0?)2s7BG zb$qci(*4Jjr~*$I&l6YHG!ujD0l#U=wCu(mB+8cH1kyb#Dy!P(y0;R~4b*!&(aL5x z&})-68Ya&@ILsyjLvh?0Szrel1dV7_tz_QM z!xQhVOc@$*==keG{$vAM^X2)QsQpI*k^jO&=0~0(Wt8{_DujDBupyewkI%x*t!*<_ z7%bG4tzj;g+{6>q%M(of(6P>F{hQFAQBQF=$NH*+nRyUcCfwYpGZPfiN_)qRX0M>Y ziWKh187a74si!XUJP+kJv3s-j6gs8V&+!3f=3W1tbC-pmbVH*q`dhz?X{%vJsV6At z_Ey3Ii$~9m54(M+Kqbk$f?_2R9!JVKI>5O5Qht#>5*R(RANjWbGo`(?x~$g|@G~e< z(N^WjWN-hMXp$1ETh%h{-a5O_T?Qw&zv=JT>(*I9byNP7%O7*=g{kK-22DeZC?k&WbzjQba3Wl;inn`s+EybgKRE}jE%ATlP&%+0{n->6qZmS$vfO*YKr zTa%S00CBy42(*|jQT(tIcbEF1Z`SRB@;XI4ZNRJf>Va|`EsDvTKwj1&Ucg*!S{Ja+ z61wYkKfL~APo;1~NLU0D?0#Q*${aje>=_WKf|@)WY4Q-DH82jq@FCgH;xq`rnviV+ zgkVngc)r2lr3wrBKoyV&apYVPXa5^28%O;+*V6ZXTT>8!KN~*f8l-|nhbdQe>P~$c zRYD64?vz$>Ro;!tFUOS(6N}4^6L@A{BMO{GwjN;uL+reA#^ebnl2zi7A^)f{$!qki zPU=@m&n)S997{Djw2|n!tt6GaD1>G-%-x@aJyvxAaoE#F9vyCTdG6y-3zl&_4rnYM zcl6uy`{Y)jqwWl#AwW>t<(`pQY&;f4@hNQPB6zUTW)QJ@UI2|ABjz)rvIsaiGEZqW zh9Szp9&HKSZCjYkV2}bvd{)gUScpkkgxDkx9<(tZ`5p+P2FBHVoI-c&GKbF^Ds7~B X^z7?-ziue_y)%J=)=2-qQTYD@Kt0Vi literal 731390 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 z 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

-fVK3;gEqe~|_ShR}jP(U? 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%0A%4u6RWUX_&^vwzkL8?fh47~8^e&sZ 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�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
DUcGRbTC4q=9A(*^VN6q?{;c(S}f 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 V;ruY4KOdW8Ep^eJ(WUQ2=huogb%e7l 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�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

!ez@DdYebyv7rgYv?~A)o3C}YdI5&Xt;SG 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

    co4geqj)&_5a4&gb0 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 z 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

    V8OS`)!0RNsS$Xr*0&~@c+LOI)#=!8P4WJ(6$ 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 T_+o-0A`(LQY-~!}%J}~edqVN7 diff --git a/content/references.bib b/content/references.bib index 92469851..79ce15ff 100644 --- a/content/references.bib +++ b/content/references.bib @@ -1457,3 +1457,12 @@ @article{White2015 volume = 60, year = 2015 } + + +@software{SolvingMicroDSOPs, +author = {Carroll, Christopher D.}, +month = feb, +title = {{Solution Methods for Microeconomic Dynamic Stochastic Optimization Problems}}, +url = {https://github.com/econ-ark/SolvingMicroDSOPs}, +year = {2024} +} \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..0f8872ed --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +import importlib.metadata +from typing import Any + +project = "SequentialEGM" +copyright = "2024, Alan Lujan" +author = "Alan Lujan" +version = release = importlib.metadata.version("sequentialegm") + +extensions = [ + "myst_parser", + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", + "sphinx.ext.mathjax", + "sphinx.ext.napoleon", + "sphinx_autodoc_typehints", + "sphinx_copybutton", +] + +source_suffix = [".rst", ".md"] +exclude_patterns = [ + "_build", + "**.ipynb_checkpoints", + "Thumbs.db", + ".DS_Store", + ".env", + ".venv", +] + +html_theme = "furo" + +html_theme_options: dict[str, Any] = { + "footer_icons": [ + { + "name": "GitHub", + "url": "https://github.com/alanlujan91/SequentialEGM", + "html": """ + + + + """, + "class": "", + }, + ], + "source_repository": "https://github.com/alanlujan91/SequentialEGM", + "source_branch": "main", + "source_directory": "docs/", +} + +myst_enable_extensions = [ + "colon_fence", +] + +intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), +} + +nitpick_ignore = [ + ("py:class", "_io.StringIO"), + ("py:class", "_io.BytesIO"), +] + +always_document_param_types = True diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..c18ba6e4 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,17 @@ +# SequentialEGM + +```{toctree} +:maxdepth: 2 +:hidden: + +``` + +```{include} ../README.md +:start-after: +``` + +## Indices and tables + +- {ref}`genindex` +- {ref}`modindex` +- {ref}`search` diff --git a/myst.yml b/myst.yml index c95db744..ab7cdf96 100644 --- a/myst.yml +++ b/myst.yml @@ -96,809 +96,25 @@ project: G2EGM: Generalized Endogenous Grid Method DCEGM: Discrete Choice Endogenous Grid Method WGI: Warped Grid Interpolation - math: - '\CARA': '\alpha' - '\CRRA': '\rho' - '\PtyLab': '\mathrm{Z}' - '\ptyLab': "z" - '\TaxComb': '\mathcal{T}' - '\Prob': '\mathbb{P}' - '\DiePrb': '\mathsf{D}' - '\diePrb': '\mathsf{d}' - '\LivPrb': '\cancel{\DiePrb}' - '\livPrb': '\cancel{\diePrb}' - '\DiscFac': '\beta' - '\DieFac': '\pDead' - '\GroFac': '\Omega' - '\BalGroFac': '\check' - '\permGroFac': '\Gamma' - '\PermGroFac': '\pmb{\Phi}' - '\PopnGroFac': '\Xi' - '\APFac': '\text{\pmb{\Thorn}}' - '\PopFac': '\PopGro' - '\RPFac': '\APFac_{\Rfree}' - '\DeprFac': '\daleth' - '\LivFac': '\Alive' - '\aVec': '\vec{\mathrm{a}}' - '\bVec': '\vec{\mathrm{\bNrm}}' - '\cVec': '\vec{\mathrm{\cNrm}}' - '\mVec': '\vec{\mathrm{m}}' - '\yVec': '\vec{\mathrm{\yNrm}}' - '\Inc': "Y" - '\inc': "y" - '\PInc': "P" - '\AFunc': '\mathrm{A}' - '\aFunc': '\mathrm{a}' - '\BFunc': '\mathrm{B}' - '\bFunc': '\mathrm{b}' - '\CFunc': '\mathrm{C}' - '\cFunc': '\mathrm{c}' - '\MPCFunc': '\pmb{\kappa}' - '\DFunc': '\mathrm{D}' - '\dFunc': '\mathrm{d}' - '\bEndFunc': '\mathfrak{b}' - '\CEndFunc': '\mathfrak{C}' - '\cEndFunc': '\mathfrak{c}' - '\dEndFunc': '\mathfrak{d}' - '\lEndFunc': '\mathfrak{l}' - '\mEndFunc': '\mathfrak{m}' - '\nEndFunc': '\mathfrak{n}' - '\VEndFunc': '\mathfrak{V}' - '\vEndFunc': '\mathfrak{v}' - '\zEndFunc': '\mathfrak{z}' - '\ProdFunc': '\mathrm{F}' - '\prodFunc': '\mathrm{f}' - '\EFunc': '\mathrm{E}' - '\eFunc': '\mathrm{e}' - '\FFunc': '\mathrm{F}' - '\fFunc': '\mathrm{f}' - '\GFunc': '\mathrm{G}' - '\gFunc': '\mathrm{g}' - '\vBegFunc': '\pmb{\upsilon}' - '\HFunc': '\mathrm{H}' - '\hFunc': '\mathrm{h}' - '\IFunc': '\mathrm{I}' - '\iFunc': '\mathrm{i}' - '\chiFunc': '\pmb{\chi}' - '\phiFunc': '\digamma' - '\JFunc': '\mathrm{J}' - '\jFunc': '\mathrm{j}' - '\KFunc': '\mathrm{K}' - '\kFunc': '\mathrm{k}' - '\LFunc': '\mathrm{L}' - '\utilFunc': '\mathrm{u}' - '\MFunc': '\mathrm{M}' - '\mFunc': '\mathrm{m}' - '\NFunc': '\mathrm{N}' - '\nFunc': '\mathrm{n}' - '\OFunc': '\mathrm{O}' - '\PFunc': '\mathrm{P}' - '\pFunc': '\mathrm{p}' - '\QFunc': '\mathrm{Q}' - '\RFunc': '\mathrm{R}' - '\rFunc': '\mathrm{r}' - '\SFunc': '\mathrm{S}' - '\sFunc': '\mathrm{s}' - '\MPSFunc': '\pmb{lambda}' - '\TFunc': '\mathrm{T}' - '\UFunc': '\mathrm{U}' - '\uFunc': '\mathrm{u}' - '\VFunc': '\mathrm{V}' - '\vFunc': '\mathrm{v}' - '\cPDVFunc': '\mathbb{C}' - '\pPDVFunc': '\mathbb{P}' - '\uPDVFunc': '\mathbb{U}' - '\cLevFunc': '\pmb{\cFunc}' - '\VLevFunc': '\pmb{\mathrm{V}}' - '\vLevFunc': '\pmb{\mathrm{v}}' - '\RevFunc': '\pmb{\Pi}' - '\revFunc': '\pmb{\pi}' - '\WFunc': '\mathrm{W}' - '\wFunc': '\mathrm{w}' - '\XFunc': '\mathrm{X}' - '\xFunc': '\mathrm{x}' - '\YFunc': '\mathrm{Y}' - '\yFunc': '\mathrm{y}' - '\ZFunc': '\mathrm{Z}' - '\zFunc': '\mathrm{z}' - '\MPC': '\kappa' - '\PIHMPC': '\varkappa' - '\MinMPC': '\uline{\kappa}' - '\MinMinMPC': '\underline{\kappa}' - '\MaxMinMPC': '\hat{\underline{\kappa}}' - '\MaxMPC': '\bar{\kappa}' - '\MaxMaxMPC': '\bar{\bar{\kappa}}' - '\itc': '\zeta' - '\kPriceAfterITC': '\mathscr{P}' - '\PostITC': '\cancel{\zeta}' - '\pDead': '\mathfrak{D}' - '\TaxPaid': "T" - '\WMid': '\BLev' - '\wMid': '\bLev' - '\Wmid': '\BRat' - '\wmid': '\bRat' - '\Dvdnd': '\mathbf{D}' - '\dvdnd': "d" - '\edvdnd': '\grave{\dvdnd}' - '\hEnd': '\mathfrak{h}' - '\GovSpend': "X" - '\govSpend': "x" - '\xpend': '\xi' - '\expend': '\xi' - '\TEnd': "T" - '\VEnd': '\mathfrak{V}' - '\vEnd': '\mathfrak{v}' - '\WEnd': '\ALev' - '\wEnd': '\aLev' - '\Wend': '\ARat' - '\wend': '\aRat' - '\permGroFacInd': '\pmb{\phi}' - '\permShkInd': '\psi' - '\tranShkInd': '\theta' - '\permLvlInd': '\mathrm{p}' - '\RCpnd': '\mathbf{R}' - '\Mod': '\tilde' - '\Rprod': '\mathscr{R}' - '\rprod': '\mathscr{r}' - '\RProd': '\mathsf{R}' - '\rProd': '\mathsf{r}' - '\tranShkIndStd': '\sigma_{\tranShkInd}' - '\tranShkAggStd': '\sigma_{\tranShkAgg}' - '\ShkMeanOneLogStd': '\sigma_{\ShkMeanOneLog}' - '\ShkLogZeroLogStd': '\sigma_{\cancel{\ShkMeanOneLog}}' - '\PermShkStd': '\sigma_{\PermShk}' - '\TranShkStd': '\sigma_{\TranShk}' - '\prud': '\eta' - '\tFwd': "n" - '\aE': '\aRat^{e}' - '\BE': '\BRat^{e}' - '\bE': '\bRat^{e}' - '\CE': '\CRat^{e}' - '\cE': '\cRat^{e}' - '\Price': '\mathsf{P}' - '\kPrice': '\mathsf{P}' - '\Severance': '\kappa' - '\MPCE': '\MPC^{e}' - '\Rfree': '\mathsf{R}' - '\rfree': '\mathsf{r}' - '\TaxFree': '\cancel{\Tax}' - '\Age': "Z" - '\age': "z" - '\Wage': '\mathsf{W}' - '\wage': '\mathsf{w}' - '\bTargE': '\check{b}^{e}' - '\CTargE': '\CTarg^{\null}' - '\cTargE': '\check{c}^{e}' - '\kTargE': '\Target{k}^{e}' - '\STargE': '\Target{\SRat}^{\null}' - '\sTargE': '\Target{\sRat}^{\null}' - '\yTargE': '\check{y}^{e}' - '\ME': '\MRat^{e}' - '\mE': '\mRat^{e}' - '\TermTime': "T" - '\ShkMeanOne': '\Theta' - '\PopE': '\mathcal{E}' - '\popE': "e" - '\labShare': '\nu' - '\leiShare': '\zeta' - '\kapShare': '\alpha' - '\riskyshare': '\varsigma' - '\Retire': '\mathbb{R}' - '\WPre': "K" - '\wPre': "k" - '\Leisure': "Z" - '\leisure': "z" - '\SE': '\SRat^{e}' - '\sE': '\sRat^{e}' - '\BRatE': "{B}^{e}" - '\bRatE': "{b}^{e}" - '\CRatE': '\CRat^{e}' - '\cRatE': '\cRat^{e}' - '\DiscRate': '\vartheta' - '\pDeadRate': '\grave{\cancel{\mathsf{d}}}' - '\erate': '\cancel{\mho}' - '\pDieRate': '\grave{\mathsf{d}}' - '\timeRate': '\vartheta' - '\saveRate': '\grave{s}' - '\MRatE': '\MRat^{e}' - '\mRatE': '\mRat^{e}' - '\SRatE': '\SRat^{e}' - '\sRatE': '\sRat^{e}' - '\srate': '\varsigma' - '\urate': '\mho' - '\TaxRate': "t" - '\empState': '\xi' - '\discRte': '\tau' - '\DiscRte': '\vartheta' - '\GroRte': '\omega' - '\BalGroRte': '\tilde' - '\permGroRte': '\gamma' - '\PermGroRte': '\varphi' - '\PopnGroRte': '\xi' - '\APRte': '\text{\thorn}' - '\GPRte': '\text{\thorn}_{\PermGroRte}' - '\popRte': '\popGro' - '\RPRte': '\text{\thorn}_{\rfree}' - '\deprRte': '\delta' - '\Value': '\mathrm{V}' - '\VE': "{V}^{e}" - '\vE': "{v}^{e}" - '\Save': "S" - '\save': "s" - '\RSave': '\underline{\Rfree}' - '\rsave': '\underline{\rfree}' - '\Abve': '\bar' - '\BLevE': '\BLev^{e}' - '\bLevE': '\bLev^{e}' - '\CLevE': '\CLev^{e}' - '\cLevE': '\cLev^{e}' - '\mLevE': '\mLev^{e}' - '\SLevE': '\SLev^{e}' - '\sLevE': '\sLev^{e}' - '\Alive': '\mathcal{L}' - '\cFuncAbove': '\bar{\mathrm{c}}' - '\aRatBF': '\pmb{a}' - '\bRatBF': '\pmb{\mathrm{b}}' - '\cRatBF': '\pmb{c}' - '\mRatBF': '\pmb{\mathrm{m}}' - '\ALevBF': '\mathbf{A}' - '\aLevBF': '\mathbf{a}' - '\BLevBF': '\mathbf{B}' - '\bLevBF': '\mathbf{b}' - '\CLevBF': '\mathbf{C}' - '\cLevBF': '\mathbf{c}' - '\HLevBF': '\mathbf{H}' - '\hLevBF': '\mathbf{h}' - '\KLevBF': '\mathbf{K}' - '\kLevBF': '\mathbf{k}' - '\LLevBF': '\mathbf{L}' - '\lLevBF': '\pmb{\ell}' - '\MLevBF': '\mathbf{M}' - '\mLevBF': '\mathbf{m}' - '\OLevBF': '\mathbf{O}' - '\oLevBF': '\mathbf{o}' - '\PLevBF': '\mathbf{P}' - '\pLevBF': '\mathbf{p}' - '\SLevBF': '\mathbf{S}' - '\sLevBF': '\mathbf{s}' - '\vLevBF': '\mathbf{v}' - '\YLevBF': '\mathbf{Y}' - '\yLevBF': '\mathbf{y}' - '\ZLevBF': '\mathbf{Z}' - '\zLevBF': '\pmb{z}' - '\CDF': '\mathcal{F}' - '\SDF': '\MLev' - '\RfreeEff': '\bar{\Rfree}' - '\CGroPF': '\Lambda' - '\cGroPF': '\lambda' - '\WGroPF': '\mathrm{G}' - '\MPCPPF': '\Pi' - '\vBeg': '\upsilon' - '\WBeg': '\KLev' - '\wBeg': '\kLev' - '\aAgg': '\mathsf{A}' - '\cAgg': '\pmb{C}' - '\permGroFacAgg': '\Phi' - '\RfreeAgg': '\Agg{\Rfree}' - '\PermShkAgg': '\Psi' - '\permShkAgg': '\Psi' - '\TranShkAgg': '\Theta' - '\tranShkAgg': '\Theta' - '\permLvlAgg': '\mathrm{P}' - '\PermLvlAgg': '\PLvl' - '\zAgg': '\pmb{Z}' - '\ShkMeanOneLog': '\theta' - '\mBalLog': '\BalGroRte{m}' - '\EpremLog': '\varphi' - '\ShkLogZeroLog': '\cancel{\ShkMeanOneLog}' - '\pLog': "p" - '\ImpG': '\Im}_{\PGro' - '\impg': '\imath}_{\pGro' - '\ATarg': '\check{A}' - '\aTarg': '\check{a}' - '\BTarg': '\check{B}' - '\bTarg': '\check{b}' - '\CTarg': '\Target{C}' - '\cTarg': '\check{c}' - '\BTargTarg': '\Target{\Target{\BRat}}' - '\bTargTarg': '\Target{\Target{\bRat}}' - '\cTargTarg': '\Target{\Target{\cRat}}' - '\STargTarg': '\Target{\Target{\SRat}}' - '\sTargTarg': '\Target{\Target{\sRat}}' - '\kTarg': '\Target{k}' - '\mTarg': '\check{m}' - '\STarg': '\Target{\SRat}' - '\sTarg': '\Target{\sRat}' - '\vTarg': '\Target{\vRat}' - '\yTarg': '\check{y}' - '\CGroOverG': '\Upsilon' - '\avg': '\bar' - '\h': "h" - '\Wealth': "O" - '\wealth': "o" - '\Hi': '\hat' - '\Chi': '\mathrm{X}' - '\NI': "Z" - '\TaxUI': '\tau' - '\adj': '\mathrm{j}' - '\PermGroFacAdj': '\underline{\PermGroFac}' - '\PGroAdj': '\underline{\PGro}' - '\pGroAdj': '\underline{\pGro}' - '\PatPGroAdj': '\text{\pmb{\Thorn}}_{\underline{\PGro}}' - '\patpGroAdj': '\text{\thorn}_{\underline{\pGro}}' - '\PermGroFacuAdj': '\underline{\underline{\PermGroFac}}' - '\PGrouAdj': '\underline{\underline{\PGro}}' - '\pGrouAdj': '\underline{\underline{\pGro}}' - '\DiscAltuAdj': '\underline{\underline{\beth}}' - '\TEndBak': '\mathsf{p}' - '\tBak': '\pmb{n}' - '\TEatBak': '\mathtt{q}' - '\ek': '\lambda' - '\Shk': '\Phi' - '\shk': '\phi' - '\PermShk': '\mathbf{\Psi}' - '\permShk': '\psi' - '\uInvEuPermShk': '\underline{\underline{\PermShk}}' - '\TranShk': '\pmb{\xi}' - '\PShk': '\Psi' - '\pShk': '\psi' - '\pshk': '\psi' - '\TShk': '\Xi' - '\tShk': '\xi' - '\tshk': '\xi' - '\Work': '\mathbb{W}' - '\vk': '\lambda' - '\util': "u" - '\TranShkAll': '\pmb{\xi}' - '\tShkAll': '\xi' - '\WAll': "O" - '\wAll': "o" - '\Lvl': '\mathbf' - '\ALvl': '\mathbf{A}' - '\aLvl': '\mathbf{a}' - '\BLvl': '\mathbf{B}' - '\bLvl': '\mathbf{b}' - '\CLvl': '\mathbf{C}' - '\cLvl': '\mathbf{c}' - '\DLvl': '\mathbf{D}' - '\dLvl': '\mathbf{d}' - '\ELvl': '\mathbf{E}' - '\eLvl': '\mathbf{e}' - '\FLvl': '\mathbf{F}' - '\fLvl': '\mathbf{f}' - '\GLvl': '\mathbf{G}' - '\HLvl': '\mathbf{H}' - '\hLvl': '\mathbf{h}' - '\ILvl': '\mathbf{I}' - '\iLvl': '\mathbf{i}' - '\JLvl': '\mathbf{J}' - '\jLvl': '\mathbf{j}' - '\KLvl': '\mathbf{K}' - '\kLvl': '\mathbf{k}' - '\LLvl': '\mathbf{L}' - '\ABalLvl': '\BalGroFac{\ALvl}' - '\MBalLvl': '\BalGroFac{\MNrm}' - '\mBalLvl': '\BalGroFac{m}' - '\MLvl': '\mathbf{M}' - '\mLvl': '\mathbf{m}' - '\PermLvl': '\pLvl' - '\NLvl': '\mathbf{N}' - '\PopnLvl': '\pmb{\mathrm{N}}' - '\OLvl': '\mathbf{O}' - '\PLvl': '\mathbf{P}' - '\pLvl': '\mathbf{p}' - '\QLvl': '\mathbf{Q}' - '\RLvl': '\mathbf{R}' - '\rLvl': '\mathbf{r}' - '\SLvl': '\mathbf{S}' - '\sLvl': '\mathbf{s}' - '\TLvl': '\mathbf{T}' - '\ULvl': '\mathbf{U}' - '\VLvl': '\mathbf{V}' - '\vLvl': '\mathbf{v}' - '\WLvl': '\mathbf{W}' - '\XLvl': '\mathbf{X}' - '\YLvl': '\mathbf{Y}' - '\yLvl': '\mathbf{y}' - '\ZLvl': '\mathbf{Z}' - '\zLvl': '\mathbf{z}' - '\Ham': '\mathcal{H}' - '\EPrem': '\Phi' - '\eprem': '\varphi' - '\tHorOfm': '\pmb{n}' - '\debtLim': '\mathsf{d}' - '\tTerm': "T" - '\vFirm': '\mathrm{e}' - '\ANrm': "A" - '\aNrm': "a" - '\BNrm': "B" - '\bNrm': "b" - '\CNrm': "C" - '\cNrm': "c" - '\GPFacNrm': '\APFac_{\PermGroFacAdj}' - '\DNrm': "D" - '\dNrm': "d" - '\ENrm': "E" - '\eNrm': "e" - '\FNrm': "F" - '\fNrm': "f" - '\bTrgNrm': '\TargetNrm{\bNrm}' - '\mTrgNrm': '\TargetNrm{m}' - '\HNrm': "H" - '\hNrm': "h" - '\INrm': "I" - '\iNrm': "i" - '\JNrm': "J" - '\jNrm': "j" - '\KNrm': "K" - '\kNrm': "k" - '\MNrm': "M" - '\mNrm': "m" - '\PNrm': "P" - '\pNrm': "p" - '\RNrm': '\mathcal{R}' - '\rNrm': "s" - '\SNrm': "S" - '\sNrm': "s" - '\TargetNrm': '\hat' - '\VNrm': "V" - '\vNrm': "v" - '\xNrm': "x" - '\YNrm': "Y" - '\yNrm': "y" - '\ZNrm': "Z" - '\zNrm': "z" - '\Rnorm': '\mathcal{R}' - '\rnorm': '\mathit{r}' - '\vNorm': '\mathrm{w}' - '\WHum': '\HLev' - '\wHum': '\hLev' - '\Whum': '\HRat' - '\whum': '\hRat' - '\Num': "N" - '\VNum': "V" - '\vNum': "v" - '\Mean': '\mathbb{M}' - '\tThen': '\tau' - '\valfn': '\mathrm{v}' - '\aMin': '\underline{\aRat}' - '\bMin': '\underline{\bRat}' - '\MPCmin': '\uline{\kappa}' - '\hEndMin': '\underline{\mathfrak{h}}' - '\aboveMin': '\blacktriangle' - '\hMin': '\underline{\h}' - '\HMin': '\underline{H}' - '\pShkMin': '\underline{\psi}' - '\whumMin': '\underline{\hRat}' - '\MPCminmin': '\underline{\kappa}' - '\TranShkEmpMin': '\underline{\TranShkEmp}' - '\tShkEmpMin': '\underline{\theta}' - '\MPSmin': '\pZero^{1/\CRRA} \RPFac' - '\MPCmaxmin': '\hat{\underline{\kappa}}' - '\Decision': '\mathbb{D}' - '\SeveranceRatio': '\varsigma' - '\Lo': '\check' - '\ShkLogZero': '\cancel{\ShkMeanOne}' - '\pZero': '\wp' - '\pNotZero': '(1-\pZero)' - '\LGro': '\Lambda' - '\lGro': '\lambda' - '\PGro': '\Gamma' - '\pGro': '\gamma' - '\GDPGro': '\gimel' - '\EmpGro': '\Xi' - '\empGro': '\xi' - '\PopGro': '\Xi' - '\popGro': '\xi' - '\PatPGro': '\text{\pmb{\Thorn}}_{\PGro}' - '\patpGro': '\text{\thorn}_{\pGro}' - '\XperGro': '\mathsf{X}' - '\xperGro': '\mathsf{x}' - '\DivGro': '\mathrm{G}' - '\divGro': '\mathsf{g}' - '\WGro': '\mathrm{G}' - '\wGro': '\mathsf{g}' - '\RnormWGro': '\mathcal{R}_{\WGro}' - '\rnormwGro': '\mathit{r}_{\wGro}' - '\PatWGro': '\text{\pmb{\Thorn}}_{\WGro}' - '\patwGro': '\text{\thorn}_{\wGro}' - '\PtyGro': '\Phi' - '\ptyGro': '\phi' - '\RBoro': '\bar{\Rfree}' - '\rboro': '\bar{\rfree}' - '\Pareto': '\zeta' - '\Kap': "K" - '\kap': "k" - '\EEndMap': '\mathsf{E}' - '\TMap': '\mathscr{T}' - '\cP': '\cons^{\prime}' - '\MPCP': '\pi' - '\taxDep': '\partial' - '\FP': '\mathrm{F}^{\prime}' - '\fP': '\mathrm{f}^{\prime}' - '\TranShkEmp': '\pmb{\theta}' - '\TShkEmp': '\Theta' - '\tShkEmp': '\theta' - '\IncUnemp': '\mu' - '\Pop': "L" - '\cPP': '\cons^{\prime\prime}' - '\FPP': '\mathrm{F}^{\prime\prime}' - '\fPP': '\mathrm{f}^{\prime\prime}' - '\cPPP': '\cons^{\prime\prime\prime}' - '\uPPP': '\mathrm{u}^{\prime\prime\prime}' - '\uPP': '\mathrm{u}^{\prime\prime}' - '\TaxCorp': '\Large \tau' - '\taxCorp': '\tau' - '\uP': '\mathrm{u}^{\prime}' - '\q': '\koppa' - '\adjPar': '\omega' - '\tranShkIndVar': '\sigma^{2}_{\tranShkInd}' - '\tranShkAggVar': '\sigma^{2}_{\tranShkAgg}' - '\ShkMeanOneLogVar': '\sigma^{2}_{\ShkMeanOneLog}' - '\ShkLogZeroLogVar': '\sigma_{\cancel{\ShkMeanOneLog}}^{2}' - '\PermShkVar': '\sigma^{2}_{\PermShk}' - '\TranShkVar': '\sigma^{2}_{\TranShk}' - '\sdr': '\mRat' - '\Estdr': '\sigma_{\risky}' - '\xFer': '\chi' - '\XFer': "X" - '\nIter': "n" - '\power': '\eta' - '\labor': '\ell' - '\Labor': '\mathrm{L}' - '\PLabor': "P" - '\Plabor': "P" - '\tHor': '\mathsf{n}' - '\error': '\epsilon' - '\Depr': '\daleth' - '\depr': '\delta' - '\ImpR': '\Im}_{\Rfree' - '\impr': '\imath}_{\rfree' - '\EVarr': '\sigma_{\Risky}^{2}' - '\Evarr': '\sigma_{\risky}^{2}' - '\Err': "Z" - '\err': "z" - '\CGroOverR': '\Phi' - '\corr': '\varrho' - '\curr': "1" - '\Curr': "t" - '\tCurr': "t" - '\PatR': '\text{\pmb{\Thorn}}_{\Rfree}' - '\patr': '\text{\thorn}_{\rfree}' - '\PDies': '\mathsf{D}' - '\pDies': '\mathsf{d}' - '\PLives': '\cancel{\PDies}' - '\pLives': '\cancel{\pDies}' - '\Stocks': "S" - '\stocks': "s" - '\TaxNetTrans': "Z" - '\taxNetTrans': "z" - '\unins': '\zeta' - '\Cons': "C" - '\cons': "c" - '\MPS': '\lambda' - '\MinMPS': '\pZero^{1/\CRRA} \PatR' - '\MaxMPS': '\PatR' - '\CGroPS': '\chi' - '\Hours': '\mathfrak{H}' - '\hours': '\mathfrak{h}' - '\ASS': "A" - '\aSS': "a" - '\cEss': "{c}^{e}" - '\mEss': '\check{m}^{e}' - '\vEss': '\check{v}^{e}' - '\MSS': '\breve{M}' - '\mSS': '\breve{m}' - '\RGross': '\breve{\mathsf{R}}' - '\rGross': '\breve{\mathsf{r}}' - '\tSS': "t" - '\effUnits': "X" - '\Surplus': "Z" - '\surplus': "z" - '\TEat': '\TEnd' - '\patpGrohat': '\hat{\text{\thorn}}_{\pGro}' - '\aMat': '[\mathrm{a}]' - '\bMat': '[\mathrm{\bNrm}]' - '\cMat': '[\mathrm{\cNrm}]' - '\tShkMat': '[\mathrm{\tShkEmp}]' - '\mMat': '[\mathrm{m}]' - '\xMat': '[\mathrm{\xNrm}]' - '\yMat': '[\mathrm{\yNrm}]' - '\Pat': '\text{\pmb{\Thorn}}' - '\pat': '\text{\thorn}' - '\ARat': "A" - '\aRat': "a" - '\NFARat': '\NRat' - '\BRat': "B" - '\bRat': "b" - '\CRat': "C" - '\cRat': "c" - '\ccRat': '\mathsf{c}' - '\dRat': "d" - '\WEndRat': '\ARat' - '\wEndRat': '\aRat' - '\HRat': "H" - '\hRat': "h" - '\IRat': "I" - '\iRat': "i" - '\KRat': "K" - '\kRat': "k" - '\LRat': "L" - '\lRat': "l" - '\WAllRat': "O" - '\wAllRat': "o" - '\MRat': "M" - '\mRat': "m" - '\NRat': "N" - '\nRat': "n" - '\ORat': "O" - '\oRat': "o" - '\pRat': "p" - '\GDPRat': "P" - '\gdpRat': "p" - '\SRat': "S" - '\sRat': "s" - '\VRat': "V" - '\vRat': "v" - '\WRat': "O" - '\wRat': "o" - '\XRat': "X" - '\xRat': "x" - '\YRat': "Y" - '\yRat': "y" - '\ZRat': "Z" - '\zRat': "z" - '\Debt': "D" - '\debt': "d" - '\Target': '\check' - '\WNet': "X" - '\wNet': "x" - '\straight': '\Pi' - '\weight': '\omega' - '\Habit': "H" - '\habit': "h" - '\WMkt': '\MLev' - '\wMkt': '\mLev' - '\wmkt': '\mLev' - '\Alt': '\grave' - '\DiscFacAlt': '\beth' - '\DiscAlt': '\beth' - '\ValAlt': '\mathcal{V}' - '\vOptAlt': '\grave{\tilde{\mathfrak{v}}}' - '\RiskyAlt': '\pmb{\mathfrak{R}}' - '\riskyAlt': '\pmb{\mathfrak{r}}' - '\uPmt': '\mu' - '\SeverancePayment': '\mathcal{S}' - '\kapRent': '\varkappa' - '\Discount': '\beta' - '\tinyAmount': '\epsilon' - '\WTot': '\mathbf{O}' - '\wTot': '\mathbf{o}' - '\Wtot': "O" - '\wtot': "o" - '\vOpt': '\tilde{\mathfrak{v}}' - '\Rport': '\mathbb{R}' - '\rport': '\mathbb{r}' - '\FDist': '\mathcal{F}' - '\fDist': '\mathcal{f}' - '\Next': "t+1" - '\tNext': "t+1" - '\BU': "{B}^{u}" - '\bU': "{b}^{u}" - '\CU': '\CRat^{u}' - '\cU': '\cRat^{u}' - '\MPCU': '\MPC^{u}' - '\MU': "{M}^{u}" - '\mU': "{m}^{u}" - '\PopU': '\mathcal{U}' - '\SU': '\SRat^{u}' - '\sU': '\sRat^{u}' - '\PatU': '\text{\pmb{\Thorn}}_{\urate}' - '\patu': '\text{\thorn}_{\urate}' - '\bRatU': "{b}^{u}" - '\CRatU': '\CRat^{u}' - '\cRatU': '\cRat^{u}' - '\SRatU': '\SRat^{u}' - '\sRatU': '\sRat^{u}' - '\VU': "{V}^{u}" - '\vU': "{v}^{u}" - '\BLevU': '\BLev^{u}' - '\bLevU': '\bLev^{u}' - '\CLevU': '\CLev^{u}' - '\cLevU': '\cLev^{u}' - '\SLevU': '\SLev^{u}' - '\sLevU': '\sLev^{u}' - '\pSav': '\phi' - '\PDV': '\mathbb{P}' - '\CPDV': '\text{PDV($C$)}' - '\PPDV': '\text{PDV($P$)}' - '\ALev': "A" - '\aLev': "a" - '\NFALev': '\NLev' - '\BLev': "B" - '\bLev': "b" - '\CLev': "C" - '\cLev': "c" - '\DLev': "D" - '\ELev': "E" - '\FLev': "F" - '\fLev': "f" - '\GLev': "G" - '\HLev': '\pmb{H}' - '\hLev': '\pmb{h}' - '\ILev': "I" - '\iLev': "i" - '\JLev': "J" - '\KLev': "K" - '\kLev': "k" - '\lLev': '\ell' - '\LLev': "L" - '\WAllLev': '\mathbf{O}' - '\wAllLev': '\mathbf{o}' - '\MLev': "M" - '\mLev': "m" - '\NLev': "N" - '\nLev': "n" - '\oLev': '\pmb{o}' - '\OLev': "O" - '\pLev': '\pmb{p}' - '\PLev': "P" - '\GDPLev': '\pmb{P}' - '\gdpLev': '\pmb{p}' - '\PopLev': '\pmb{N}' - '\QLev': "Q" - '\RLev': "R" - '\SLev': "S" - '\sLev': "s" - '\TLev': "T" - '\ULev': "U" - '\uLev': "u" - '\VLev': "V" - '\vLev': "v" - '\wLev': '\pmb{w}' - '\WLev': "W" - '\XLev': "X" - '\xLev': "x" - '\TaxLev': "T" - '\YLev': "Y" - '\yLev': "y" - '\PtyLev': "A" - '\ptyLev': "a" - '\ZLev': "Z" - '\zLev': "z" - '\Rev': '\Pi' - '\rev': '\pi' - '\tPrev': "t-1" - '\Div': "D" - '\DiscFacLiv': '\underline{\DiscFacRaw}' - '\Inv': "I" - '\inv': "i" - '\TaxCombInv': '\mathcal{T}^{-1}' - '\EPermShkInv': '\Ex[\PermShk^{-1}]' - '\InvEPermShkInv': '\underline{\PermShk}' - '\EpShkInv': '\Ex[\pShk^{-1}]' - '\InvEpShkInv': '\underline{\psi}' - '\uInvEpShkuInv': '\underline{\underline{\psi}}' - '\VInv': '\Lambda' - '\vInv': '\scriptstyle \Lambda \displaystyle' - '\cov': '\textup{cov}' - '\DiscFacRaw': '\beta' - '\GPFacRaw': '\APFac_{\PermGroFac}' - '\Belw': '\ushort' - '\GovNW': "N" - '\govNW': "n" - '\cFuncBelow': '\uline{\mathrm{c}}' - '\tNow': "t" - '\cFuncMax': '\bar{\bar{\mathrm{c}}}' - '\MPCmax': '\bar{\kappa}' - '\MPSmax': '\RPFac' - '\MPCmaxmax': '\bar{\bar{\kappa}}' - '\Tax': '\tau' - '\tax': '\tau' - '\Ex': '\mathbb{E}' - '\prudEx': '\omega' - '\Steady': '\bar' - '\Risky': '\mathbf{R}' - '\risky': '\mathbf{r}' - '\Seniority': '\mathsf{X}' - '\seniority': '\mathsf{x}' + + toc: + # Auto-generated by `myst init --write-toc` + - file: content/paper/egmn.md + - title: Content + children: + - file: content/paper/1_intro.md + - file: content/paper/2_method.md + - file: content/paper/3_multdim.md + - file: content/paper/4_multinterp.md + - file: content/paper/5_conditions.md + - file: content/paper/6_conclusion.md + - file: content/paper/7_appendix.md + - title: Code + children: + - file: code/examples/example_ConsPensionModel_baseline.ipynb + - file: code/examples/example_ConsLaborPortfolioModel.ipynb + - file: code/examples/example_ConsLaborSeparableModel.ipynb + - file: code/examples/example_ConsPensionModel.ipynb + - file: code/examples/example_ConsRetirementModel.ipynb + - file: code/examples/example_GaussianProcessRegression.ipynb + - file: code/examples/example_WarpedInterpolation.ipynb diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 00000000..75369d4e --- /dev/null +++ b/noxfile.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +import argparse +import shutil +from pathlib import Path + +import nox + +DIR = Path(__file__).parent.resolve() + +nox.needs_version = ">=2024.3.2" +nox.options.sessions = ["lint", "pylint", "tests"] +nox.options.default_venv_backend = "uv|virtualenv" + + +@nox.session +def lint(session: nox.Session) -> None: + """ + Run the linter. + """ + session.install("pre-commit") + session.run( + "pre-commit", "run", "--all-files", "--show-diff-on-failure", *session.posargs + ) + + +@nox.session +def pylint(session: nox.Session) -> None: + """ + Run PyLint. + """ + # This needs to be installed into the package environment, and is slower + # than a pre-commit check + session.install(".", "pylint>=3.2") + session.run("pylint", "sequentialegm", *session.posargs) + + +@nox.session +def tests(session: nox.Session) -> None: + """ + Run the unit and regular tests. + """ + session.install(".[test]") + session.run("pytest", *session.posargs) + + +@nox.session(reuse_venv=True) +def docs(session: nox.Session) -> None: + """ + Build the docs. Pass --non-interactive to avoid serving. First positional argument is the target directory. + """ + + parser = argparse.ArgumentParser() + parser.add_argument( + "-b", dest="builder", default="html", help="Build target (default: html)" + ) + parser.add_argument("output", nargs="?", help="Output directory") + args, posargs = parser.parse_known_args(session.posargs) + serve = args.builder == "html" and session.interactive + + session.install("-e.[docs]", "sphinx-autobuild") + + shared_args = ( + "-n", # nitpicky mode + "-T", # full tracebacks + f"-b={args.builder}", + "docs", + args.output or f"docs/_build/{args.builder}", + *posargs, + ) + + if serve: + session.run("sphinx-autobuild", "--open-browser", *shared_args) + else: + session.run("sphinx-build", "--keep-going", *shared_args) + + +@nox.session +def build_api_docs(session: nox.Session) -> None: + """ + Build (regenerate) API docs. + """ + + session.install("sphinx") + session.run( + "sphinx-apidoc", + "-o", + "docs/api/", + "--module-first", + "--no-toc", + "--force", + "src/sequentialegm", + ) + + +@nox.session +def build(session: nox.Session) -> None: + """ + Build an SDist and wheel. + """ + + build_path = DIR.joinpath("build") + if build_path.exists(): + shutil.rmtree(build_path) + + session.install("build") + session.run("python", "-m", "build") diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..3fe9754b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,157 @@ +[build-system] +requires = ["hatchling", "hatch-vcs"] +build-backend = "hatchling.build" + + +[project] +name = "SequentialEGM" +authors = [ + { name = "Alan Lujan", email = "alujan@jhu.edu" }, +] +description = "A great package." +readme = "README.md" +license.file = "LICENSE" +requires-python = ">=3.8" +classifiers = [ + "Development Status :: 1 - Planning", + "Intended Audience :: Science/Research", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Topic :: Scientific/Engineering", + "Typing :: Typed", +] +dynamic = ["version"] +dependencies = [] + +[project.optional-dependencies] +test = [ + "pytest >=6", + "pytest-cov >=3", +] +dev = [ + "pytest >=6", + "pytest-cov >=3", +] +docs = [ + "sphinx>=7.0", + "myst_parser>=0.13", + "sphinx_copybutton", + "sphinx_autodoc_typehints", + "furo>=2023.08.17", +] + +[project.urls] +Homepage = "https://github.com/alanlujan91/SequentialEGM" +"Bug Tracker" = "https://github.com/alanlujan91/SequentialEGM/issues" +Discussions = "https://github.com/alanlujan91/SequentialEGM/discussions" +Changelog = "https://github.com/alanlujan91/SequentialEGM/releases" + + +[tool.hatch] +version.source = "vcs" +build.hooks.vcs.version-file = "src/sequentialegm/_version.py" + +[tool.hatch.envs.default] +features = ["test"] +scripts.test = "pytest {args}" + + +[tool.pytest.ini_options] +minversion = "6.0" +addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] +xfail_strict = true +filterwarnings = [ + "error", +] +log_cli_level = "INFO" +testpaths = [ + "tests", +] + + +[tool.coverage] +run.source = ["sequentialegm"] +report.exclude_also = [ + '\.\.\.', + 'if typing.TYPE_CHECKING:', +] + +[tool.mypy] +files = ["src", "tests"] +python_version = "3.8" +warn_unused_configs = true +strict = true +enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"] +warn_unreachable = true +disallow_untyped_defs = false +disallow_incomplete_defs = false + +[[tool.mypy.overrides]] +module = "sequentialegm.*" +disallow_untyped_defs = true +disallow_incomplete_defs = true + + +[tool.ruff] + +[tool.ruff.lint] +extend-select = [ + "B", # flake8-bugbear + "I", # isort + "ARG", # flake8-unused-arguments + "C4", # flake8-comprehensions + "EM", # flake8-errmsg + "ICN", # flake8-import-conventions + "G", # flake8-logging-format + "PGH", # pygrep-hooks + "PIE", # flake8-pie + "PL", # pylint + "PT", # flake8-pytest-style + "PTH", # flake8-use-pathlib + "RET", # flake8-return + "RUF", # Ruff-specific + "SIM", # flake8-simplify + "T20", # flake8-print + "UP", # pyupgrade + "YTT", # flake8-2020 + "EXE", # flake8-executable + "NPY", # NumPy specific rules + "PD", # pandas-vet +] +ignore = [ + "PLR09", # Too many <...> + "PLR2004", # Magic value used in comparison + "ISC001", # Conflicts with formatter +] +isort.required-imports = ["from __future__ import annotations"] +# Uncomment if using a _compat.typing backport +# typing-modules = ["sequentialegm._compat.typing"] + +[tool.ruff.lint.per-file-ignores] +"tests/**" = ["T20"] +"noxfile.py" = ["T20"] + + +[tool.pylint] +py-version = "3.8" +ignore-paths = [".*/_version.py"] +reports.output-format = "colorized" +similarities.ignore-imports = "yes" +messages_control.disable = [ + "design", + "fixme", + "line-too-long", + "missing-module-docstring", + "missing-function-docstring", + "wrong-import-position", +] diff --git a/src/sequentialegm/__init__.py b/src/sequentialegm/__init__.py new file mode 100644 index 00000000..aeaf0cdb --- /dev/null +++ b/src/sequentialegm/__init__.py @@ -0,0 +1,11 @@ +""" +Copyright (c) 2024 Alan Lujan. All rights reserved. + +SequentialEGM: A great package. +""" + +from __future__ import annotations + +from ._version import version as __version__ + +__all__ = ["__version__"] diff --git a/src/sequentialegm/_version.pyi b/src/sequentialegm/_version.pyi new file mode 100644 index 00000000..91744f98 --- /dev/null +++ b/src/sequentialegm/_version.pyi @@ -0,0 +1,4 @@ +from __future__ import annotations + +version: str +version_tuple: tuple[int, int, int] | tuple[int, int, int, str, str] diff --git a/src/sequentialegm/py.typed b/src/sequentialegm/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/tests/test_package.py b/tests/test_package.py new file mode 100644 index 00000000..86e3b2e9 --- /dev/null +++ b/tests/test_package.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +import importlib.metadata + +import sequentialegm as m + + +def test_version(): + assert importlib.metadata.version("sequentialegm") == m.__version__ From 573271c918e3bfb95f07a3d387667879dc5c59d1 Mon Sep 17 00:00:00 2001 From: Alan Lujan Date: Thu, 17 Oct 2024 14:25:05 -0400 Subject: [PATCH 02/11] move from code to src --- {code => src}/README.md | 0 {code => src}/clean_md.py | 0 {code => src}/egmn/ConsLaborSeparableModel.py | 0 {code => src}/egmn/ConsPensionModel.py | 0 {code => src}/egmn/ConsRetirementContribModel.py | 0 {code => src}/egmn/ConsRetirementModel.py | 0 {code => src}/egmn/__init__.py | 0 {code => src}/egmn/py.typed | 0 {code => src}/egmn/utilities.py | 0 {code => src}/examples/example_ConsLaborPortfolioModel.ipynb | 0 {code => src}/examples/example_ConsLaborSeparableModel.ipynb | 0 {code => src}/examples/example_ConsPensionModel.ipynb | 0 {code => src}/examples/example_ConsPensionModel_baseline.ipynb | 0 {code => src}/examples/example_ConsRetirementModel.ipynb | 0 {code => src}/examples/example_GaussianProcessRegression.ipynb | 0 {code => src}/examples/example_WarpedInterpolation.ipynb | 0 {code => src}/markdown/example_ConsLaborPortfolioModel.md | 0 {code => src}/markdown/example_ConsLaborSeparableModel.md | 0 {code => src}/markdown/example_ConsPensionModel.md | 0 {code => src}/markdown/example_ConsPensionModel_baseline.md | 0 {code => src}/markdown/example_ConsRetirementModel.md | 0 {code => src}/markdown/example_GaussianProcessRegression.md | 0 {code => src}/markdown/example_WarpedInterpolation.md | 0 {code => src}/reproduce_paper.py | 0 {code => src}/tests/test_package.py | 0 25 files changed, 0 insertions(+), 0 deletions(-) rename {code => src}/README.md (100%) rename {code => src}/clean_md.py (100%) rename {code => src}/egmn/ConsLaborSeparableModel.py (100%) rename {code => src}/egmn/ConsPensionModel.py (100%) rename {code => src}/egmn/ConsRetirementContribModel.py (100%) rename {code => src}/egmn/ConsRetirementModel.py (100%) rename {code => src}/egmn/__init__.py (100%) rename {code => src}/egmn/py.typed (100%) rename {code => src}/egmn/utilities.py (100%) rename {code => src}/examples/example_ConsLaborPortfolioModel.ipynb (100%) rename {code => src}/examples/example_ConsLaborSeparableModel.ipynb (100%) rename {code => src}/examples/example_ConsPensionModel.ipynb (100%) rename {code => src}/examples/example_ConsPensionModel_baseline.ipynb (100%) rename {code => src}/examples/example_ConsRetirementModel.ipynb (100%) rename {code => src}/examples/example_GaussianProcessRegression.ipynb (100%) rename {code => src}/examples/example_WarpedInterpolation.ipynb (100%) rename {code => src}/markdown/example_ConsLaborPortfolioModel.md (100%) rename {code => src}/markdown/example_ConsLaborSeparableModel.md (100%) rename {code => src}/markdown/example_ConsPensionModel.md (100%) rename {code => src}/markdown/example_ConsPensionModel_baseline.md (100%) rename {code => src}/markdown/example_ConsRetirementModel.md (100%) rename {code => src}/markdown/example_GaussianProcessRegression.md (100%) rename {code => src}/markdown/example_WarpedInterpolation.md (100%) rename {code => src}/reproduce_paper.py (100%) rename {code => src}/tests/test_package.py (100%) diff --git a/code/README.md b/src/README.md similarity index 100% rename from code/README.md rename to src/README.md diff --git a/code/clean_md.py b/src/clean_md.py similarity index 100% rename from code/clean_md.py rename to src/clean_md.py diff --git a/code/egmn/ConsLaborSeparableModel.py b/src/egmn/ConsLaborSeparableModel.py similarity index 100% rename from code/egmn/ConsLaborSeparableModel.py rename to src/egmn/ConsLaborSeparableModel.py diff --git a/code/egmn/ConsPensionModel.py b/src/egmn/ConsPensionModel.py similarity index 100% rename from code/egmn/ConsPensionModel.py rename to src/egmn/ConsPensionModel.py diff --git a/code/egmn/ConsRetirementContribModel.py b/src/egmn/ConsRetirementContribModel.py similarity index 100% rename from code/egmn/ConsRetirementContribModel.py rename to src/egmn/ConsRetirementContribModel.py diff --git a/code/egmn/ConsRetirementModel.py b/src/egmn/ConsRetirementModel.py similarity index 100% rename from code/egmn/ConsRetirementModel.py rename to src/egmn/ConsRetirementModel.py diff --git a/code/egmn/__init__.py b/src/egmn/__init__.py similarity index 100% rename from code/egmn/__init__.py rename to src/egmn/__init__.py diff --git a/code/egmn/py.typed b/src/egmn/py.typed similarity index 100% rename from code/egmn/py.typed rename to src/egmn/py.typed diff --git a/code/egmn/utilities.py b/src/egmn/utilities.py similarity index 100% rename from code/egmn/utilities.py rename to src/egmn/utilities.py diff --git a/code/examples/example_ConsLaborPortfolioModel.ipynb b/src/examples/example_ConsLaborPortfolioModel.ipynb similarity index 100% rename from code/examples/example_ConsLaborPortfolioModel.ipynb rename to src/examples/example_ConsLaborPortfolioModel.ipynb diff --git a/code/examples/example_ConsLaborSeparableModel.ipynb b/src/examples/example_ConsLaborSeparableModel.ipynb similarity index 100% rename from code/examples/example_ConsLaborSeparableModel.ipynb rename to src/examples/example_ConsLaborSeparableModel.ipynb diff --git a/code/examples/example_ConsPensionModel.ipynb b/src/examples/example_ConsPensionModel.ipynb similarity index 100% rename from code/examples/example_ConsPensionModel.ipynb rename to src/examples/example_ConsPensionModel.ipynb diff --git a/code/examples/example_ConsPensionModel_baseline.ipynb b/src/examples/example_ConsPensionModel_baseline.ipynb similarity index 100% rename from code/examples/example_ConsPensionModel_baseline.ipynb rename to src/examples/example_ConsPensionModel_baseline.ipynb diff --git a/code/examples/example_ConsRetirementModel.ipynb b/src/examples/example_ConsRetirementModel.ipynb similarity index 100% rename from code/examples/example_ConsRetirementModel.ipynb rename to src/examples/example_ConsRetirementModel.ipynb diff --git a/code/examples/example_GaussianProcessRegression.ipynb b/src/examples/example_GaussianProcessRegression.ipynb similarity index 100% rename from code/examples/example_GaussianProcessRegression.ipynb rename to src/examples/example_GaussianProcessRegression.ipynb diff --git a/code/examples/example_WarpedInterpolation.ipynb b/src/examples/example_WarpedInterpolation.ipynb similarity index 100% rename from code/examples/example_WarpedInterpolation.ipynb rename to src/examples/example_WarpedInterpolation.ipynb diff --git a/code/markdown/example_ConsLaborPortfolioModel.md b/src/markdown/example_ConsLaborPortfolioModel.md similarity index 100% rename from code/markdown/example_ConsLaborPortfolioModel.md rename to src/markdown/example_ConsLaborPortfolioModel.md diff --git a/code/markdown/example_ConsLaborSeparableModel.md b/src/markdown/example_ConsLaborSeparableModel.md similarity index 100% rename from code/markdown/example_ConsLaborSeparableModel.md rename to src/markdown/example_ConsLaborSeparableModel.md diff --git a/code/markdown/example_ConsPensionModel.md b/src/markdown/example_ConsPensionModel.md similarity index 100% rename from code/markdown/example_ConsPensionModel.md rename to src/markdown/example_ConsPensionModel.md diff --git a/code/markdown/example_ConsPensionModel_baseline.md b/src/markdown/example_ConsPensionModel_baseline.md similarity index 100% rename from code/markdown/example_ConsPensionModel_baseline.md rename to src/markdown/example_ConsPensionModel_baseline.md diff --git a/code/markdown/example_ConsRetirementModel.md b/src/markdown/example_ConsRetirementModel.md similarity index 100% rename from code/markdown/example_ConsRetirementModel.md rename to src/markdown/example_ConsRetirementModel.md diff --git a/code/markdown/example_GaussianProcessRegression.md b/src/markdown/example_GaussianProcessRegression.md similarity index 100% rename from code/markdown/example_GaussianProcessRegression.md rename to src/markdown/example_GaussianProcessRegression.md diff --git a/code/markdown/example_WarpedInterpolation.md b/src/markdown/example_WarpedInterpolation.md similarity index 100% rename from code/markdown/example_WarpedInterpolation.md rename to src/markdown/example_WarpedInterpolation.md diff --git a/code/reproduce_paper.py b/src/reproduce_paper.py similarity index 100% rename from code/reproduce_paper.py rename to src/reproduce_paper.py diff --git a/code/tests/test_package.py b/src/tests/test_package.py similarity index 100% rename from code/tests/test_package.py rename to src/tests/test_package.py From 9ca1fbc914f38ea3b6b5d666920eeffcd56c2e8a Mon Sep 17 00:00:00 2001 From: Alan Lujan Date: Thu, 17 Oct 2024 14:26:44 -0400 Subject: [PATCH 03/11] move from content to docs --- {content => docs}/docs/conf.py | 0 {content => docs}/docs/index.md | 0 {content => docs}/paper/1_intro.md | 0 {content => docs}/paper/2_method.md | 0 {content => docs}/paper/3_multdim.md | 0 {content => docs}/paper/4_multinterp.md | 0 {content => docs}/paper/5_conditions.md | 0 {content => docs}/paper/6_conclusion.md | 0 {content => docs}/paper/7_appendix.md | 0 {content => docs}/paper/egmn.md | 0 .../_extensions/grantmcdermott/clean/_extension.yml | 0 .../_extensions/grantmcdermott/clean/clean.scss | 0 {content => docs}/presentation/cef 2023/index.Rmd | 0 {content => docs}/presentation/cef 2023/index.html | 0 {content => docs}/presentation/index.qmd | 0 {content => docs}/presentation/presentation.qmd | 0 {content => docs}/presentation/refs.bib | 0 {content => docs}/public/PoweredByEconARK.pdf | Bin {content => docs}/public/PoweredByEconARK.svg | 0 {content => docs}/public/SequentialEGMn.pdf | Bin {content => docs}/public/banner.png | Bin {content => docs}/public/econ-ark-logo-small.png | Bin {content => docs}/public/econ-ark-logo.png | Bin {content => docs}/public/thumbnail.png | Bin {content => docs}/references.bib | 0 {content => docs}/shortcuts.yml | 0 26 files changed, 0 insertions(+), 0 deletions(-) rename {content => docs}/docs/conf.py (100%) rename {content => docs}/docs/index.md (100%) rename {content => docs}/paper/1_intro.md (100%) rename {content => docs}/paper/2_method.md (100%) rename {content => docs}/paper/3_multdim.md (100%) rename {content => docs}/paper/4_multinterp.md (100%) rename {content => docs}/paper/5_conditions.md (100%) rename {content => docs}/paper/6_conclusion.md (100%) rename {content => docs}/paper/7_appendix.md (100%) rename {content => docs}/paper/egmn.md (100%) rename {content => docs}/presentation/_extensions/grantmcdermott/clean/_extension.yml (100%) rename {content => docs}/presentation/_extensions/grantmcdermott/clean/clean.scss (100%) rename {content => docs}/presentation/cef 2023/index.Rmd (100%) rename {content => docs}/presentation/cef 2023/index.html (100%) rename {content => docs}/presentation/index.qmd (100%) rename {content => docs}/presentation/presentation.qmd (100%) rename {content => docs}/presentation/refs.bib (100%) rename {content => docs}/public/PoweredByEconARK.pdf (100%) rename {content => docs}/public/PoweredByEconARK.svg (100%) rename {content => docs}/public/SequentialEGMn.pdf (100%) rename {content => docs}/public/banner.png (100%) rename {content => docs}/public/econ-ark-logo-small.png (100%) rename {content => docs}/public/econ-ark-logo.png (100%) rename {content => docs}/public/thumbnail.png (100%) rename {content => docs}/references.bib (100%) rename {content => docs}/shortcuts.yml (100%) diff --git a/content/docs/conf.py b/docs/docs/conf.py similarity index 100% rename from content/docs/conf.py rename to docs/docs/conf.py diff --git a/content/docs/index.md b/docs/docs/index.md similarity index 100% rename from content/docs/index.md rename to docs/docs/index.md diff --git a/content/paper/1_intro.md b/docs/paper/1_intro.md similarity index 100% rename from content/paper/1_intro.md rename to docs/paper/1_intro.md diff --git a/content/paper/2_method.md b/docs/paper/2_method.md similarity index 100% rename from content/paper/2_method.md rename to docs/paper/2_method.md diff --git a/content/paper/3_multdim.md b/docs/paper/3_multdim.md similarity index 100% rename from content/paper/3_multdim.md rename to docs/paper/3_multdim.md diff --git a/content/paper/4_multinterp.md b/docs/paper/4_multinterp.md similarity index 100% rename from content/paper/4_multinterp.md rename to docs/paper/4_multinterp.md diff --git a/content/paper/5_conditions.md b/docs/paper/5_conditions.md similarity index 100% rename from content/paper/5_conditions.md rename to docs/paper/5_conditions.md diff --git a/content/paper/6_conclusion.md b/docs/paper/6_conclusion.md similarity index 100% rename from content/paper/6_conclusion.md rename to docs/paper/6_conclusion.md diff --git a/content/paper/7_appendix.md b/docs/paper/7_appendix.md similarity index 100% rename from content/paper/7_appendix.md rename to docs/paper/7_appendix.md diff --git a/content/paper/egmn.md b/docs/paper/egmn.md similarity index 100% rename from content/paper/egmn.md rename to docs/paper/egmn.md diff --git a/content/presentation/_extensions/grantmcdermott/clean/_extension.yml b/docs/presentation/_extensions/grantmcdermott/clean/_extension.yml similarity index 100% rename from content/presentation/_extensions/grantmcdermott/clean/_extension.yml rename to docs/presentation/_extensions/grantmcdermott/clean/_extension.yml diff --git a/content/presentation/_extensions/grantmcdermott/clean/clean.scss b/docs/presentation/_extensions/grantmcdermott/clean/clean.scss similarity index 100% rename from content/presentation/_extensions/grantmcdermott/clean/clean.scss rename to docs/presentation/_extensions/grantmcdermott/clean/clean.scss diff --git a/content/presentation/cef 2023/index.Rmd b/docs/presentation/cef 2023/index.Rmd similarity index 100% rename from content/presentation/cef 2023/index.Rmd rename to docs/presentation/cef 2023/index.Rmd diff --git a/content/presentation/cef 2023/index.html b/docs/presentation/cef 2023/index.html similarity index 100% rename from content/presentation/cef 2023/index.html rename to docs/presentation/cef 2023/index.html diff --git a/content/presentation/index.qmd b/docs/presentation/index.qmd similarity index 100% rename from content/presentation/index.qmd rename to docs/presentation/index.qmd diff --git a/content/presentation/presentation.qmd b/docs/presentation/presentation.qmd similarity index 100% rename from content/presentation/presentation.qmd rename to docs/presentation/presentation.qmd diff --git a/content/presentation/refs.bib b/docs/presentation/refs.bib similarity index 100% rename from content/presentation/refs.bib rename to docs/presentation/refs.bib diff --git a/content/public/PoweredByEconARK.pdf b/docs/public/PoweredByEconARK.pdf similarity index 100% rename from content/public/PoweredByEconARK.pdf rename to docs/public/PoweredByEconARK.pdf diff --git a/content/public/PoweredByEconARK.svg b/docs/public/PoweredByEconARK.svg similarity index 100% rename from content/public/PoweredByEconARK.svg rename to docs/public/PoweredByEconARK.svg diff --git a/content/public/SequentialEGMn.pdf b/docs/public/SequentialEGMn.pdf similarity index 100% rename from content/public/SequentialEGMn.pdf rename to docs/public/SequentialEGMn.pdf diff --git a/content/public/banner.png b/docs/public/banner.png similarity index 100% rename from content/public/banner.png rename to docs/public/banner.png diff --git a/content/public/econ-ark-logo-small.png b/docs/public/econ-ark-logo-small.png similarity index 100% rename from content/public/econ-ark-logo-small.png rename to docs/public/econ-ark-logo-small.png diff --git a/content/public/econ-ark-logo.png b/docs/public/econ-ark-logo.png similarity index 100% rename from content/public/econ-ark-logo.png rename to docs/public/econ-ark-logo.png diff --git a/content/public/thumbnail.png b/docs/public/thumbnail.png similarity index 100% rename from content/public/thumbnail.png rename to docs/public/thumbnail.png diff --git a/content/references.bib b/docs/references.bib similarity index 100% rename from content/references.bib rename to docs/references.bib diff --git a/content/shortcuts.yml b/docs/shortcuts.yml similarity index 100% rename from content/shortcuts.yml rename to docs/shortcuts.yml From a9315a9fa03077a4124eb7602491c6af213b5ebf Mon Sep 17 00:00:00 2001 From: Alan Lujan Date: Thu, 17 Oct 2024 14:29:45 -0400 Subject: [PATCH 04/11] environment --- docs/docs/conf.py | 45 ----------------------- docs/docs/index.md | 20 ---------- binder/environment.yml => environment.yml | 0 3 files changed, 65 deletions(-) delete mode 100644 docs/docs/conf.py delete mode 100644 docs/docs/index.md rename binder/environment.yml => environment.yml (100%) diff --git a/docs/docs/conf.py b/docs/docs/conf.py deleted file mode 100644 index 3d8e668a..00000000 --- a/docs/docs/conf.py +++ /dev/null @@ -1,45 +0,0 @@ -from __future__ import annotations - -import importlib.metadata - -project = "SequentialEGM" -copyright = "2024, Alan Lujan" -author = "Alan Lujan" -version = release = importlib.metadata.version("egmn") - -extensions = [ - "myst_parser", - "sphinx.ext.autodoc", - "sphinx.ext.intersphinx", - "sphinx.ext.mathjax", - "sphinx.ext.napoleon", - "sphinx_autodoc_typehints", - "sphinx_copybutton", -] - -source_suffix = [".rst", ".md"] -exclude_patterns = [ - "_build", - "**.ipynb_checkpoints", - "Thumbs.db", - ".DS_Store", - ".env", - ".venv", -] - -html_theme = "furo" - -myst_enable_extensions = [ - "colon_fence", -] - -intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), -} - -nitpick_ignore = [ - ("py:class", "_io.StringIO"), - ("py:class", "_io.BytesIO"), -] - -always_document_param_types = True diff --git a/docs/docs/index.md b/docs/docs/index.md deleted file mode 100644 index 9d0aa156..00000000 --- a/docs/docs/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# SequentialEGM - -```{toctree} ---- -maxdepth: 2 -hidden: ---- -``` - -```{include} ../README.md ---- -start-after: ---- -``` - -## Indices and tables - -- {ref}`genindex` -- {ref}`modindex` -- {ref}`search` diff --git a/binder/environment.yml b/environment.yml similarity index 100% rename from binder/environment.yml rename to environment.yml From bc3f99e8d4e03ea4699083a960b0845389591c7c Mon Sep 17 00:00:00 2001 From: Alan Lujan Date: Thu, 17 Oct 2024 14:38:57 -0400 Subject: [PATCH 05/11] sequentialegm --- src/egmn/__init__.py | 10 ---------- src/egmn/py.typed | 0 src/{egmn => sequentialegm}/ConsLaborSeparableModel.py | 0 src/{egmn => sequentialegm}/ConsPensionModel.py | 0 .../ConsRetirementContribModel.py | 0 src/{egmn => sequentialegm}/ConsRetirementModel.py | 0 src/{egmn => sequentialegm}/utilities.py | 0 7 files changed, 10 deletions(-) delete mode 100644 src/egmn/__init__.py delete mode 100644 src/egmn/py.typed rename src/{egmn => sequentialegm}/ConsLaborSeparableModel.py (100%) rename src/{egmn => sequentialegm}/ConsPensionModel.py (100%) rename src/{egmn => sequentialegm}/ConsRetirementContribModel.py (100%) rename src/{egmn => sequentialegm}/ConsRetirementModel.py (100%) rename src/{egmn => sequentialegm}/utilities.py (100%) diff --git a/src/egmn/__init__.py b/src/egmn/__init__.py deleted file mode 100644 index b5d264c6..00000000 --- a/src/egmn/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Copyright (c) 2024 Alan Lujan. All rights reserved. - -SequentialEGM: A great package. -""" - -from __future__ import annotations - -__version__ = "0.1.0" - -__all__ = ["__version__"] diff --git a/src/egmn/py.typed b/src/egmn/py.typed deleted file mode 100644 index e69de29b..00000000 diff --git a/src/egmn/ConsLaborSeparableModel.py b/src/sequentialegm/ConsLaborSeparableModel.py similarity index 100% rename from src/egmn/ConsLaborSeparableModel.py rename to src/sequentialegm/ConsLaborSeparableModel.py diff --git a/src/egmn/ConsPensionModel.py b/src/sequentialegm/ConsPensionModel.py similarity index 100% rename from src/egmn/ConsPensionModel.py rename to src/sequentialegm/ConsPensionModel.py diff --git a/src/egmn/ConsRetirementContribModel.py b/src/sequentialegm/ConsRetirementContribModel.py similarity index 100% rename from src/egmn/ConsRetirementContribModel.py rename to src/sequentialegm/ConsRetirementContribModel.py diff --git a/src/egmn/ConsRetirementModel.py b/src/sequentialegm/ConsRetirementModel.py similarity index 100% rename from src/egmn/ConsRetirementModel.py rename to src/sequentialegm/ConsRetirementModel.py diff --git a/src/egmn/utilities.py b/src/sequentialegm/utilities.py similarity index 100% rename from src/egmn/utilities.py rename to src/sequentialegm/utilities.py From dccf940d0ceed9f068a23e873bd03bbf0506b0c3 Mon Sep 17 00:00:00 2001 From: Alan Lujan Date: Thu, 17 Oct 2024 14:56:15 -0400 Subject: [PATCH 06/11] remove quarto files --- .../grantmcdermott/clean/_extension.yml | 13 - .../grantmcdermott/clean/clean.scss | 298 - .../libs/clipboard/clipboard.min.js | 562 - .../libs/quarto-contrib/videojs/video-js.css | 1954 - .../libs/quarto-contrib/videojs/video.min.js | 32045 ---------------- .../libs/quarto-html/light-border.css | 111 - .../libs/quarto-html/popper.min.js | 1306 - .../libs/quarto-html/quarto-html.min.css | 1 - .../quarto-syntax-highlighting.css | 206 - .../index_files/libs/quarto-html/tabby.min.js | 418 - docs/index_files/libs/quarto-html/tippy.css | 74 - .../libs/quarto-html/tippy.umd.min.js | 1496 - docs/index_files/libs/revealjs/dist/reset.css | 30 - .../index_files/libs/revealjs/dist/reveal.css | 8 - .../libs/revealjs/dist/reveal.esm.js | 9 - .../libs/revealjs/dist/reveal.esm.js.map | 1 - docs/index_files/libs/revealjs/dist/reveal.js | 9 - .../libs/revealjs/dist/reveal.js.map | 1 - .../dist/theme/fonts/league-gothic/LICENSE | 2 - .../fonts/league-gothic/league-gothic.css | 10 - .../fonts/league-gothic/league-gothic.eot | Bin 25696 -> 0 bytes .../fonts/league-gothic/league-gothic.ttf | Bin 64256 -> 0 bytes .../fonts/league-gothic/league-gothic.woff | Bin 30764 -> 0 bytes .../dist/theme/fonts/source-sans-pro/LICENSE | 45 - .../source-sans-pro-italic.eot | Bin 75720 -> 0 bytes .../source-sans-pro-italic.ttf | Bin 238084 -> 0 bytes .../source-sans-pro-italic.woff | Bin 98556 -> 0 bytes .../source-sans-pro-regular.eot | Bin 88070 -> 0 bytes .../source-sans-pro-regular.ttf | Bin 288008 -> 0 bytes .../source-sans-pro-regular.woff | Bin 114324 -> 0 bytes .../source-sans-pro-semibold.eot | Bin 89897 -> 0 bytes .../source-sans-pro-semibold.ttf | Bin 284640 -> 0 bytes .../source-sans-pro-semibold.woff | Bin 115648 -> 0 bytes .../source-sans-pro-semibolditalic.eot | Bin 75706 -> 0 bytes .../source-sans-pro-semibolditalic.ttf | Bin 240944 -> 0 bytes .../source-sans-pro-semibolditalic.woff | Bin 98816 -> 0 bytes .../fonts/source-sans-pro/source-sans-pro.css | 39 - .../libs/revealjs/dist/theme/quarto.css | 8 - .../plugin/highlight/highlight.esm.js | 30063 --------------- .../revealjs/plugin/highlight/highlight.js | 30333 --------------- .../revealjs/plugin/highlight/monokai.css | 71 - .../libs/revealjs/plugin/highlight/plugin.js | 646 - .../revealjs/plugin/highlight/zenburn.css | 79 - .../revealjs/plugin/markdown/markdown.esm.js | 5339 --- .../libs/revealjs/plugin/markdown/markdown.js | 5422 --- .../libs/revealjs/plugin/markdown/plugin.js | 511 - .../libs/revealjs/plugin/math/katex.js | 92 - .../libs/revealjs/plugin/math/math.esm.js | 2132 - .../libs/revealjs/plugin/math/math.js | 2165 -- .../libs/revealjs/plugin/math/mathjax2.js | 84 - .../libs/revealjs/plugin/math/mathjax3.js | 76 - .../libs/revealjs/plugin/math/plugin.js | 15 - .../libs/revealjs/plugin/notes/notes.esm.js | 4328 --- .../libs/revealjs/plugin/notes/notes.js | 4401 --- .../libs/revealjs/plugin/notes/plugin.js | 243 - .../revealjs/plugin/notes/speaker-view.html | 913 - .../revealjs/plugin/pdf-export/pdfexport.js | 125 - .../revealjs/plugin/pdf-export/plugin.yml | 2 - .../quarto-line-highlight/line-highlight.css | 31 - .../quarto-line-highlight/line-highlight.js | 351 - .../plugin/quarto-line-highlight/plugin.yml | 4 - .../revealjs/plugin/quarto-support/footer.css | 110 - .../revealjs/plugin/quarto-support/plugin.yml | 5 - .../revealjs/plugin/quarto-support/support.js | 358 - .../libs/revealjs/plugin/reveal-menu/menu.css | 349 - .../libs/revealjs/plugin/reveal-menu/menu.js | 2256 -- .../revealjs/plugin/reveal-menu/plugin.yml | 9 - .../plugin/reveal-menu/quarto-menu.css | 68 - .../plugin/reveal-menu/quarto-menu.js | 43 - .../libs/revealjs/plugin/search/plugin.js | 247 - .../libs/revealjs/plugin/search/search.esm.js | 1144 - .../libs/revealjs/plugin/search/search.js | 1163 - .../libs/revealjs/plugin/zoom/plugin.js | 287 - .../libs/revealjs/plugin/zoom/zoom.esm.js | 144 - .../libs/revealjs/plugin/zoom/zoom.js | 155 - .../grantmcdermott/clean/_extension.yml | 1 + .../grantmcdermott/clean/clean.scss | 18 +- 77 files changed, 11 insertions(+), 132418 deletions(-) delete mode 100644 docs/_extensions/grantmcdermott/clean/_extension.yml delete mode 100644 docs/_extensions/grantmcdermott/clean/clean.scss delete mode 100644 docs/index_files/libs/clipboard/clipboard.min.js delete mode 100644 docs/index_files/libs/quarto-contrib/videojs/video-js.css delete mode 100644 docs/index_files/libs/quarto-contrib/videojs/video.min.js delete mode 100644 docs/index_files/libs/quarto-html/light-border.css delete mode 100644 docs/index_files/libs/quarto-html/popper.min.js delete mode 100644 docs/index_files/libs/quarto-html/quarto-html.min.css delete mode 100644 docs/index_files/libs/quarto-html/quarto-syntax-highlighting.css delete mode 100644 docs/index_files/libs/quarto-html/tabby.min.js delete mode 100644 docs/index_files/libs/quarto-html/tippy.css delete mode 100644 docs/index_files/libs/quarto-html/tippy.umd.min.js delete mode 100644 docs/index_files/libs/revealjs/dist/reset.css delete mode 100644 docs/index_files/libs/revealjs/dist/reveal.css delete mode 100644 docs/index_files/libs/revealjs/dist/reveal.esm.js delete mode 100644 docs/index_files/libs/revealjs/dist/reveal.esm.js.map delete mode 100644 docs/index_files/libs/revealjs/dist/reveal.js delete mode 100644 docs/index_files/libs/revealjs/dist/reveal.js.map delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/league-gothic/LICENSE delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.css delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.eot delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.ttf delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.woff delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/LICENSE delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff delete mode 100644 docs/index_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro.css delete mode 100644 docs/index_files/libs/revealjs/dist/theme/quarto.css delete mode 100644 docs/index_files/libs/revealjs/plugin/highlight/highlight.esm.js delete mode 100644 docs/index_files/libs/revealjs/plugin/highlight/highlight.js delete mode 100644 docs/index_files/libs/revealjs/plugin/highlight/monokai.css delete mode 100644 docs/index_files/libs/revealjs/plugin/highlight/plugin.js delete mode 100644 docs/index_files/libs/revealjs/plugin/highlight/zenburn.css delete mode 100644 docs/index_files/libs/revealjs/plugin/markdown/markdown.esm.js delete mode 100644 docs/index_files/libs/revealjs/plugin/markdown/markdown.js delete mode 100644 docs/index_files/libs/revealjs/plugin/markdown/plugin.js delete mode 100644 docs/index_files/libs/revealjs/plugin/math/katex.js delete mode 100644 docs/index_files/libs/revealjs/plugin/math/math.esm.js delete mode 100644 docs/index_files/libs/revealjs/plugin/math/math.js delete mode 100644 docs/index_files/libs/revealjs/plugin/math/mathjax2.js delete mode 100644 docs/index_files/libs/revealjs/plugin/math/mathjax3.js delete mode 100644 docs/index_files/libs/revealjs/plugin/math/plugin.js delete mode 100644 docs/index_files/libs/revealjs/plugin/notes/notes.esm.js delete mode 100644 docs/index_files/libs/revealjs/plugin/notes/notes.js delete mode 100644 docs/index_files/libs/revealjs/plugin/notes/plugin.js delete mode 100644 docs/index_files/libs/revealjs/plugin/notes/speaker-view.html delete mode 100644 docs/index_files/libs/revealjs/plugin/pdf-export/pdfexport.js delete mode 100644 docs/index_files/libs/revealjs/plugin/pdf-export/plugin.yml delete mode 100644 docs/index_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css delete mode 100644 docs/index_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js delete mode 100644 docs/index_files/libs/revealjs/plugin/quarto-line-highlight/plugin.yml delete mode 100644 docs/index_files/libs/revealjs/plugin/quarto-support/footer.css delete mode 100644 docs/index_files/libs/revealjs/plugin/quarto-support/plugin.yml delete mode 100644 docs/index_files/libs/revealjs/plugin/quarto-support/support.js delete mode 100644 docs/index_files/libs/revealjs/plugin/reveal-menu/menu.css delete mode 100644 docs/index_files/libs/revealjs/plugin/reveal-menu/menu.js delete mode 100644 docs/index_files/libs/revealjs/plugin/reveal-menu/plugin.yml delete mode 100644 docs/index_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css delete mode 100644 docs/index_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js delete mode 100644 docs/index_files/libs/revealjs/plugin/search/plugin.js delete mode 100644 docs/index_files/libs/revealjs/plugin/search/search.esm.js delete mode 100644 docs/index_files/libs/revealjs/plugin/search/search.js delete mode 100644 docs/index_files/libs/revealjs/plugin/zoom/plugin.js delete mode 100644 docs/index_files/libs/revealjs/plugin/zoom/zoom.esm.js delete mode 100644 docs/index_files/libs/revealjs/plugin/zoom/zoom.js diff --git a/docs/_extensions/grantmcdermott/clean/_extension.yml b/docs/_extensions/grantmcdermott/clean/_extension.yml deleted file mode 100644 index 10b1e450..00000000 --- a/docs/_extensions/grantmcdermott/clean/_extension.yml +++ /dev/null @@ -1,13 +0,0 @@ -title: clean -author: Grant McDermott -version: 1.0.0 -quarto-required: ">=1.3.0" -contributes: - formats: - revealjs: - theme: [default, clean.scss] - menu: - side: left - slide-number: true - date-format: long - diff --git a/docs/_extensions/grantmcdermott/clean/clean.scss b/docs/_extensions/grantmcdermott/clean/clean.scss deleted file mode 100644 index 3382dc01..00000000 --- a/docs/_extensions/grantmcdermott/clean/clean.scss +++ /dev/null @@ -1,298 +0,0 @@ -/*-- scss:defaults --*/ - -// Custom colours and variables - -$jet: #131516; -$accent: #107895; -$accent2: #9a2515; -// $accent2: #e64173; -$right-arrow: "\2192"; // Unicode character for right arrow - -// fonts - -/* -Note: This theme uses the Roboto font family, which it imports from Google - Fonts to ensure consistent weighting in addition to availability. While - you can use a local installation of Roboto, this is generally not - recommended since the weighting will likely be wrong (probably too - light). OTOH, importing from Google Fonts can cause some issues in - certain secure environments due the external CDN (see: - https://github.com/grantmcdermott/quarto-revealjs-clean/issues/7). If - that's the case for you, simply comment out the `@import url(...)` line - below and it will default for the default Sans Serif font on your system - (e.g., Helvetica on a Mac). Circling back to the earlier point about - preserving consistent font weights, you may also wish to remove "Roboto" - from the choice set if the family is installed locally. -*/ -@import url('https://fonts.googleapis.com/css?family=Roboto:200,200i,300,300i,350,350i,400,400i&display=swap'); - -$font-family-sans-serif: "Roboto", sans-serif !default; -$presentation-heading-font: "Roboto", sans-serif !default; - -$presentation-heading-color: $jet !default; -$presentation-heading-font-weight: lighter; -//$presentation-heading-line-height: 2; -//$presentation-block-margin: 28px; -$presentation-font-size-root: 32px; - -// colors -//$body-bg: #f0f1eb !default; -$body-color: $jet !default; -$link-color: $accent !default; -$selection-bg: #26351c !default; - - -/*-- scss:rules --*/ - -.reveal a { - line-height: 1.5em; -} - -.reveal p { - // font-weight: 300; - font-weight: lighter; - margin-top: 1.25em; -} - -// title and headings - -#title-slide { - text-align: left; - - .title { - color: $body-color; - font-size: 1.4em; - // font-weight: 350; - font-weight: lighter; - } - - .subtitle { - color: $accent; - font-style: italic; - margin-top: 0em; - font-weight: lighter; - } - - .institute, - .quarto-title-affiliation, - .quarto-title-author-email { - font-style: italic; - // font-size: 80%; - // color: #7F7F7F; - } - - .author, - .quarto-title-author-name { - color: $body-color; - } - - .quarto-title-authors { - display: flex; - justify-content: left; - - .quarto-title-author { - padding-left: 0em; - padding-right: 0em; - width: 100%; - } - } - -} - - -.reveal h2 { - // font-weight: 350; - font-weight: lighter; - font-size: 1.4em; -} - -.reveal h3 { - color: $accent; - font-style: italic; - // font-weight: 350; - font-weight: lighter; - font-size: 0.95em; -} - -.reveal h4 { - color: $accent2; - // font-weight: 350; - font-weight: normal; - margin-top: 1.25em; -} - -// alerts etc. - -.alert { - color: $accent2; -} - -.fg { - color: var(--col, $jet); -} - -.bg { - background-color: var(--col, #fff); - padding: 0.1em; - border-radius: 5px; - display: inline-block; -} - -// lists - -// Unordered lists - -.reveal ul { - // font-weight: 300; - font-weight: lighter; - padding-left: 16px; - - li::marker { - color: mix($accent, white, 70%); - } -} - -.reveal ul ul { - list-style: none; - - li:before { - content: $right-arrow; - color: mix($accent, white, 60%); - display: inline-block; - width: 1em; - margin-left: -1em; - margin-right: 0.5em; - } -} - -// Ordered lists - -.reveal ol { - // font-weight: 300; - font-weight: lighter; - padding-left: 16px; - - li::marker { - color: $accent; - } -} - -// Move "hamburger" menu button to top right - -.reveal .slide-menu-button { - position: fixed; - top: 6px; - right: 0; - display: flex; - justify-content: flex-end; - align-items: flex-start; - pointer-events: none; -} - -.reveal .slide-menu-button > * { - pointer-events: auto; -} - - -// Same for chalkboard buttons (with an offset) - -.reveal .slide-chalkboard-buttons { - position: fixed; - top: 12px; - right: 24px; - display: flex; - justify-content: flex-end; - align-items: flex-start; - pointer-events: none; -} - -.reveal .slide-chalkboard-buttons > * { - pointer-events: auto; -} - -// Beamer-style button link environment - -.button { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: 400; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - background-color: $accent; - border: 1px solid $accent; - color: #fff !important; - text-decoration: none; - border-radius: 4px; - transition: all 0.2s ease-in-out; -} - -.button:hover { - background-color: #0056b3; - border-color: #0056b3; -} - -.button::before { - content: "▶"; - margin-right: 5px; -} - -// tables - -.reveal table { - // height: auto; /* Adjust table width to fit content up to the available slide space */ - margin: auto; - border-collapse: collapse; - border-spacing: 0; - font-size: 0.8em; -} - -.reveal table th, -.reveal table td { - border: none; /* Remove internal row lines */ - padding: .23em; /* Adjust padding as needed */ - text-align: left; /* Adjust text alignment as needed */ - font-weight: lighter; /* Lighter font weight for main table text */ -} - -/* Adds a bottom border to the table header row for distinction */ -.reveal table thead th, -.reveal .slides table tr:last-child td, -.reveal .slides table { - border-bottom: 2px solid #D3D3D3; /* Dark grey color for the bottom border */ -} - -/* Make column headers bold */ -.reveal table thead th { - font-weight: bold; -} - -/* Styling table captions */ -.reveal table caption { - color: #666666; /* Dark grey color for the caption */ - font-variant: small-caps; /* Use small caps for the caption text */ -} - -// Special catch for etable environment to ensure these table images -// don't overflow the slide. -// See: https://lrberge.github.io/fixest/articles/etable_new_features.html - -.etable { - width: 100%; - height: calc(100% - 3em); /* Adjust 3em based on the height of your header, if necessary */ - display: flex; - align-items: center; - justify-content: center; -} - -.etable img { - max-width: 100%; - max-height: 100%; - width: auto; - height: auto; - object-fit: contain; -} \ No newline at end of file diff --git a/docs/index_files/libs/clipboard/clipboard.min.js b/docs/index_files/libs/clipboard/clipboard.min.js deleted file mode 100644 index 9cde8058..00000000 --- a/docs/index_files/libs/clipboard/clipboard.min.js +++ /dev/null @@ -1,562 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!(function (t, e) { - "object" == typeof exports && "object" == typeof module - ? (module.exports = e()) - : "function" == typeof define && define.amd - ? define([], e) - : "object" == typeof exports - ? (exports.ClipboardJS = e()) - : (t.ClipboardJS = e()); -})(this, function () { - return ( - (n = { - 686: function (t, e, n) { - "use strict"; - n.d(e, { - default: function () { - return b; - }, - }); - var e = n(279), - i = n.n(e), - e = n(370), - u = n.n(e), - e = n(817), - r = n.n(e); - function c(t) { - try { - return document.execCommand(t); - } catch (t) { - return; - } - } - var a = function (t) { - t = r()(t); - return c("cut"), t; - }; - function o(t, e) { - var n, - o, - t = - ((n = t), - (o = "rtl" === document.documentElement.getAttribute("dir")), - ((t = document.createElement("textarea")).style.fontSize = - "12pt"), - (t.style.border = "0"), - (t.style.padding = "0"), - (t.style.margin = "0"), - (t.style.position = "absolute"), - (t.style[o ? "right" : "left"] = "-9999px"), - (o = window.pageYOffset || document.documentElement.scrollTop), - (t.style.top = "".concat(o, "px")), - t.setAttribute("readonly", ""), - (t.value = n), - t); - return ( - e.container.appendChild(t), (e = r()(t)), c("copy"), t.remove(), e - ); - } - var f = function (t) { - var e = - 1 < arguments.length && void 0 !== arguments[1] - ? arguments[1] - : { container: document.body }, - n = ""; - return ( - "string" == typeof t - ? (n = o(t, e)) - : t instanceof HTMLInputElement && - !["text", "search", "url", "tel", "password"].includes( - null == t ? void 0 : t.type, - ) - ? (n = o(t.value, e)) - : ((n = r()(t)), c("copy")), - n - ); - }; - function l(t) { - return (l = - "function" == typeof Symbol && "symbol" == typeof Symbol.iterator - ? function (t) { - return typeof t; - } - : function (t) { - return t && - "function" == typeof Symbol && - t.constructor === Symbol && - t !== Symbol.prototype - ? "symbol" - : typeof t; - })(t); - } - var s = function () { - var t = - 0 < arguments.length && void 0 !== arguments[0] - ? arguments[0] - : {}, - e = t.action, - n = void 0 === e ? "copy" : e, - o = t.container, - e = t.target, - t = t.text; - if ("copy" !== n && "cut" !== n) - throw new Error( - 'Invalid "action" value, use either "copy" or "cut"', - ); - if (void 0 !== e) { - if (!e || "object" !== l(e) || 1 !== e.nodeType) - throw new Error('Invalid "target" value, use a valid Element'); - if ("copy" === n && e.hasAttribute("disabled")) - throw new Error( - 'Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute', - ); - if ( - "cut" === n && - (e.hasAttribute("readonly") || e.hasAttribute("disabled")) - ) - throw new Error( - 'Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes', - ); - } - return t - ? f(t, { container: o }) - : e - ? "cut" === n - ? a(e) - : f(e, { container: o }) - : void 0; - }; - function p(t) { - return (p = - "function" == typeof Symbol && "symbol" == typeof Symbol.iterator - ? function (t) { - return typeof t; - } - : function (t) { - return t && - "function" == typeof Symbol && - t.constructor === Symbol && - t !== Symbol.prototype - ? "symbol" - : typeof t; - })(t); - } - function d(t, e) { - for (var n = 0; n < e.length; n++) { - var o = e[n]; - (o.enumerable = o.enumerable || !1), - (o.configurable = !0), - "value" in o && (o.writable = !0), - Object.defineProperty(t, o.key, o); - } - } - function y(t, e) { - return (y = - Object.setPrototypeOf || - function (t, e) { - return (t.__proto__ = e), t; - })(t, e); - } - function h(n) { - var o = (function () { - if ("undefined" == typeof Reflect || !Reflect.construct) return !1; - if (Reflect.construct.sham) return !1; - if ("function" == typeof Proxy) return !0; - try { - return ( - Date.prototype.toString.call( - Reflect.construct(Date, [], function () {}), - ), - !0 - ); - } catch (t) { - return !1; - } - })(); - return function () { - var t, - e = v(n); - return ( - (t = o - ? ((t = v(this).constructor), - Reflect.construct(e, arguments, t)) - : e.apply(this, arguments)), - (e = this), - !(t = t) || ("object" !== p(t) && "function" != typeof t) - ? (function (t) { - if (void 0 !== t) return t; - throw new ReferenceError( - "this hasn't been initialised - super() hasn't been called", - ); - })(e) - : t - ); - }; - } - function v(t) { - return (v = Object.setPrototypeOf - ? Object.getPrototypeOf - : function (t) { - return t.__proto__ || Object.getPrototypeOf(t); - })(t); - } - function m(t, e) { - t = "data-clipboard-".concat(t); - if (e.hasAttribute(t)) return e.getAttribute(t); - } - var b = (function () { - !(function (t, e) { - if ("function" != typeof e && null !== e) - throw new TypeError( - "Super expression must either be null or a function", - ); - (t.prototype = Object.create(e && e.prototype, { - constructor: { value: t, writable: !0, configurable: !0 }, - })), - e && y(t, e); - })(r, i()); - var t, - e, - n, - o = h(r); - function r(t, e) { - var n; - return ( - (function (t) { - if (!(t instanceof r)) - throw new TypeError("Cannot call a class as a function"); - })(this), - (n = o.call(this)).resolveOptions(e), - n.listenClick(t), - n - ); - } - return ( - (t = r), - (n = [ - { - key: "copy", - value: function (t) { - var e = - 1 < arguments.length && void 0 !== arguments[1] - ? arguments[1] - : { container: document.body }; - return f(t, e); - }, - }, - { - key: "cut", - value: function (t) { - return a(t); - }, - }, - { - key: "isSupported", - value: function () { - var t = - 0 < arguments.length && void 0 !== arguments[0] - ? arguments[0] - : ["copy", "cut"], - t = "string" == typeof t ? [t] : t, - e = !!document.queryCommandSupported; - return ( - t.forEach(function (t) { - e = e && !!document.queryCommandSupported(t); - }), - e - ); - }, - }, - ]), - (e = [ - { - key: "resolveOptions", - value: function () { - var t = - 0 < arguments.length && void 0 !== arguments[0] - ? arguments[0] - : {}; - (this.action = - "function" == typeof t.action - ? t.action - : this.defaultAction), - (this.target = - "function" == typeof t.target - ? t.target - : this.defaultTarget), - (this.text = - "function" == typeof t.text ? t.text : this.defaultText), - (this.container = - "object" === p(t.container) - ? t.container - : document.body); - }, - }, - { - key: "listenClick", - value: function (t) { - var e = this; - this.listener = u()(t, "click", function (t) { - return e.onClick(t); - }); - }, - }, - { - key: "onClick", - value: function (t) { - var e = t.delegateTarget || t.currentTarget, - n = this.action(e) || "copy", - t = s({ - action: n, - container: this.container, - target: this.target(e), - text: this.text(e), - }); - this.emit(t ? "success" : "error", { - action: n, - text: t, - trigger: e, - clearSelection: function () { - e && e.focus(), window.getSelection().removeAllRanges(); - }, - }); - }, - }, - { - key: "defaultAction", - value: function (t) { - return m("action", t); - }, - }, - { - key: "defaultTarget", - value: function (t) { - t = m("target", t); - if (t) return document.querySelector(t); - }, - }, - { - key: "defaultText", - value: function (t) { - return m("text", t); - }, - }, - { - key: "destroy", - value: function () { - this.listener.destroy(); - }, - }, - ]) && d(t.prototype, e), - n && d(t, n), - r - ); - })(); - }, - 828: function (t) { - var e; - "undefined" == typeof Element || - Element.prototype.matches || - ((e = Element.prototype).matches = - e.matchesSelector || - e.mozMatchesSelector || - e.msMatchesSelector || - e.oMatchesSelector || - e.webkitMatchesSelector), - (t.exports = function (t, e) { - for (; t && 9 !== t.nodeType; ) { - if ("function" == typeof t.matches && t.matches(e)) return t; - t = t.parentNode; - } - }); - }, - 438: function (t, e, n) { - var u = n(828); - function i(t, e, n, o, r) { - var i = function (e, n, t, o) { - return function (t) { - (t.delegateTarget = u(t.target, n)), - t.delegateTarget && o.call(e, t); - }; - }.apply(this, arguments); - return ( - t.addEventListener(n, i, r), - { - destroy: function () { - t.removeEventListener(n, i, r); - }, - } - ); - } - t.exports = function (t, e, n, o, r) { - return "function" == typeof t.addEventListener - ? i.apply(null, arguments) - : "function" == typeof n - ? i.bind(null, document).apply(null, arguments) - : ("string" == typeof t && (t = document.querySelectorAll(t)), - Array.prototype.map.call(t, function (t) { - return i(t, e, n, o, r); - })); - }; - }, - 879: function (t, n) { - (n.node = function (t) { - return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType; - }), - (n.nodeList = function (t) { - var e = Object.prototype.toString.call(t); - return ( - void 0 !== t && - ("[object NodeList]" === e || "[object HTMLCollection]" === e) && - "length" in t && - (0 === t.length || n.node(t[0])) - ); - }), - (n.string = function (t) { - return "string" == typeof t || t instanceof String; - }), - (n.fn = function (t) { - return "[object Function]" === Object.prototype.toString.call(t); - }); - }, - 370: function (t, e, n) { - var f = n(879), - l = n(438); - t.exports = function (t, e, n) { - if (!t && !e && !n) throw new Error("Missing required arguments"); - if (!f.string(e)) - throw new TypeError("Second argument must be a String"); - if (!f.fn(n)) - throw new TypeError("Third argument must be a Function"); - if (f.node(t)) - return ( - (c = e), - (a = n), - (u = t).addEventListener(c, a), - { - destroy: function () { - u.removeEventListener(c, a); - }, - } - ); - if (f.nodeList(t)) - return ( - (o = t), - (r = e), - (i = n), - Array.prototype.forEach.call(o, function (t) { - t.addEventListener(r, i); - }), - { - destroy: function () { - Array.prototype.forEach.call(o, function (t) { - t.removeEventListener(r, i); - }); - }, - } - ); - if (f.string(t)) - return (t = t), (e = e), (n = n), l(document.body, t, e, n); - throw new TypeError( - "First argument must be a String, HTMLElement, HTMLCollection, or NodeList", - ); - var o, r, i, u, c, a; - }; - }, - 817: function (t) { - t.exports = function (t) { - var e, - n = - "SELECT" === t.nodeName - ? (t.focus(), t.value) - : "INPUT" === t.nodeName || "TEXTAREA" === t.nodeName - ? ((e = t.hasAttribute("readonly")) || - t.setAttribute("readonly", ""), - t.select(), - t.setSelectionRange(0, t.value.length), - e || t.removeAttribute("readonly"), - t.value) - : (t.hasAttribute("contenteditable") && t.focus(), - (n = window.getSelection()), - (e = document.createRange()).selectNodeContents(t), - n.removeAllRanges(), - n.addRange(e), - n.toString()); - return n; - }; - }, - 279: function (t) { - function e() {} - (e.prototype = { - on: function (t, e, n) { - var o = this.e || (this.e = {}); - return (o[t] || (o[t] = [])).push({ fn: e, ctx: n }), this; - }, - once: function (t, e, n) { - var o = this; - function r() { - o.off(t, r), e.apply(n, arguments); - } - return (r._ = e), this.on(t, r, n); - }, - emit: function (t) { - for ( - var e = [].slice.call(arguments, 1), - n = ((this.e || (this.e = {}))[t] || []).slice(), - o = 0, - r = n.length; - o < r; - o++ - ) - n[o].fn.apply(n[o].ctx, e); - return this; - }, - off: function (t, e) { - var n = this.e || (this.e = {}), - o = n[t], - r = []; - if (o && e) - for (var i = 0, u = o.length; i < u; i++) - o[i].fn !== e && o[i].fn._ !== e && r.push(o[i]); - return r.length ? (n[t] = r) : delete n[t], this; - }, - }), - (t.exports = e), - (t.exports.TinyEmitter = e); - }, - }), - (r = {}), - (o.n = function (t) { - var e = - t && t.__esModule - ? function () { - return t.default; - } - : function () { - return t; - }; - return o.d(e, { a: e }), e; - }), - (o.d = function (t, e) { - for (var n in e) - o.o(e, n) && - !o.o(t, n) && - Object.defineProperty(t, n, { enumerable: !0, get: e[n] }); - }), - (o.o = function (t, e) { - return Object.prototype.hasOwnProperty.call(t, e); - }), - o(686).default - ); - function o(t) { - if (r[t]) return r[t].exports; - var e = (r[t] = { exports: {} }); - return n[t](e, e.exports, o), e.exports; - } - var n, r; -}); diff --git a/docs/index_files/libs/quarto-contrib/videojs/video-js.css b/docs/index_files/libs/quarto-contrib/videojs/video-js.css deleted file mode 100644 index f9a6f7fc..00000000 --- a/docs/index_files/libs/quarto-contrib/videojs/video-js.css +++ /dev/null @@ -1,1954 +0,0 @@ -@charset "UTF-8"; -.vjs-modal-dialog .vjs-modal-dialog-content, -.video-js .vjs-modal-dialog, -.vjs-button > .vjs-icon-placeholder:before, -.video-js .vjs-big-play-button .vjs-icon-placeholder:before { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.vjs-button > .vjs-icon-placeholder:before, -.video-js .vjs-big-play-button .vjs-icon-placeholder:before { - text-align: center; -} - -@font-face { - font-family: VideoJS; - src: url(data:application/font-woff;charset=utf-8;base64,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) - format("woff"); - font-weight: normal; - font-style: normal; -} -.vjs-icon-play, -.video-js .vjs-play-control .vjs-icon-placeholder, -.video-js .vjs-big-play-button .vjs-icon-placeholder:before { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-play:before, -.video-js .vjs-play-control .vjs-icon-placeholder:before, -.video-js .vjs-big-play-button .vjs-icon-placeholder:before { - content: "\f101"; -} - -.vjs-icon-play-circle { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-play-circle:before { - content: "\f102"; -} - -.vjs-icon-pause, -.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-pause:before, -.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before { - content: "\f103"; -} - -.vjs-icon-volume-mute, -.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-volume-mute:before, -.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before { - content: "\f104"; -} - -.vjs-icon-volume-low, -.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-volume-low:before, -.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before { - content: "\f105"; -} - -.vjs-icon-volume-mid, -.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-volume-mid:before, -.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before { - content: "\f106"; -} - -.vjs-icon-volume-high, -.video-js .vjs-mute-control .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-volume-high:before, -.video-js .vjs-mute-control .vjs-icon-placeholder:before { - content: "\f107"; -} - -.vjs-icon-fullscreen-enter, -.video-js .vjs-fullscreen-control .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-fullscreen-enter:before, -.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before { - content: "\f108"; -} - -.vjs-icon-fullscreen-exit, -.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-fullscreen-exit:before, -.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before { - content: "\f109"; -} - -.vjs-icon-square { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-square:before { - content: "\f10a"; -} - -.vjs-icon-spinner { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-spinner:before { - content: "\f10b"; -} - -.vjs-icon-subtitles, -.video-js .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js .vjs-subtitles-button .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-subtitles:before, -.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before, -.video-js.video-js:lang(en-GB) - .vjs-subs-caps-button - .vjs-icon-placeholder:before, -.video-js.video-js:lang(en-IE) - .vjs-subs-caps-button - .vjs-icon-placeholder:before, -.video-js.video-js:lang(en-AU) - .vjs-subs-caps-button - .vjs-icon-placeholder:before, -.video-js.video-js:lang(en-NZ) - .vjs-subs-caps-button - .vjs-icon-placeholder:before, -.video-js .vjs-subtitles-button .vjs-icon-placeholder:before { - content: "\f10c"; -} - -.vjs-icon-captions, -.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder, -.video-js .vjs-captions-button .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-captions:before, -.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before, -.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before, -.video-js .vjs-captions-button .vjs-icon-placeholder:before { - content: "\f10d"; -} - -.vjs-icon-chapters, -.video-js .vjs-chapters-button .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-chapters:before, -.video-js .vjs-chapters-button .vjs-icon-placeholder:before { - content: "\f10e"; -} - -.vjs-icon-share { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-share:before { - content: "\f10f"; -} - -.vjs-icon-cog { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-cog:before { - content: "\f110"; -} - -.vjs-icon-circle, -.vjs-seek-to-live-control .vjs-icon-placeholder, -.video-js .vjs-volume-level, -.video-js .vjs-play-progress { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-circle:before, -.vjs-seek-to-live-control .vjs-icon-placeholder:before, -.video-js .vjs-volume-level:before, -.video-js .vjs-play-progress:before { - content: "\f111"; -} - -.vjs-icon-circle-outline { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-circle-outline:before { - content: "\f112"; -} - -.vjs-icon-circle-inner-circle { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-circle-inner-circle:before { - content: "\f113"; -} - -.vjs-icon-hd { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-hd:before { - content: "\f114"; -} - -.vjs-icon-cancel, -.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-cancel:before, -.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before { - content: "\f115"; -} - -.vjs-icon-replay, -.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-replay:before, -.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before { - content: "\f116"; -} - -.vjs-icon-facebook { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-facebook:before { - content: "\f117"; -} - -.vjs-icon-gplus { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-gplus:before { - content: "\f118"; -} - -.vjs-icon-linkedin { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-linkedin:before { - content: "\f119"; -} - -.vjs-icon-twitter { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-twitter:before { - content: "\f11a"; -} - -.vjs-icon-tumblr { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-tumblr:before { - content: "\f11b"; -} - -.vjs-icon-pinterest { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-pinterest:before { - content: "\f11c"; -} - -.vjs-icon-audio-description, -.video-js .vjs-descriptions-button .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-audio-description:before, -.video-js .vjs-descriptions-button .vjs-icon-placeholder:before { - content: "\f11d"; -} - -.vjs-icon-audio, -.video-js .vjs-audio-button .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-audio:before, -.video-js .vjs-audio-button .vjs-icon-placeholder:before { - content: "\f11e"; -} - -.vjs-icon-next-item { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-next-item:before { - content: "\f11f"; -} - -.vjs-icon-previous-item { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-previous-item:before { - content: "\f120"; -} - -.vjs-icon-picture-in-picture-enter, -.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-picture-in-picture-enter:before, -.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before { - content: "\f121"; -} - -.vjs-icon-picture-in-picture-exit, -.video-js.vjs-picture-in-picture - .vjs-picture-in-picture-control - .vjs-icon-placeholder { - font-family: VideoJS; - font-weight: normal; - font-style: normal; -} -.vjs-icon-picture-in-picture-exit:before, -.video-js.vjs-picture-in-picture - .vjs-picture-in-picture-control - .vjs-icon-placeholder:before { - content: "\f122"; -} - -.video-js { - display: block; - vertical-align: top; - box-sizing: border-box; - color: #fff; - background-color: #000; - position: relative; - padding: 0; - font-size: 10px; - line-height: 1; - font-weight: normal; - font-style: normal; - font-family: Arial, Helvetica, sans-serif; - word-break: initial; -} -.video-js:-moz-full-screen { - position: absolute; -} -.video-js:-webkit-full-screen { - width: 100% !important; - height: 100% !important; -} - -.video-js[tabindex="-1"] { - outline: none; -} - -.video-js *, -.video-js *:before, -.video-js *:after { - box-sizing: inherit; -} - -.video-js ul { - font-family: inherit; - font-size: inherit; - line-height: inherit; - list-style-position: outside; - margin-left: 0; - margin-right: 0; - margin-top: 0; - margin-bottom: 0; -} - -.video-js.vjs-fluid, -.video-js.vjs-16-9, -.video-js.vjs-4-3, -.video-js.vjs-9-16, -.video-js.vjs-1-1 { - width: 100%; - max-width: 100%; -} - -.video-js.vjs-fluid:not(.vjs-audio-only-mode), -.video-js.vjs-16-9:not(.vjs-audio-only-mode), -.video-js.vjs-4-3:not(.vjs-audio-only-mode), -.video-js.vjs-9-16:not(.vjs-audio-only-mode), -.video-js.vjs-1-1:not(.vjs-audio-only-mode) { - height: 0; -} - -.video-js.vjs-16-9:not(.vjs-audio-only-mode) { - padding-top: 56.25%; -} - -.video-js.vjs-4-3:not(.vjs-audio-only-mode) { - padding-top: 75%; -} - -.video-js.vjs-9-16:not(.vjs-audio-only-mode) { - padding-top: 177.7777777778%; -} - -.video-js.vjs-1-1:not(.vjs-audio-only-mode) { - padding-top: 100%; -} - -.video-js.vjs-fill:not(.vjs-audio-only-mode) { - width: 100%; - height: 100%; -} - -.video-js .vjs-tech { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.video-js.vjs-audio-only-mode .vjs-tech { - display: none; -} - -body.vjs-full-window { - padding: 0; - margin: 0; - height: 100%; -} - -.vjs-full-window .video-js.vjs-fullscreen { - position: fixed; - overflow: hidden; - z-index: 1000; - left: 0; - top: 0; - bottom: 0; - right: 0; -} - -.video-js.vjs-fullscreen:not(.vjs-ios-native-fs) { - width: 100% !important; - height: 100% !important; - padding-top: 0 !important; -} - -.video-js.vjs-fullscreen.vjs-user-inactive { - cursor: none; -} - -.vjs-hidden { - display: none !important; -} - -.vjs-disabled { - opacity: 0.5; - cursor: default; -} - -.video-js .vjs-offscreen { - height: 1px; - left: -9999px; - position: absolute; - top: 0; - width: 1px; -} - -.vjs-lock-showing { - display: block !important; - opacity: 1 !important; - visibility: visible !important; -} - -.vjs-no-js { - padding: 20px; - color: #fff; - background-color: #000; - font-size: 18px; - font-family: Arial, Helvetica, sans-serif; - text-align: center; - width: 300px; - height: 150px; - margin: 0px auto; -} - -.vjs-no-js a, -.vjs-no-js a:visited { - color: #66a8cc; -} - -.video-js .vjs-big-play-button { - font-size: 3em; - line-height: 1.5em; - height: 1.63332em; - width: 3em; - display: block; - position: absolute; - top: 10px; - left: 10px; - padding: 0; - cursor: pointer; - opacity: 1; - border: 0.06666em solid #fff; - background-color: #2b333f; - background-color: rgba(43, 51, 63, 0.7); - border-radius: 0.3em; - transition: all 0.4s; -} -.vjs-big-play-centered .vjs-big-play-button { - top: 50%; - left: 50%; - margin-top: -0.81666em; - margin-left: -1.5em; -} - -.video-js:hover .vjs-big-play-button, -.video-js .vjs-big-play-button:focus { - border-color: #fff; - background-color: #73859f; - background-color: rgba(115, 133, 159, 0.5); - transition: all 0s; -} - -.vjs-controls-disabled .vjs-big-play-button, -.vjs-has-started .vjs-big-play-button, -.vjs-using-native-controls .vjs-big-play-button, -.vjs-error .vjs-big-play-button { - display: none; -} - -.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause - .vjs-big-play-button { - display: block; -} - -.video-js button { - background: none; - border: none; - color: inherit; - display: inline-block; - font-size: inherit; - line-height: inherit; - text-transform: none; - text-decoration: none; - transition: none; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.vjs-control .vjs-button { - width: 100%; - height: 100%; -} - -.video-js .vjs-control.vjs-close-button { - cursor: pointer; - height: 3em; - position: absolute; - right: 0; - top: 0.5em; - z-index: 2; -} -.video-js .vjs-modal-dialog { - background: rgba(0, 0, 0, 0.8); - background: linear-gradient( - 180deg, - rgba(0, 0, 0, 0.8), - rgba(255, 255, 255, 0) - ); - overflow: auto; -} - -.video-js .vjs-modal-dialog > * { - box-sizing: border-box; -} - -.vjs-modal-dialog .vjs-modal-dialog-content { - font-size: 1.2em; - line-height: 1.5; - padding: 20px 24px; - z-index: 1; -} - -.vjs-menu-button { - cursor: pointer; -} - -.vjs-menu-button.vjs-disabled { - cursor: default; -} - -.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu { - display: none; -} - -.vjs-menu .vjs-menu-content { - display: block; - padding: 0; - margin: 0; - font-family: Arial, Helvetica, sans-serif; - overflow: auto; -} - -.vjs-menu .vjs-menu-content > * { - box-sizing: border-box; -} - -.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu { - display: none; -} - -.vjs-menu li { - list-style: none; - margin: 0; - padding: 0.2em 0; - line-height: 1.4em; - font-size: 1.2em; - text-align: center; - text-transform: lowercase; -} - -.vjs-menu li.vjs-menu-item:focus, -.vjs-menu li.vjs-menu-item:hover, -.js-focus-visible .vjs-menu li.vjs-menu-item:hover { - background-color: #73859f; - background-color: rgba(115, 133, 159, 0.5); -} - -.vjs-menu li.vjs-selected, -.vjs-menu li.vjs-selected:focus, -.vjs-menu li.vjs-selected:hover, -.js-focus-visible .vjs-menu li.vjs-selected:hover { - background-color: #fff; - color: #2b333f; -} - -.video-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible), -.js-focus-visible .vjs-menu *:not(.vjs-selected):focus:not(.focus-visible) { - background: none; -} - -.vjs-menu li.vjs-menu-title { - text-align: center; - text-transform: uppercase; - font-size: 1em; - line-height: 2em; - padding: 0; - margin: 0 0 0.3em 0; - font-weight: bold; - cursor: default; -} - -.vjs-menu-button-popup .vjs-menu { - display: none; - position: absolute; - bottom: 0; - width: 10em; - left: -3em; - height: 0em; - margin-bottom: 1.5em; - border-top-color: rgba(43, 51, 63, 0.7); -} - -.vjs-menu-button-popup .vjs-menu .vjs-menu-content { - background-color: #2b333f; - background-color: rgba(43, 51, 63, 0.7); - position: absolute; - width: 100%; - bottom: 1.5em; - max-height: 15em; -} - -.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content, -.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content { - max-height: 5em; -} - -.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content { - max-height: 10em; -} - -.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content { - max-height: 14em; -} - -.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, -.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, -.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content { - max-height: 25em; -} - -.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu, -.vjs-menu-button-popup .vjs-menu.vjs-lock-showing { - display: block; -} - -.video-js .vjs-menu-button-inline { - transition: all 0.4s; - overflow: hidden; -} - -.video-js .vjs-menu-button-inline:before { - width: 2.222222222em; -} - -.video-js .vjs-menu-button-inline:hover, -.video-js .vjs-menu-button-inline:focus, -.video-js .vjs-menu-button-inline.vjs-slider-active, -.video-js.vjs-no-flex .vjs-menu-button-inline { - width: 12em; -} - -.vjs-menu-button-inline .vjs-menu { - opacity: 0; - height: 100%; - width: auto; - position: absolute; - left: 4em; - top: 0; - padding: 0; - margin: 0; - transition: all 0.4s; -} - -.vjs-menu-button-inline:hover .vjs-menu, -.vjs-menu-button-inline:focus .vjs-menu, -.vjs-menu-button-inline.vjs-slider-active .vjs-menu { - display: block; - opacity: 1; -} - -.vjs-no-flex .vjs-menu-button-inline .vjs-menu { - display: block; - opacity: 1; - position: relative; - width: auto; -} - -.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu, -.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu, -.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu { - width: auto; -} - -.vjs-menu-button-inline .vjs-menu-content { - width: auto; - height: 100%; - margin: 0; - overflow: hidden; -} - -.video-js .vjs-control-bar { - display: none; - width: 100%; - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 3em; - background-color: #2b333f; - background-color: rgba(43, 51, 63, 0.7); -} - -.vjs-has-started .vjs-control-bar, -.vjs-audio-only-mode .vjs-control-bar { - display: flex; - visibility: visible; - opacity: 1; - transition: - visibility 0.1s, - opacity 0.1s; -} - -.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { - visibility: visible; - opacity: 0; - pointer-events: none; - transition: - visibility 1s, - opacity 1s; -} - -.vjs-controls-disabled .vjs-control-bar, -.vjs-using-native-controls .vjs-control-bar, -.vjs-error .vjs-control-bar { - display: none !important; -} - -.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar, -.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing - .vjs-control-bar { - opacity: 1; - visibility: visible; - pointer-events: auto; -} - -.vjs-has-started.vjs-no-flex .vjs-control-bar { - display: table; -} - -.video-js .vjs-control { - position: relative; - text-align: center; - margin: 0; - padding: 0; - height: 100%; - width: 4em; - flex: none; -} - -.video-js .vjs-control.vjs-visible-text { - width: auto; - padding-left: 1em; - padding-right: 1em; -} - -.vjs-button > .vjs-icon-placeholder:before { - font-size: 1.8em; - line-height: 1.67; -} - -.vjs-button > .vjs-icon-placeholder { - display: block; -} - -.video-js .vjs-control:focus:before, -.video-js .vjs-control:hover:before, -.video-js .vjs-control:focus { - text-shadow: 0em 0em 1em white; -} - -.video-js *:not(.vjs-visible-text) > .vjs-control-text { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -.vjs-no-flex .vjs-control { - display: table-cell; - vertical-align: middle; -} - -.video-js .vjs-custom-control-spacer { - display: none; -} - -.video-js .vjs-progress-control { - cursor: pointer; - flex: auto; - display: flex; - align-items: center; - min-width: 4em; - touch-action: none; -} - -.video-js .vjs-progress-control.disabled { - cursor: default; -} - -.vjs-live .vjs-progress-control { - display: none; -} - -.vjs-liveui .vjs-progress-control { - display: flex; - align-items: center; -} - -.vjs-no-flex .vjs-progress-control { - width: auto; -} - -.video-js .vjs-progress-holder { - flex: auto; - transition: all 0.2s; - height: 0.3em; -} - -.video-js .vjs-progress-control .vjs-progress-holder { - margin: 0 10px; -} - -.video-js .vjs-progress-control:hover .vjs-progress-holder { - font-size: 1.6666666667em; -} - -.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled { - font-size: 1em; -} - -.video-js .vjs-progress-holder .vjs-play-progress, -.video-js .vjs-progress-holder .vjs-load-progress, -.video-js .vjs-progress-holder .vjs-load-progress div { - position: absolute; - display: block; - height: 100%; - margin: 0; - padding: 0; - width: 0; -} - -.video-js .vjs-play-progress { - background-color: #fff; -} -.video-js .vjs-play-progress:before { - font-size: 0.9em; - position: absolute; - right: -0.5em; - top: -0.3333333333em; - z-index: 1; -} - -.video-js .vjs-load-progress { - background: rgba(115, 133, 159, 0.5); -} - -.video-js .vjs-load-progress div { - background: rgba(115, 133, 159, 0.75); -} - -.video-js .vjs-time-tooltip { - background-color: #fff; - background-color: rgba(255, 255, 255, 0.8); - border-radius: 0.3em; - color: #000; - float: right; - font-family: Arial, Helvetica, sans-serif; - font-size: 1em; - padding: 6px 8px 8px 8px; - pointer-events: none; - position: absolute; - top: -3.4em; - visibility: hidden; - z-index: 1; -} - -.video-js .vjs-progress-holder:focus .vjs-time-tooltip { - display: none; -} - -.video-js .vjs-progress-control:hover .vjs-time-tooltip, -.video-js - .vjs-progress-control:hover - .vjs-progress-holder:focus - .vjs-time-tooltip { - display: block; - font-size: 0.6em; - visibility: visible; -} - -.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip { - font-size: 1em; -} - -.video-js .vjs-progress-control .vjs-mouse-display { - display: none; - position: absolute; - width: 1px; - height: 100%; - background-color: #000; - z-index: 1; -} - -.vjs-no-flex .vjs-progress-control .vjs-mouse-display { - z-index: 0; -} - -.video-js .vjs-progress-control:hover .vjs-mouse-display { - display: block; -} - -.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display { - visibility: hidden; - opacity: 0; - transition: - visibility 1s, - opacity 1s; -} - -.video-js.vjs-user-inactive.vjs-no-flex - .vjs-progress-control - .vjs-mouse-display { - display: none; -} - -.vjs-mouse-display .vjs-time-tooltip { - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.8); -} - -.video-js .vjs-slider { - position: relative; - cursor: pointer; - padding: 0; - margin: 0 0.45em 0 0.45em; - /* iOS Safari */ - -webkit-touch-callout: none; - /* Safari */ - -webkit-user-select: none; - /* Konqueror HTML */ - /* Firefox */ - -moz-user-select: none; - /* Internet Explorer/Edge */ - -ms-user-select: none; - /* Non-prefixed version, currently supported by Chrome and Opera */ - user-select: none; - background-color: #73859f; - background-color: rgba(115, 133, 159, 0.5); -} - -.video-js .vjs-slider.disabled { - cursor: default; -} - -.video-js .vjs-slider:focus { - text-shadow: 0em 0em 1em white; - box-shadow: 0 0 1em #fff; -} - -.video-js .vjs-mute-control { - cursor: pointer; - flex: none; -} -.video-js .vjs-volume-control { - cursor: pointer; - margin-right: 1em; - display: flex; -} - -.video-js .vjs-volume-control.vjs-volume-horizontal { - width: 5em; -} - -.video-js .vjs-volume-panel .vjs-volume-control { - visibility: visible; - opacity: 0; - width: 1px; - height: 1px; - margin-left: -1px; -} - -.video-js .vjs-volume-panel { - transition: width 1s; -} -.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control, -.video-js .vjs-volume-panel:active .vjs-volume-control, -.video-js .vjs-volume-panel:focus .vjs-volume-control, -.video-js .vjs-volume-panel .vjs-volume-control:active, -.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control, -.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active { - visibility: visible; - opacity: 1; - position: relative; - transition: - visibility 0.1s, - opacity 0.1s, - height 0.1s, - width 0.1s, - left 0s, - top 0s; -} -.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal, -.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal, -.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal, -.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal, -.video-js - .vjs-volume-panel.vjs-hover - .vjs-mute-control - ~ .vjs-volume-control.vjs-volume-horizontal, -.video-js - .vjs-volume-panel - .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal { - width: 5em; - height: 3em; - margin-right: 0; -} -.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical, -.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical, -.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical, -.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical, -.video-js - .vjs-volume-panel.vjs-hover - .vjs-mute-control - ~ .vjs-volume-control.vjs-volume-vertical, -.video-js - .vjs-volume-panel - .vjs-volume-control.vjs-slider-active.vjs-volume-vertical { - left: -3.5em; - transition: left 0s; -} -.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, -.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active, -.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active { - width: 10em; - transition: width 0.1s; -} -.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only { - width: 4em; -} - -.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { - height: 8em; - width: 3em; - left: -3000em; - transition: - visibility 1s, - opacity 1s, - height 1s 1s, - width 1s 1s, - left 1s 1s, - top 1s 1s; -} - -.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { - transition: - visibility 1s, - opacity 1s, - height 1s 1s, - width 1s, - left 1s 1s, - top 1s 1s; -} - -.video-js.vjs-no-flex - .vjs-volume-panel - .vjs-volume-control.vjs-volume-horizontal { - width: 5em; - height: 3em; - visibility: visible; - opacity: 1; - position: relative; - transition: none; -} - -.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical, -.video-js.vjs-no-flex - .vjs-volume-panel - .vjs-volume-control.vjs-volume-vertical { - position: absolute; - bottom: 3em; - left: 0.5em; -} - -.video-js .vjs-volume-panel { - display: flex; -} - -.video-js .vjs-volume-bar { - margin: 1.35em 0.45em; -} - -.vjs-volume-bar.vjs-slider-horizontal { - width: 5em; - height: 0.3em; -} - -.vjs-volume-bar.vjs-slider-vertical { - width: 0.3em; - height: 5em; - margin: 1.35em auto; -} - -.video-js .vjs-volume-level { - position: absolute; - bottom: 0; - left: 0; - background-color: #fff; -} -.video-js .vjs-volume-level:before { - position: absolute; - font-size: 0.9em; - z-index: 1; -} - -.vjs-slider-vertical .vjs-volume-level { - width: 0.3em; -} -.vjs-slider-vertical .vjs-volume-level:before { - top: -0.5em; - left: -0.3em; - z-index: 1; -} - -.vjs-slider-horizontal .vjs-volume-level { - height: 0.3em; -} -.vjs-slider-horizontal .vjs-volume-level:before { - top: -0.3em; - right: -0.5em; -} - -.video-js .vjs-volume-panel.vjs-volume-panel-vertical { - width: 4em; -} - -.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { - height: 100%; -} - -.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { - width: 100%; -} - -.video-js .vjs-volume-vertical { - width: 3em; - height: 8em; - bottom: 8em; - background-color: #2b333f; - background-color: rgba(43, 51, 63, 0.7); -} - -.video-js .vjs-volume-horizontal .vjs-menu { - left: -2em; -} - -.video-js .vjs-volume-tooltip { - background-color: #fff; - background-color: rgba(255, 255, 255, 0.8); - border-radius: 0.3em; - color: #000; - float: right; - font-family: Arial, Helvetica, sans-serif; - font-size: 1em; - padding: 6px 8px 8px 8px; - pointer-events: none; - position: absolute; - top: -3.4em; - visibility: hidden; - z-index: 1; -} - -.video-js .vjs-volume-control:hover .vjs-volume-tooltip, -.video-js - .vjs-volume-control:hover - .vjs-progress-holder:focus - .vjs-volume-tooltip { - display: block; - font-size: 1em; - visibility: visible; -} - -.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip, -.video-js - .vjs-volume-vertical:hover - .vjs-progress-holder:focus - .vjs-volume-tooltip { - left: 1em; - top: -12px; -} - -.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip { - font-size: 1em; -} - -.video-js .vjs-volume-control .vjs-mouse-display { - display: none; - position: absolute; - width: 100%; - height: 1px; - background-color: #000; - z-index: 1; -} - -.video-js .vjs-volume-horizontal .vjs-mouse-display { - width: 1px; - height: 100%; -} - -.vjs-no-flex .vjs-volume-control .vjs-mouse-display { - z-index: 0; -} - -.video-js .vjs-volume-control:hover .vjs-mouse-display { - display: block; -} - -.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display { - visibility: hidden; - opacity: 0; - transition: - visibility 1s, - opacity 1s; -} - -.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display { - display: none; -} - -.vjs-mouse-display .vjs-volume-tooltip { - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.8); -} - -.vjs-poster { - display: inline-block; - vertical-align: middle; - background-repeat: no-repeat; - background-position: 50% 50%; - background-size: contain; - background-color: #000000; - cursor: pointer; - margin: 0; - padding: 0; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - height: 100%; -} - -.vjs-has-started .vjs-poster, -.vjs-using-native-controls .vjs-poster { - display: none; -} - -.vjs-audio.vjs-has-started .vjs-poster, -.vjs-has-started.vjs-audio-poster-mode .vjs-poster { - display: block; -} - -.video-js .vjs-live-control { - display: flex; - align-items: flex-start; - flex: auto; - font-size: 1em; - line-height: 3em; -} - -.vjs-no-flex .vjs-live-control { - display: table-cell; - width: auto; - text-align: left; -} - -.video-js:not(.vjs-live) .vjs-live-control, -.video-js.vjs-liveui .vjs-live-control { - display: none; -} - -.video-js .vjs-seek-to-live-control { - align-items: center; - cursor: pointer; - flex: none; - display: inline-flex; - height: 100%; - padding-left: 0.5em; - padding-right: 0.5em; - font-size: 1em; - line-height: 3em; - width: auto; - min-width: 4em; -} - -.vjs-no-flex .vjs-seek-to-live-control { - display: table-cell; - width: auto; - text-align: left; -} - -.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control, -.video-js:not(.vjs-live) .vjs-seek-to-live-control { - display: none; -} - -.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge { - cursor: auto; -} - -.vjs-seek-to-live-control .vjs-icon-placeholder { - margin-right: 0.5em; - color: #888; -} - -.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder { - color: red; -} - -.video-js .vjs-time-control { - flex: none; - font-size: 1em; - line-height: 3em; - min-width: 2em; - width: auto; - padding-left: 1em; - padding-right: 1em; -} - -.vjs-live .vjs-time-control { - display: none; -} - -.video-js .vjs-current-time, -.vjs-no-flex .vjs-current-time { - display: none; -} - -.video-js .vjs-duration, -.vjs-no-flex .vjs-duration { - display: none; -} - -.vjs-time-divider { - display: none; - line-height: 3em; -} - -.vjs-live .vjs-time-divider { - display: none; -} - -.video-js .vjs-play-control { - cursor: pointer; -} - -.video-js .vjs-play-control .vjs-icon-placeholder { - flex: none; -} - -.vjs-text-track-display { - position: absolute; - bottom: 3em; - left: 0; - right: 0; - top: 0; - pointer-events: none; -} - -.video-js.vjs-controls-disabled .vjs-text-track-display, -.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display { - bottom: 1em; -} - -.video-js .vjs-text-track { - font-size: 1.4em; - text-align: center; - margin-bottom: 0.1em; -} - -.vjs-subtitles { - color: #fff; -} - -.vjs-captions { - color: #fc6; -} - -.vjs-tt-cue { - display: block; -} - -video::-webkit-media-text-track-display { - transform: translateY(-3em); -} - -.video-js.vjs-controls-disabled video::-webkit-media-text-track-display, -.video-js.vjs-user-inactive.vjs-playing - video::-webkit-media-text-track-display { - transform: translateY(-1.5em); -} - -.video-js .vjs-picture-in-picture-control { - cursor: pointer; - flex: none; -} -.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control { - display: none; -} - -.video-js .vjs-fullscreen-control { - cursor: pointer; - flex: none; -} -.video-js.vjs-audio-only-mode .vjs-fullscreen-control { - display: none; -} - -.vjs-playback-rate > .vjs-menu-button, -.vjs-playback-rate .vjs-playback-rate-value { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.vjs-playback-rate .vjs-playback-rate-value { - pointer-events: none; - font-size: 1.5em; - line-height: 2; - text-align: center; -} - -.vjs-playback-rate .vjs-menu { - width: 4em; - left: 0em; -} - -.vjs-error .vjs-error-display .vjs-modal-dialog-content { - font-size: 1.4em; - text-align: center; -} - -.vjs-error .vjs-error-display:before { - color: #fff; - content: "X"; - font-family: Arial, Helvetica, sans-serif; - font-size: 4em; - left: 0; - line-height: 1; - margin-top: -0.5em; - position: absolute; - text-shadow: 0.05em 0.05em 0.1em #000; - text-align: center; - top: 50%; - vertical-align: middle; - width: 100%; -} - -.vjs-loading-spinner { - display: none; - position: absolute; - top: 50%; - left: 50%; - margin: -25px 0 0 -25px; - opacity: 0.85; - text-align: left; - border: 6px solid rgba(43, 51, 63, 0.7); - box-sizing: border-box; - background-clip: padding-box; - width: 50px; - height: 50px; - border-radius: 25px; - visibility: hidden; -} - -.vjs-seeking .vjs-loading-spinner, -.vjs-waiting .vjs-loading-spinner { - display: block; - -webkit-animation: vjs-spinner-show 0s linear 0.3s forwards; - animation: vjs-spinner-show 0s linear 0.3s forwards; -} - -.vjs-loading-spinner:before, -.vjs-loading-spinner:after { - content: ""; - position: absolute; - margin: -6px; - box-sizing: inherit; - width: inherit; - height: inherit; - border-radius: inherit; - opacity: 1; - border: inherit; - border-color: transparent; - border-top-color: white; -} - -.vjs-seeking .vjs-loading-spinner:before, -.vjs-seeking .vjs-loading-spinner:after, -.vjs-waiting .vjs-loading-spinner:before, -.vjs-waiting .vjs-loading-spinner:after { - -webkit-animation: - vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, - vjs-spinner-fade 1.1s linear infinite; - animation: - vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, - vjs-spinner-fade 1.1s linear infinite; -} - -.vjs-seeking .vjs-loading-spinner:before, -.vjs-waiting .vjs-loading-spinner:before { - border-top-color: white; -} - -.vjs-seeking .vjs-loading-spinner:after, -.vjs-waiting .vjs-loading-spinner:after { - border-top-color: white; - -webkit-animation-delay: 0.44s; - animation-delay: 0.44s; -} - -@keyframes vjs-spinner-show { - to { - visibility: visible; - } -} -@-webkit-keyframes vjs-spinner-show { - to { - visibility: visible; - } -} -@keyframes vjs-spinner-spin { - 100% { - transform: rotate(360deg); - } -} -@-webkit-keyframes vjs-spinner-spin { - 100% { - -webkit-transform: rotate(360deg); - } -} -@keyframes vjs-spinner-fade { - 0% { - border-top-color: #73859f; - } - 20% { - border-top-color: #73859f; - } - 35% { - border-top-color: white; - } - 60% { - border-top-color: #73859f; - } - 100% { - border-top-color: #73859f; - } -} -@-webkit-keyframes vjs-spinner-fade { - 0% { - border-top-color: #73859f; - } - 20% { - border-top-color: #73859f; - } - 35% { - border-top-color: white; - } - 60% { - border-top-color: #73859f; - } - 100% { - border-top-color: #73859f; - } -} -.video-js.vjs-audio-only-mode .vjs-captions-button { - display: none; -} - -.vjs-chapters-button .vjs-menu ul { - width: 24em; -} - -.video-js.vjs-audio-only-mode .vjs-descriptions-button { - display: none; -} - -.video-js - .vjs-subs-caps-button - + .vjs-menu - .vjs-captions-menu-item - .vjs-menu-item-text - .vjs-icon-placeholder { - vertical-align: middle; - display: inline-block; - margin-bottom: -0.1em; -} - -.video-js - .vjs-subs-caps-button - + .vjs-menu - .vjs-captions-menu-item - .vjs-menu-item-text - .vjs-icon-placeholder:before { - font-family: VideoJS; - content: ""; - font-size: 1.5em; - line-height: inherit; -} - -.video-js.vjs-audio-only-mode .vjs-subs-caps-button { - display: none; -} - -.video-js - .vjs-audio-button - + .vjs-menu - .vjs-main-desc-menu-item - .vjs-menu-item-text - .vjs-icon-placeholder { - vertical-align: middle; - display: inline-block; - margin-bottom: -0.1em; -} - -.video-js - .vjs-audio-button - + .vjs-menu - .vjs-main-desc-menu-item - .vjs-menu-item-text - .vjs-icon-placeholder:before { - font-family: VideoJS; - content: " "; - font-size: 1.5em; - line-height: inherit; -} - -.video-js.vjs-layout-small .vjs-current-time, -.video-js.vjs-layout-small .vjs-time-divider, -.video-js.vjs-layout-small .vjs-duration, -.video-js.vjs-layout-small .vjs-remaining-time, -.video-js.vjs-layout-small .vjs-playback-rate, -.video-js.vjs-layout-small .vjs-volume-control, -.video-js.vjs-layout-x-small .vjs-current-time, -.video-js.vjs-layout-x-small .vjs-time-divider, -.video-js.vjs-layout-x-small .vjs-duration, -.video-js.vjs-layout-x-small .vjs-remaining-time, -.video-js.vjs-layout-x-small .vjs-playback-rate, -.video-js.vjs-layout-x-small .vjs-volume-control, -.video-js.vjs-layout-tiny .vjs-current-time, -.video-js.vjs-layout-tiny .vjs-time-divider, -.video-js.vjs-layout-tiny .vjs-duration, -.video-js.vjs-layout-tiny .vjs-remaining-time, -.video-js.vjs-layout-tiny .vjs-playback-rate, -.video-js.vjs-layout-tiny .vjs-volume-control { - display: none; -} -.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, -.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, -.video-js.vjs-layout-small - .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, -.video-js.vjs-layout-small - .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, -.video-js.vjs-layout-x-small - .vjs-volume-panel.vjs-volume-panel-horizontal:hover, -.video-js.vjs-layout-x-small - .vjs-volume-panel.vjs-volume-panel-horizontal:active, -.video-js.vjs-layout-x-small - .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, -.video-js.vjs-layout-x-small - .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, -.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover, -.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active, -.video-js.vjs-layout-tiny - .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, -.video-js.vjs-layout-tiny - .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover { - width: auto; - width: initial; -} -.video-js.vjs-layout-x-small .vjs-progress-control, -.video-js.vjs-layout-tiny .vjs-progress-control { - display: none; -} -.video-js.vjs-layout-x-small .vjs-custom-control-spacer { - flex: auto; - display: block; -} -.video-js.vjs-layout-x-small.vjs-no-flex .vjs-custom-control-spacer { - width: auto; -} - -.vjs-modal-dialog.vjs-text-track-settings { - background-color: #2b333f; - background-color: rgba(43, 51, 63, 0.75); - color: #fff; - height: 70%; -} - -.vjs-text-track-settings .vjs-modal-dialog-content { - display: table; -} - -.vjs-text-track-settings .vjs-track-settings-colors, -.vjs-text-track-settings .vjs-track-settings-font, -.vjs-text-track-settings .vjs-track-settings-controls { - display: table-cell; -} - -.vjs-text-track-settings .vjs-track-settings-controls { - text-align: right; - vertical-align: bottom; -} - -@supports (display: grid) { - .vjs-text-track-settings .vjs-modal-dialog-content { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; - padding: 20px 24px 0px 24px; - } - - .vjs-track-settings-controls .vjs-default-button { - margin-bottom: 20px; - } - - .vjs-text-track-settings .vjs-track-settings-controls { - grid-column: 1/-1; - } - - .vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content, - .vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content, - .vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content { - grid-template-columns: 1fr; - } -} -.vjs-track-setting > select { - margin-right: 1em; - margin-bottom: 0.5em; -} - -.vjs-text-track-settings fieldset { - margin: 5px; - padding: 3px; - border: none; -} - -.vjs-text-track-settings fieldset span { - display: inline-block; -} - -.vjs-text-track-settings fieldset span > select { - max-width: 7.3em; -} - -.vjs-text-track-settings legend { - color: #fff; - margin: 0 0 5px 0; -} - -.vjs-text-track-settings .vjs-label { - position: absolute; - clip: rect(1px 1px 1px 1px); - clip: rect(1px, 1px, 1px, 1px); - display: block; - margin: 0 0 5px 0; - padding: 0; - border: 0; - height: 1px; - width: 1px; - overflow: hidden; -} - -.vjs-track-settings-controls button:focus, -.vjs-track-settings-controls button:active { - outline-style: solid; - outline-width: medium; - background-image: linear-gradient(0deg, #fff 88%, #73859f 100%); -} - -.vjs-track-settings-controls button:hover { - color: rgba(43, 51, 63, 0.75); -} - -.vjs-track-settings-controls button { - background-color: #fff; - background-image: linear-gradient(-180deg, #fff 88%, #73859f 100%); - color: #2b333f; - cursor: pointer; - border-radius: 2px; -} - -.vjs-track-settings-controls .vjs-default-button { - margin-right: 1em; -} - -@media print { - .video-js > *:not(.vjs-tech):not(.vjs-poster) { - visibility: hidden; - } -} -.vjs-resize-manager { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: none; - z-index: -1000; -} - -.js-focus-visible .video-js *:focus:not(.focus-visible) { - outline: none; -} - -.video-js *:focus:not(:focus-visible) { - outline: none; -} diff --git a/docs/index_files/libs/quarto-contrib/videojs/video.min.js b/docs/index_files/libs/quarto-contrib/videojs/video.min.js deleted file mode 100644 index 10e6e449..00000000 --- a/docs/index_files/libs/quarto-contrib/videojs/video.min.js +++ /dev/null @@ -1,32045 +0,0 @@ -/** - * @license - * Video.js 7.20.2 - * Copyright Brightcove, Inc. - * Available under Apache License Version 2.0 - * - * - * Includes vtt.js - * Available under Apache License Version 2.0 - * - */ -!(function (e, t) { - "object" == typeof exports && "undefined" != typeof module - ? (module.exports = t()) - : "function" == typeof define && define.amd - ? define(t) - : ((e = - "undefined" != typeof globalThis ? globalThis : e || self).videojs = - t()); -})(this, function () { - "use strict"; - for ( - var e, - u = "7.20.2", - i = {}, - a = function (e, t) { - return (i[e] = i[e] || []), t && (i[e] = i[e].concat(t)), i[e]; - }, - n = function (e, t) { - t = a(e).indexOf(t); - return !(t <= -1) && ((i[e] = i[e].slice()), i[e].splice(t, 1), !0); - }, - l = { prefixed: !0 }, - t = [ - [ - "requestFullscreen", - "exitFullscreen", - "fullscreenElement", - "fullscreenEnabled", - "fullscreenchange", - "fullscreenerror", - "fullscreen", - ], - [ - "webkitRequestFullscreen", - "webkitExitFullscreen", - "webkitFullscreenElement", - "webkitFullscreenEnabled", - "webkitfullscreenchange", - "webkitfullscreenerror", - "-webkit-full-screen", - ], - [ - "mozRequestFullScreen", - "mozCancelFullScreen", - "mozFullScreenElement", - "mozFullScreenEnabled", - "mozfullscreenchange", - "mozfullscreenerror", - "-moz-full-screen", - ], - [ - "msRequestFullscreen", - "msExitFullscreen", - "msFullscreenElement", - "msFullscreenEnabled", - "MSFullscreenChange", - "MSFullscreenError", - "-ms-fullscreen", - ], - ], - r = t[0], - s = 0; - s < t.length; - s++ - ) - if (t[s][1] in document) { - e = t[s]; - break; - } - if (e) { - for (var o = 0; o < e.length; o++) l[r[o]] = e[o]; - l.prefixed = e[0] !== r[0]; - } - var c = [], - d = function (a, s) { - return function (e, t, i) { - var n, - r = s.levels[t], - t = new RegExp("^(" + r + ")$"); - "log" !== e && i.unshift(e.toUpperCase() + ":"), - i.unshift(a + ":"), - c && - (c.push([].concat(i)), - (n = c.length - 1e3), - c.splice(0, 0 < n ? n : 0)), - !window.console || - ((n = - !(n = window.console[e]) && "debug" === e - ? window.console.info || window.console.log - : n) && - r && - t.test(e) && - n[Array.isArray(i) ? "apply" : "call"](window.console, i)); - }; - }; - var h = (function t(i) { - function n() { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - a("log", r, t); - } - var r = "info", - a = d(i, n); - return ( - (n.createLogger = function (e) { - return t(i + ": " + e); - }), - (n.levels = { - all: "debug|log|warn|error", - off: "", - debug: "debug|log|warn|error", - info: "log|warn|error", - warn: "warn|error", - error: "error", - DEFAULT: r, - }), - (n.level = function (e) { - if ("string" == typeof e) { - if (!n.levels.hasOwnProperty(e)) - throw new Error('"' + e + '" in not a valid log level'); - r = e; - } - return r; - }), - ((n.history = function () { - return c ? [].concat(c) : []; - }).filter = function (t) { - return (c || []).filter(function (e) { - return new RegExp(".*" + t + ".*").test(e[0]); - }); - }), - (n.history.clear = function () { - c && (c.length = 0); - }), - (n.history.disable = function () { - null !== c && ((c.length = 0), (c = null)); - }), - (n.history.enable = function () { - null === c && (c = []); - }), - (n.error = function () { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - return a("error", r, t); - }), - (n.warn = function () { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - return a("warn", r, t); - }), - (n.debug = function () { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - return a("debug", r, t); - }), - n - ); - })("VIDEOJS"), - p = h.createLogger, - f = - "undefined" != typeof globalThis - ? globalThis - : "undefined" != typeof window - ? window - : "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : {}; - function m(e, t) { - return e((t = { exports: {} }), t.exports), t.exports; - } - var g = m(function (e) { - function t() { - return ( - (e.exports = t = - Object.assign || - function (e) { - for (var t = 1; t < arguments.length; t++) { - var i, - n = arguments[t]; - for (i in n) - Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i]); - } - return e; - }), - t.apply(this, arguments) - ); - } - e.exports = t; - }), - y = Object.prototype.toString, - v = function (e) { - return T(e) ? Object.keys(e) : []; - }; - function _(t, i) { - v(t).forEach(function (e) { - return i(t[e], e); - }); - } - function b(i) { - for ( - var e = arguments.length, t = new Array(1 < e ? e - 1 : 0), n = 1; - n < e; - n++ - ) - t[n - 1] = arguments[n]; - return Object.assign - ? g.apply(void 0, [i].concat(t)) - : (t.forEach(function (e) { - e && - _(e, function (e, t) { - i[t] = e; - }); - }), - i); - } - function T(e) { - return !!e && "object" == typeof e; - } - function S(e) { - return T(e) && "[object Object]" === y.call(e) && e.constructor === Object; - } - function w(e, t) { - if (!e || !t) return ""; - if ("function" != typeof window.getComputedStyle) return ""; - var i; - try { - i = window.getComputedStyle(e); - } catch (e) { - return ""; - } - return i ? i.getPropertyValue(t) || i[t] : ""; - } - var E = (window.navigator && window.navigator.userAgent) || "", - k = /AppleWebKit\/([\d.]+)/i.exec(E), - C = k ? parseFloat(k.pop()) : null, - I = /iPod/i.test(E), - x = (jt = E.match(/OS (\d+)_/i)) && jt[1] ? jt[1] : null, - A = /Android/i.test(E), - P = (function () { - var e = E.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); - if (!e) return null; - var t = e[1] && parseFloat(e[1]), - i = e[2] && parseFloat(e[2]); - return t && i ? parseFloat(e[1] + "." + e[2]) : t || null; - })(), - L = A && P < 5 && C < 537, - D = /Firefox/i.test(E), - O = /Edg/i.test(E), - M = !O && (/Chrome/i.test(E) || /CriOS/i.test(E)), - R = - (zt = E.match(/(Chrome|CriOS)\/(\d+)/)) && zt[2] - ? parseFloat(zt[2]) - : null, - N = (Xt = - !(Xt = (Xt = /MSIE\s(\d+)\.\d/.exec(E)) && parseFloat(Xt[1])) && - /Trident\/7.0/i.test(E) && - /rv:11.0/.test(E) - ? 11 - : Xt), - U = /Safari/i.test(E) && !M && !A && !O, - B = /Windows/i.test(E), - F = Boolean( - X() && - ("ontouchstart" in window || - window.navigator.maxTouchPoints || - (window.DocumentTouch && - window.document instanceof window.DocumentTouch)), - ), - j = /iPad/i.test(E) || (U && F && !/iPhone/i.test(E)), - H = /iPhone/i.test(E) && !j, - q = H || j || I, - V = (U || q) && !M, - W = Object.freeze({ - __proto__: null, - IS_IPOD: I, - IOS_VERSION: x, - IS_ANDROID: A, - ANDROID_VERSION: P, - IS_NATIVE_ANDROID: L, - IS_FIREFOX: D, - IS_EDGE: O, - IS_CHROME: M, - CHROME_VERSION: R, - IE_VERSION: N, - IS_SAFARI: U, - IS_WINDOWS: B, - TOUCH_ENABLED: F, - IS_IPAD: j, - IS_IPHONE: H, - IS_IOS: q, - IS_ANY_SAFARI: V, - }); - function G(e) { - return "string" == typeof e && Boolean(e.trim()); - } - function z(e) { - if (0 <= e.indexOf(" ")) - throw new Error("class has illegal whitespace characters"); - } - function X() { - return document === window.document; - } - function K(e) { - return T(e) && 1 === e.nodeType; - } - function Y() { - try { - return window.parent !== window.self; - } catch (e) { - return !0; - } - } - function Q(i) { - return function (e, t) { - if (!G(e)) return document[i](null); - t = K((t = G(t) ? document.querySelector(t) : t)) ? t : document; - return t[i] && t[i](e); - }; - } - function $(e, i, t, n) { - void 0 === e && (e = "div"), - void 0 === i && (i = {}), - void 0 === t && (t = {}); - var r = document.createElement(e); - return ( - Object.getOwnPropertyNames(i).forEach(function (e) { - var t = i[e]; - -1 !== e.indexOf("aria-") || "role" === e || "type" === e - ? (h.warn( - "Setting attributes in the second argument of createEl()\nhas been deprecated. Use the third argument instead.\ncreateEl(type, properties, attributes). Attempting to set " + - e + - " to " + - t + - ".", - ), - r.setAttribute(e, t)) - : "textContent" === e - ? J(r, t) - : (r[e] === t && "tabIndex" !== e) || (r[e] = t); - }), - Object.getOwnPropertyNames(t).forEach(function (e) { - r.setAttribute(e, t[e]); - }), - n && ye(r, n), - r - ); - } - function J(e, t) { - return ( - "undefined" == typeof e.textContent - ? (e.innerText = t) - : (e.textContent = t), - e - ); - } - function Z(e, t) { - t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e); - } - function ee(e, t) { - return ( - z(t), - e.classList - ? e.classList.contains(t) - : new RegExp("(^|\\s)" + t + "($|\\s)").test(e.className) - ); - } - function te(e, t) { - return ( - e.classList - ? e.classList.add(t) - : ee(e, t) || (e.className = (e.className + " " + t).trim()), - e - ); - } - function ie(e, t) { - return e - ? (e.classList - ? e.classList.remove(t) - : (z(t), - (e.className = e.className - .split(/\s+/) - .filter(function (e) { - return e !== t; - }) - .join(" "))), - e) - : (h.warn("removeClass was called with an element that doesn't exist"), - null); - } - function ne(e, t, i) { - var n = ee(e, t); - if ( - (i = - "boolean" != typeof (i = "function" == typeof i ? i(e, t) : i) - ? !n - : i) !== n - ) - return (i ? te : ie)(e, t), e; - } - function re(i, n) { - Object.getOwnPropertyNames(n).forEach(function (e) { - var t = n[e]; - null === t || "undefined" == typeof t || !1 === t - ? i.removeAttribute(e) - : i.setAttribute(e, !0 === t ? "" : t); - }); - } - function ae(e) { - var t = {}, - i = ",autoplay,controls,playsinline,loop,muted,default,defaultMuted,"; - if (e && e.attributes && 0 < e.attributes.length) - for (var n = e.attributes, r = n.length - 1; 0 <= r; r--) { - var a = n[r].name, - s = n[r].value; - ("boolean" != typeof e[a] && -1 === i.indexOf("," + a + ",")) || - (s = null !== s), - (t[a] = s); - } - return t; - } - function se(e, t) { - return e.getAttribute(t); - } - function oe(e, t, i) { - e.setAttribute(t, i); - } - function ue(e, t) { - e.removeAttribute(t); - } - function le() { - document.body.focus(), - (document.onselectstart = function () { - return !1; - }); - } - function ce() { - document.onselectstart = function () { - return !0; - }; - } - function de(e) { - if (e && e.getBoundingClientRect && e.parentNode) { - var t = e.getBoundingClientRect(), - i = {}; - return ( - ["bottom", "height", "left", "right", "top", "width"].forEach( - function (e) { - void 0 !== t[e] && (i[e] = t[e]); - }, - ), - i.height || (i.height = parseFloat(w(e, "height"))), - i.width || (i.width = parseFloat(w(e, "width"))), - i - ); - } - } - function he(e) { - if (!e || (e && !e.offsetParent)) - return { left: 0, top: 0, width: 0, height: 0 }; - for ( - var t = e.offsetWidth, i = e.offsetHeight, n = 0, r = 0; - e.offsetParent && e !== document[l.fullscreenElement]; - - ) - (n += e.offsetLeft), (r += e.offsetTop), (e = e.offsetParent); - return { left: n, top: r, width: t, height: i }; - } - function pe(e, t) { - var i = { x: 0, y: 0 }; - if (q) - for (var n = e; n && "html" !== n.nodeName.toLowerCase(); ) { - var r, - a = w(n, "transform"); - /^matrix/.test(a) - ? ((r = a.slice(7, -1).split(/,\s/).map(Number)), - (i.x += r[4]), - (i.y += r[5])) - : /^matrix3d/.test(a) && - ((a = a.slice(9, -1).split(/,\s/).map(Number)), - (i.x += a[12]), - (i.y += a[13])), - (n = n.parentNode); - } - var s = {}, - o = he(t.target), - u = he(e), - l = u.width, - c = u.height, - e = t.offsetY - (u.top - o.top), - o = t.offsetX - (u.left - o.left); - return ( - t.changedTouches && - ((o = t.changedTouches[0].pageX - u.left), - (e = t.changedTouches[0].pageY + u.top), - q && ((o -= i.x), (e -= i.y))), - (s.y = 1 - Math.max(0, Math.min(1, e / c))), - (s.x = Math.max(0, Math.min(1, o / l))), - s - ); - } - function fe(e) { - return T(e) && 3 === e.nodeType; - } - function me(e) { - for (; e.firstChild; ) e.removeChild(e.firstChild); - return e; - } - function ge(e) { - return ( - "function" == typeof e && (e = e()), - (Array.isArray(e) ? e : [e]) - .map(function (e) { - return K((e = "function" == typeof e ? e() : e)) || fe(e) - ? e - : "string" == typeof e && /\S/.test(e) - ? document.createTextNode(e) - : void 0; - }) - .filter(function (e) { - return e; - }) - ); - } - function ye(t, e) { - return ( - ge(e).forEach(function (e) { - return t.appendChild(e); - }), - t - ); - } - function ve(e, t) { - return ye(me(e), t); - } - function _e(e) { - return ( - (void 0 === e.button && void 0 === e.buttons) || - (0 === e.button && void 0 === e.buttons) || - ("mouseup" === e.type && 0 === e.button && 0 === e.buttons) || - (0 === e.button && 1 === e.buttons) - ); - } - var be, - Te = Q("querySelector"), - Se = Q("querySelectorAll"), - we = Object.freeze({ - __proto__: null, - isReal: X, - isEl: K, - isInFrame: Y, - createEl: $, - textContent: J, - prependTo: Z, - hasClass: ee, - addClass: te, - removeClass: ie, - toggleClass: ne, - setAttributes: re, - getAttributes: ae, - getAttribute: se, - setAttribute: oe, - removeAttribute: ue, - blockTextSelection: le, - unblockTextSelection: ce, - getBoundingClientRect: de, - findPosition: he, - getPointerPosition: pe, - isTextNode: fe, - emptyEl: me, - normalizeContent: ge, - appendContent: ye, - insertContent: ve, - isSingleLeftClick: _e, - $: Te, - $$: Se, - }), - Ee = !1, - ke = function () { - if (!1 !== be.options.autoSetup) { - var e = Array.prototype.slice.call( - document.getElementsByTagName("video"), - ), - t = Array.prototype.slice.call( - document.getElementsByTagName("audio"), - ), - i = Array.prototype.slice.call( - document.getElementsByTagName("video-js"), - ), - n = e.concat(t, i); - if (n && 0 < n.length) - for (var r = 0, a = n.length; r < a; r++) { - var s = n[r]; - if (!s || !s.getAttribute) { - Ce(1); - break; - } - void 0 === s.player && - null !== s.getAttribute("data-setup") && - be(s); - } - else Ee || Ce(1); - } - }; - function Ce(e, t) { - X() && (t && (be = t), window.setTimeout(ke, e)); - } - function Ie() { - (Ee = !0), window.removeEventListener("load", Ie); - } - X() && - ("complete" === document.readyState - ? Ie() - : window.addEventListener("load", Ie)); - function xe(e) { - var t = document.createElement("style"); - return (t.className = e), t; - } - function Ae(e, t) { - e.styleSheet ? (e.styleSheet.cssText = t) : (e.textContent = t); - } - var Pe = 3; - window.WeakMap || - (ui = (function () { - function e() { - (this.vdata = - "vdata" + - Math.floor( - (window.performance && window.performance.now()) || Date.now(), - )), - (this.data = {}); - } - var t = e.prototype; - return ( - (t.set = function (e, t) { - var i = e[this.vdata] || Pe++; - return e[this.vdata] || (e[this.vdata] = i), (this.data[i] = t), this; - }), - (t.get = function (e) { - var t = e[this.vdata]; - if (t) return this.data[t]; - h("We have no data for this element", e); - }), - (t.has = function (e) { - return e[this.vdata] in this.data; - }), - (t.delete = function (e) { - var t = e[this.vdata]; - t && (delete this.data[t], delete e[this.vdata]); - }), - e - ); - })()); - var Le, - De = new (window.WeakMap ? WeakMap : ui)(); - function Oe(e, t) { - var i; - De.has(e) && - (0 === (i = De.get(e)).handlers[t].length && - (delete i.handlers[t], - e.removeEventListener - ? e.removeEventListener(t, i.dispatcher, !1) - : e.detachEvent && e.detachEvent("on" + t, i.dispatcher)), - Object.getOwnPropertyNames(i.handlers).length <= 0 && - (delete i.handlers, delete i.dispatcher, delete i.disabled), - 0 === Object.getOwnPropertyNames(i).length && De.delete(e)); - } - function Me(t, i, e, n) { - e.forEach(function (e) { - t(i, e, n); - }); - } - function Re(e) { - if (e.fixed_) return e; - function t() { - return !0; - } - function i() { - return !1; - } - if (!e || !e.isPropagationStopped || !e.isImmediatePropagationStopped) { - var n, - r, - a, - s = e || window.event; - for (n in ((e = {}), s)) - "layerX" !== n && - "layerY" !== n && - "keyLocation" !== n && - "webkitMovementX" !== n && - "webkitMovementY" !== n && - "path" !== n && - (("returnValue" === n && s.preventDefault) || (e[n] = s[n])); - e.target || (e.target = e.srcElement || document), - e.relatedTarget || - (e.relatedTarget = - e.fromElement === e.target ? e.toElement : e.fromElement), - (e.preventDefault = function () { - s.preventDefault && s.preventDefault(), - (e.returnValue = !1), - (s.returnValue = !1), - (e.defaultPrevented = !0); - }), - (e.defaultPrevented = !1), - (e.stopPropagation = function () { - s.stopPropagation && s.stopPropagation(), - (e.cancelBubble = !0), - (s.cancelBubble = !0), - (e.isPropagationStopped = t); - }), - (e.isPropagationStopped = i), - (e.stopImmediatePropagation = function () { - s.stopImmediatePropagation && s.stopImmediatePropagation(), - (e.isImmediatePropagationStopped = t), - e.stopPropagation(); - }), - (e.isImmediatePropagationStopped = i), - null !== e.clientX && - void 0 !== e.clientX && - ((r = document.documentElement), - (a = document.body), - (e.pageX = - e.clientX + - ((r && r.scrollLeft) || (a && a.scrollLeft) || 0) - - ((r && r.clientLeft) || (a && a.clientLeft) || 0)), - (e.pageY = - e.clientY + - ((r && r.scrollTop) || (a && a.scrollTop) || 0) - - ((r && r.clientTop) || (a && a.clientTop) || 0))), - (e.which = e.charCode || e.keyCode), - null !== e.button && - void 0 !== e.button && - (e.button = - 1 & e.button ? 0 : 4 & e.button ? 1 : 2 & e.button ? 2 : 0); - } - return (e.fixed_ = !0), e; - } - var Ne = function () { - if ("boolean" != typeof Le) { - Le = !1; - try { - var e = Object.defineProperty({}, "passive", { - get: function () { - Le = !0; - }, - }); - window.addEventListener("test", null, e), - window.removeEventListener("test", null, e); - } catch (e) {} - } - return Le; - }, - Ue = ["touchstart", "touchmove"]; - function Be(s, e, t) { - if (Array.isArray(e)) return Me(Be, s, e, t); - De.has(s) || De.set(s, {}); - var o = De.get(s); - o.handlers || (o.handlers = {}), - o.handlers[e] || (o.handlers[e] = []), - t.guid || (t.guid = Pe++), - o.handlers[e].push(t), - o.dispatcher || - ((o.disabled = !1), - (o.dispatcher = function (e, t) { - if (!o.disabled) { - e = Re(e); - var i = o.handlers[e.type]; - if (i) - for ( - var n = i.slice(0), r = 0, a = n.length; - r < a && !e.isImmediatePropagationStopped(); - r++ - ) - try { - n[r].call(s, e, t); - } catch (e) { - h.error(e); - } - } - })), - 1 === o.handlers[e].length && - (s.addEventListener - ? ((t = !1), - Ne() && -1 < Ue.indexOf(e) && (t = { passive: !0 }), - s.addEventListener(e, o.dispatcher, t)) - : s.attachEvent && s.attachEvent("on" + e, o.dispatcher)); - } - function Fe(e, t, i) { - if (De.has(e)) { - var n = De.get(e); - if (n.handlers) { - if (Array.isArray(t)) return Me(Fe, e, t, i); - var r = function (e, t) { - (n.handlers[t] = []), Oe(e, t); - }; - if (void 0 !== t) { - var a = n.handlers[t]; - if (a) - if (i) { - if (i.guid) - for (var s = 0; s < a.length; s++) - a[s].guid === i.guid && a.splice(s--, 1); - Oe(e, t); - } else r(e, t); - } else - for (var o in n.handlers) - Object.prototype.hasOwnProperty.call(n.handlers || {}, o) && - r(e, o); - } - } - } - function je(e, t, i) { - var n = De.has(e) ? De.get(e) : {}, - r = e.parentNode || e.ownerDocument; - return ( - "string" == typeof t - ? (t = { type: t, target: e }) - : t.target || (t.target = e), - (t = Re(t)), - n.dispatcher && n.dispatcher.call(e, t, i), - r && !t.isPropagationStopped() && !0 === t.bubbles - ? je.call(null, r, t, i) - : !r && - !t.defaultPrevented && - t.target && - t.target[t.type] && - (De.has(t.target) || De.set(t.target, {}), - (r = De.get(t.target)), - t.target[t.type] && - ((r.disabled = !0), - "function" == typeof t.target[t.type] && t.target[t.type](), - (r.disabled = !1))), - !t.defaultPrevented - ); - } - function He(e, t, i) { - if (Array.isArray(t)) return Me(He, e, t, i); - function n() { - Fe(e, t, n), i.apply(this, arguments); - } - (n.guid = i.guid = i.guid || Pe++), Be(e, t, n); - } - function qe(e, t, i) { - function n() { - Fe(e, t, n), i.apply(this, arguments); - } - (n.guid = i.guid = i.guid || Pe++), Be(e, t, n); - } - function Ve(e, t, i) { - return ( - t.guid || (t.guid = Pe++), - ((e = t.bind(e)).guid = i ? i + "_" + t.guid : t.guid), - e - ); - } - function We(t, i) { - var n = window.performance.now(); - return function () { - var e = window.performance.now(); - i <= e - n && (t.apply(void 0, arguments), (n = e)); - }; - } - function Ge(n, r, a, s) { - var o; - function e() { - var e = this, - t = arguments, - i = function () { - (i = o = null), a || n.apply(e, t); - }; - !o && a && n.apply(e, t), s.clearTimeout(o), (o = s.setTimeout(i, r)); - } - return ( - void 0 === s && (s = window), - (e.cancel = function () { - s.clearTimeout(o), (o = null); - }), - e - ); - } - function ze() {} - var Xe, - Ke = Object.freeze({ - __proto__: null, - fixEvent: Re, - on: Be, - off: Fe, - trigger: je, - one: He, - any: qe, - }); - (ze.prototype.allowedEvents_ = {}), - (ze.prototype.addEventListener = ze.prototype.on = - function (e, t) { - var i = this.addEventListener; - (this.addEventListener = function () {}), - Be(this, e, t), - (this.addEventListener = i); - }), - (ze.prototype.removeEventListener = ze.prototype.off = - function (e, t) { - Fe(this, e, t); - }), - (ze.prototype.one = function (e, t) { - var i = this.addEventListener; - (this.addEventListener = function () {}), - He(this, e, t), - (this.addEventListener = i); - }), - (ze.prototype.any = function (e, t) { - var i = this.addEventListener; - (this.addEventListener = function () {}), - qe(this, e, t), - (this.addEventListener = i); - }), - (ze.prototype.dispatchEvent = ze.prototype.trigger = - function (e) { - var t = e.type || e; - (e = Re((e = "string" == typeof e ? { type: t } : e))), - this.allowedEvents_[t] && this["on" + t] && this["on" + t](e), - je(this, e); - }), - (ze.prototype.queueTrigger = function (e) { - var t = this; - Xe = Xe || new Map(); - var i = e.type || e, - n = Xe.get(this); - n || ((n = new Map()), Xe.set(this, n)); - var r = n.get(i); - n.delete(i), window.clearTimeout(r); - r = window.setTimeout(function () { - 0 === n.size && ((n = null), Xe.delete(t)), t.trigger(e); - }, 0); - n.set(i, r); - }); - function Ye(e) { - return "function" == typeof e.name - ? e.name() - : "string" == typeof e.name - ? e.name - : e.name_ || - (e.constructor && e.constructor.name ? e.constructor.name : typeof e); - } - function Qe(e) { - return ( - ("string" == typeof e && /\S/.test(e)) || (Array.isArray(e) && !!e.length) - ); - } - function $e(e, t, i) { - if (!e || (!e.nodeName && !it(e))) - throw new Error( - "Invalid target for " + - Ye(t) + - "#" + - i + - "; must be a DOM node or evented object.", - ); - } - function Je(e, t, i) { - if (!Qe(e)) - throw new Error( - "Invalid event type for " + - Ye(t) + - "#" + - i + - "; must be a non-empty string or array.", - ); - } - function Ze(e, t, i) { - if ("function" != typeof e) - throw new Error( - "Invalid listener for " + Ye(t) + "#" + i + "; must be a function.", - ); - } - function et(e, t, i) { - var n, - r, - a = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_, - t = a - ? ((n = e.eventBusEl_), 3 <= t.length && t.shift(), (r = t[0]), t[1]) - : ((n = t[0]), (r = t[1]), t[2]); - return ( - $e(n, e, i), - Je(r, e, i), - Ze(t, e, i), - { isTargetingSelf: a, target: n, type: r, listener: (t = Ve(e, t)) } - ); - } - function tt(e, t, i, n) { - $e(e, e, t), e.nodeName ? Ke[t](e, i, n) : e[t](i, n); - } - var it = function (t) { - return ( - t instanceof ze || - (!!t.eventBusEl_ && - ["on", "one", "off", "trigger"].every(function (e) { - return "function" == typeof t[e]; - })) - ); - }, - nt = { - on: function () { - for ( - var e = this, t = arguments.length, i = new Array(t), n = 0; - n < t; - n++ - ) - i[n] = arguments[n]; - var r, - a = et(this, i, "on"), - s = a.isTargetingSelf, - o = a.target, - u = a.type, - l = a.listener; - tt(o, "on", u, l), - s || - (((r = function () { - return e.off(o, u, l); - }).guid = l.guid), - ((s = function () { - return e.off("dispose", r); - }).guid = l.guid), - tt(this, "on", "dispose", r), - tt(o, "on", "dispose", s)); - }, - one: function () { - for ( - var r = this, e = arguments.length, t = new Array(e), i = 0; - i < e; - i++ - ) - t[i] = arguments[i]; - var n = et(this, t, "one"), - a = n.isTargetingSelf, - s = n.target, - o = n.type, - u = n.listener; - a - ? tt(s, "one", o, u) - : (((a = function e() { - r.off(s, o, e); - for ( - var t = arguments.length, i = new Array(t), n = 0; - n < t; - n++ - ) - i[n] = arguments[n]; - u.apply(null, i); - }).guid = u.guid), - tt(s, "one", o, a)); - }, - any: function () { - for ( - var r = this, e = arguments.length, t = new Array(e), i = 0; - i < e; - i++ - ) - t[i] = arguments[i]; - var n = et(this, t, "any"), - a = n.isTargetingSelf, - s = n.target, - o = n.type, - u = n.listener; - a - ? tt(s, "any", o, u) - : (((a = function e() { - r.off(s, o, e); - for ( - var t = arguments.length, i = new Array(t), n = 0; - n < t; - n++ - ) - i[n] = arguments[n]; - u.apply(null, i); - }).guid = u.guid), - tt(s, "any", o, a)); - }, - off: function (e, t, i) { - !e || Qe(e) - ? Fe(this.eventBusEl_, e, t) - : ((t = t), - $e((e = e), this, "off"), - Je(t, this, "off"), - Ze(i, this, "off"), - (i = Ve(this, i)), - this.off("dispose", i), - e.nodeName - ? (Fe(e, t, i), Fe(e, "dispose", i)) - : it(e) && (e.off(t, i), e.off("dispose", i))); - }, - trigger: function (e, t) { - $e(this.eventBusEl_, this, "trigger"); - var i = e && "string" != typeof e ? e.type : e; - if (!Qe(i)) { - i = - "Invalid event type for " + - Ye(this) + - "#trigger; must be a non-empty string or object with a type key that has a non-empty value."; - if (!e) throw new Error(i); - (this.log || h).error(i); - } - return je(this.eventBusEl_, e, t); - }, - }; - function rt(e, t) { - t = (t = void 0 === t ? {} : t).eventBusKey; - if (t) { - if (!e[t].nodeName) - throw new Error( - 'The eventBusKey "' + t + '" does not refer to an element.', - ); - e.eventBusEl_ = e[t]; - } else e.eventBusEl_ = $("span", { className: "vjs-event-bus" }); - return ( - b(e, nt), - e.eventedCallbacks && - e.eventedCallbacks.forEach(function (e) { - e(); - }), - e.on("dispose", function () { - e.off(), - [e, e.el_, e.eventBusEl_].forEach(function (e) { - e && De.has(e) && De.delete(e); - }), - window.setTimeout(function () { - e.eventBusEl_ = null; - }, 0); - }), - e - ); - } - var at = { - state: {}, - setState: function (e) { - var i, - n = this; - return ( - _((e = "function" == typeof e ? e() : e), function (e, t) { - n.state[t] !== e && ((i = i || {})[t] = { from: n.state[t], to: e }), - (n.state[t] = e); - }), - i && it(this) && this.trigger({ changes: i, type: "statechanged" }), - i - ); - }, - }; - function st(e, t) { - return ( - b(e, at), - (e.state = b({}, e.state, t)), - "function" == typeof e.handleStateChanged && - it(e) && - e.on("statechanged", e.handleStateChanged), - e - ); - } - function ot(e) { - return "string" != typeof e - ? e - : e.replace(/./, function (e) { - return e.toLowerCase(); - }); - } - function ut(e) { - return "string" != typeof e - ? e - : e.replace(/./, function (e) { - return e.toUpperCase(); - }); - } - function lt() { - for (var i = {}, e = arguments.length, t = new Array(e), n = 0; n < e; n++) - t[n] = arguments[n]; - return ( - t.forEach(function (e) { - e && - _(e, function (e, t) { - S(e) ? (S(i[t]) || (i[t] = {}), (i[t] = lt(i[t], e))) : (i[t] = e); - }); - }), - i - ); - } - var ct = - window.Map || - (function () { - function e() { - this.map_ = {}; - } - var t = e.prototype; - return ( - (t.has = function (e) { - return e in this.map_; - }), - (t.delete = function (e) { - var t = this.has(e); - return delete this.map_[e], t; - }), - (t.set = function (e, t) { - return (this.map_[e] = t), this; - }), - (t.forEach = function (e, t) { - for (var i in this.map_) e.call(t, this.map_[i], i, this); - }), - e - ); - })(), - dt = - window.Set || - (function () { - function e() { - this.set_ = {}; - } - var t = e.prototype; - return ( - (t.has = function (e) { - return e in this.set_; - }), - (t.delete = function (e) { - var t = this.has(e); - return delete this.set_[e], t; - }), - (t.add = function (e) { - return (this.set_[e] = 1), this; - }), - (t.forEach = function (e, t) { - for (var i in this.set_) e.call(t, i, i, this); - }), - e - ); - })(), - ht = m(function (e, t) { - function i(e) { - if ( - (!e || - "object" != typeof e || - ((t = e.which || e.keyCode || e.charCode) && (e = t)), - "number" == typeof e) - ) - return o[e]; - var t = String(e), - e = n[t.toLowerCase()]; - return ( - e || - ((e = r[t.toLowerCase()]) - ? e - : 1 === t.length - ? t.charCodeAt(0) - : void 0) - ); - } - i.isEventKey = function (e, t) { - if (e && "object" == typeof e) { - var i = e.which || e.keyCode || e.charCode; - if (null == i) return !1; - if ("string" == typeof t) { - e = n[t.toLowerCase()]; - if (e) return e === i; - if ((e = r[t.toLowerCase()])) return e === i; - } else if ("number" == typeof t) return t === i; - return !1; - } - }; - for ( - var n = - ((t = e.exports = i).code = - t.codes = - { - backspace: 8, - tab: 9, - enter: 13, - shift: 16, - ctrl: 17, - alt: 18, - "pause/break": 19, - "caps lock": 20, - esc: 27, - space: 32, - "page up": 33, - "page down": 34, - end: 35, - home: 36, - left: 37, - up: 38, - right: 39, - down: 40, - insert: 45, - delete: 46, - command: 91, - "left command": 91, - "right command": 93, - "numpad *": 106, - "numpad +": 107, - "numpad -": 109, - "numpad .": 110, - "numpad /": 111, - "num lock": 144, - "scroll lock": 145, - "my computer": 182, - "my calculator": 183, - ";": 186, - "=": 187, - ",": 188, - "-": 189, - ".": 190, - "/": 191, - "`": 192, - "[": 219, - "\\": 220, - "]": 221, - "'": 222, - }), - r = (t.aliases = { - windows: 91, - "⇧": 16, - "⌥": 18, - "⌃": 17, - "⌘": 91, - ctl: 17, - control: 17, - option: 18, - pause: 19, - break: 19, - caps: 20, - return: 13, - escape: 27, - spc: 32, - spacebar: 32, - pgup: 33, - pgdn: 34, - ins: 45, - del: 46, - cmd: 91, - }), - a = 97; - a < 123; - a++ - ) - n[String.fromCharCode(a)] = a - 32; - for (var a = 48; a < 58; a++) n[a - 48] = a; - for (a = 1; a < 13; a++) n["f" + a] = a + 111; - for (a = 0; a < 10; a++) n["numpad " + a] = a + 96; - var s, - o = (t.names = t.title = {}); - for (a in n) o[n[a]] = a; - for (s in r) n[s] = r[s]; - }); - ht.code, ht.codes, ht.aliases, ht.names, ht.title; - var pt = (function () { - function s(e, t, i) { - var n = this; - !e && this.play ? (this.player_ = e = this) : (this.player_ = e), - (this.isDisposed_ = !1), - (this.parentComponent_ = null), - (this.options_ = lt({}, this.options_)), - (t = this.options_ = lt(this.options_, t)), - (this.id_ = t.id || (t.el && t.el.id)), - this.id_ || - ((e = (e && e.id && e.id()) || "no_player"), - (this.id_ = e + "_component_" + Pe++)), - (this.name_ = t.name || null), - t.el - ? (this.el_ = t.el) - : !1 !== t.createEl && (this.el_ = this.createEl()), - t.className && - this.el_ && - t.className.split(" ").forEach(function (e) { - return n.addClass(e); - }), - !1 !== t.evented && - (rt(this, { eventBusKey: this.el_ ? "el_" : null }), - (this.handleLanguagechange = this.handleLanguagechange.bind(this)), - this.on(this.player_, "languagechange", this.handleLanguagechange)), - st(this, this.constructor.defaultState), - (this.children_ = []), - (this.childIndex_ = {}), - (this.childNameIndex_ = {}), - (this.setTimeoutIds_ = new dt()), - (this.setIntervalIds_ = new dt()), - (this.rafIds_ = new dt()), - (this.namedRafs_ = new ct()), - (this.clearingTimersOnDispose_ = !1) !== t.initChildren && - this.initChildren(), - this.ready(i), - !1 !== t.reportTouchActivity && this.enableTouchActivity(); - } - var e = s.prototype; - return ( - (e.dispose = function (e) { - if ((void 0 === e && (e = {}), !this.isDisposed_)) { - if ( - (this.readyQueue_ && (this.readyQueue_.length = 0), - this.trigger({ type: "dispose", bubbles: !1 }), - (this.isDisposed_ = !0), - this.children_) - ) - for (var t = this.children_.length - 1; 0 <= t; t--) - this.children_[t].dispose && this.children_[t].dispose(); - (this.children_ = null), - (this.childIndex_ = null), - (this.childNameIndex_ = null), - (this.parentComponent_ = null), - this.el_ && - (this.el_.parentNode && - (e.restoreEl - ? this.el_.parentNode.replaceChild(e.restoreEl, this.el_) - : this.el_.parentNode.removeChild(this.el_)), - (this.el_ = null)), - (this.player_ = null); - } - }), - (e.isDisposed = function () { - return Boolean(this.isDisposed_); - }), - (e.player = function () { - return this.player_; - }), - (e.options = function (e) { - return e && (this.options_ = lt(this.options_, e)), this.options_; - }), - (e.el = function () { - return this.el_; - }), - (e.createEl = function (e, t, i) { - return $(e, t, i); - }), - (e.localize = function (e, i, t) { - void 0 === t && (t = e); - var n = this.player_.language && this.player_.language(), - r = this.player_.languages && this.player_.languages(), - a = r && r[n], - n = n && n.split("-")[0], - n = r && r[n], - t = t; - return ( - a && a[e] ? (t = a[e]) : n && n[e] && (t = n[e]), - (t = i - ? t.replace(/\{(\d+)\}/g, function (e, t) { - t = i[t - 1]; - return "undefined" == typeof t ? e : t; - }) - : t) - ); - }), - (e.handleLanguagechange = function () {}), - (e.contentEl = function () { - return this.contentEl_ || this.el_; - }), - (e.id = function () { - return this.id_; - }), - (e.name = function () { - return this.name_; - }), - (e.children = function () { - return this.children_; - }), - (e.getChildById = function (e) { - return this.childIndex_[e]; - }), - (e.getChild = function (e) { - if (e) return this.childNameIndex_[e]; - }), - (e.getDescendant = function () { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - for ( - var t = t.reduce(function (e, t) { - return e.concat(t); - }, []), - n = this, - r = 0; - r < t.length; - r++ - ) - if (!(n = n.getChild(t[r])) || !n.getChild) return; - return n; - }), - (e.addChild = function (e, t, i) { - if ( - (void 0 === t && (t = {}), - void 0 === i && (i = this.children_.length), - "string" == typeof e) - ) { - var n = ut(e), - r = t.componentClass || n; - t.name = n; - var a = s.getComponent(r); - if (!a) throw new Error("Component " + r + " does not exist"); - if ("function" != typeof a) return null; - a = new a(this.player_ || this, t); - } else a = e; - return ( - a.parentComponent_ && a.parentComponent_.removeChild(a), - this.children_.splice(i, 0, a), - (a.parentComponent_ = this), - "function" == typeof a.id && (this.childIndex_[a.id()] = a), - (n = n || (a.name && ut(a.name()))) && - ((this.childNameIndex_[n] = a), (this.childNameIndex_[ot(n)] = a)), - "function" == typeof a.el && - a.el() && - ((n = null), - this.children_[i + 1] && - (this.children_[i + 1].el_ - ? (n = this.children_[i + 1].el_) - : K(this.children_[i + 1]) && (n = this.children_[i + 1])), - this.contentEl().insertBefore(a.el(), n)), - a - ); - }), - (e.removeChild = function (e) { - if ( - (e = "string" == typeof e ? this.getChild(e) : e) && - this.children_ - ) { - for (var t, i = !1, n = this.children_.length - 1; 0 <= n; n--) - if (this.children_[n] === e) { - (i = !0), this.children_.splice(n, 1); - break; - } - i && - ((e.parentComponent_ = null), - (this.childIndex_[e.id()] = null), - (this.childNameIndex_[ut(e.name())] = null), - (this.childNameIndex_[ot(e.name())] = null), - (t = e.el()) && - t.parentNode === this.contentEl() && - this.contentEl().removeChild(e.el())); - } - }), - (e.initChildren = function () { - var i, - t, - e, - n = this, - r = this.options_.children; - r && - ((i = this.options_), - (t = s.getComponent("Tech")), - (e = Array.isArray(r) ? r : Object.keys(r)) - .concat( - Object.keys(this.options_).filter(function (t) { - return !e.some(function (e) { - return "string" == typeof e ? t === e : t === e.name; - }); - }), - ) - .map(function (e) { - var t, - e = - "string" == typeof e - ? r[(t = e)] || n.options_[t] || {} - : ((t = e.name), e); - return { name: t, opts: e }; - }) - .filter(function (e) { - e = s.getComponent(e.opts.componentClass || ut(e.name)); - return e && !t.isTech(e); - }) - .forEach(function (e) { - var t = e.name, - e = e.opts; - !1 !== (e = void 0 !== i[t] ? i[t] : e) && - (((e = !0 === e ? {} : e).playerOptions = - n.options_.playerOptions), - (e = n.addChild(t, e)) && (n[t] = e)); - })); - }), - (e.buildCSSClass = function () { - return ""; - }), - (e.ready = function (e, t) { - if ((void 0 === t && (t = !1), e)) - return this.isReady_ - ? void (t ? e.call(this) : this.setTimeout(e, 1)) - : ((this.readyQueue_ = this.readyQueue_ || []), - void this.readyQueue_.push(e)); - }), - (e.triggerReady = function () { - (this.isReady_ = !0), - this.setTimeout(function () { - var e = this.readyQueue_; - (this.readyQueue_ = []), - e && - 0 < e.length && - e.forEach(function (e) { - e.call(this); - }, this), - this.trigger("ready"); - }, 1); - }), - (e.$ = function (e, t) { - return Te(e, t || this.contentEl()); - }), - (e.$$ = function (e, t) { - return Se(e, t || this.contentEl()); - }), - (e.hasClass = function (e) { - return ee(this.el_, e); - }), - (e.addClass = function (e) { - te(this.el_, e); - }), - (e.removeClass = function (e) { - ie(this.el_, e); - }), - (e.toggleClass = function (e, t) { - ne(this.el_, e, t); - }), - (e.show = function () { - this.removeClass("vjs-hidden"); - }), - (e.hide = function () { - this.addClass("vjs-hidden"); - }), - (e.lockShowing = function () { - this.addClass("vjs-lock-showing"); - }), - (e.unlockShowing = function () { - this.removeClass("vjs-lock-showing"); - }), - (e.getAttribute = function (e) { - return se(this.el_, e); - }), - (e.setAttribute = function (e, t) { - oe(this.el_, e, t); - }), - (e.removeAttribute = function (e) { - ue(this.el_, e); - }), - (e.width = function (e, t) { - return this.dimension("width", e, t); - }), - (e.height = function (e, t) { - return this.dimension("height", e, t); - }), - (e.dimensions = function (e, t) { - this.width(e, !0), this.height(t); - }), - (e.dimension = function (e, t, i) { - if (void 0 !== t) - return ( - -1 !== ("" + (t = null === t || t != t ? 0 : t)).indexOf("%") || - -1 !== ("" + t).indexOf("px") - ? (this.el_.style[e] = t) - : (this.el_.style[e] = "auto" === t ? "" : t + "px"), - void (i || this.trigger("componentresize")) - ); - if (!this.el_) return 0; - (t = this.el_.style[e]), (i = t.indexOf("px")); - return -1 !== i - ? parseInt(t.slice(0, i), 10) - : parseInt(this.el_["offset" + ut(e)], 10); - }), - (e.currentDimension = function (e) { - var t = 0; - if ("width" !== e && "height" !== e) - throw new Error( - "currentDimension only accepts width or height value", - ); - return ( - (t = w(this.el_, e)), - (0 !== (t = parseFloat(t)) && !isNaN(t)) || - ((e = "offset" + ut(e)), (t = this.el_[e])), - t - ); - }), - (e.currentDimensions = function () { - return { - width: this.currentDimension("width"), - height: this.currentDimension("height"), - }; - }), - (e.currentWidth = function () { - return this.currentDimension("width"); - }), - (e.currentHeight = function () { - return this.currentDimension("height"); - }), - (e.focus = function () { - this.el_.focus(); - }), - (e.blur = function () { - this.el_.blur(); - }), - (e.handleKeyDown = function (e) { - this.player_ && - (ht.isEventKey(e, "Tab") || e.stopPropagation(), - this.player_.handleKeyDown(e)); - }), - (e.handleKeyPress = function (e) { - this.handleKeyDown(e); - }), - (e.emitTapEvents = function () { - var i, - t = 0, - n = null; - this.on("touchstart", function (e) { - 1 === e.touches.length && - ((n = { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY }), - (t = window.performance.now()), - (i = !0)); - }), - this.on("touchmove", function (e) { - var t; - 1 < e.touches.length - ? (i = !1) - : n && - ((t = e.touches[0].pageX - n.pageX), - (e = e.touches[0].pageY - n.pageY), - 10 < Math.sqrt(t * t + e * e) && (i = !1)); - }); - function e() { - i = !1; - } - this.on("touchleave", e), - this.on("touchcancel", e), - this.on("touchend", function (e) { - !(n = null) === i && - window.performance.now() - t < 200 && - (e.preventDefault(), this.trigger("tap")); - }); - }), - (e.enableTouchActivity = function () { - var t, i, e; - this.player() && - this.player().reportUserActivity && - ((t = Ve(this.player(), this.player().reportUserActivity)), - this.on("touchstart", function () { - t(), this.clearInterval(i), (i = this.setInterval(t, 250)); - }), - (e = function (e) { - t(), this.clearInterval(i); - }), - this.on("touchmove", t), - this.on("touchend", e), - this.on("touchcancel", e)); - }), - (e.setTimeout = function (e, t) { - var i, - n = this; - return ( - (e = Ve(this, e)), - this.clearTimersOnDispose_(), - (i = window.setTimeout(function () { - n.setTimeoutIds_.has(i) && n.setTimeoutIds_.delete(i), e(); - }, t)), - this.setTimeoutIds_.add(i), - i - ); - }), - (e.clearTimeout = function (e) { - return ( - this.setTimeoutIds_.has(e) && - (this.setTimeoutIds_.delete(e), window.clearTimeout(e)), - e - ); - }), - (e.setInterval = function (e, t) { - (e = Ve(this, e)), this.clearTimersOnDispose_(); - t = window.setInterval(e, t); - return this.setIntervalIds_.add(t), t; - }), - (e.clearInterval = function (e) { - return ( - this.setIntervalIds_.has(e) && - (this.setIntervalIds_.delete(e), window.clearInterval(e)), - e - ); - }), - (e.requestAnimationFrame = function (e) { - var t, - i = this; - return this.supportsRaf_ - ? (this.clearTimersOnDispose_(), - (e = Ve(this, e)), - (t = window.requestAnimationFrame(function () { - i.rafIds_.has(t) && i.rafIds_.delete(t), e(); - })), - this.rafIds_.add(t), - t) - : this.setTimeout(e, 1e3 / 60); - }), - (e.requestNamedAnimationFrame = function (e, t) { - var i = this; - if (!this.namedRafs_.has(e)) { - this.clearTimersOnDispose_(), (t = Ve(this, t)); - var n = this.requestAnimationFrame(function () { - t(), i.namedRafs_.has(e) && i.namedRafs_.delete(e); - }); - return this.namedRafs_.set(e, n), e; - } - }), - (e.cancelNamedAnimationFrame = function (e) { - this.namedRafs_.has(e) && - (this.cancelAnimationFrame(this.namedRafs_.get(e)), - this.namedRafs_.delete(e)); - }), - (e.cancelAnimationFrame = function (e) { - return this.supportsRaf_ - ? (this.rafIds_.has(e) && - (this.rafIds_.delete(e), window.cancelAnimationFrame(e)), - e) - : this.clearTimeout(e); - }), - (e.clearTimersOnDispose_ = function () { - var n = this; - this.clearingTimersOnDispose_ || - ((this.clearingTimersOnDispose_ = !0), - this.one("dispose", function () { - [ - ["namedRafs_", "cancelNamedAnimationFrame"], - ["rafIds_", "cancelAnimationFrame"], - ["setTimeoutIds_", "clearTimeout"], - ["setIntervalIds_", "clearInterval"], - ].forEach(function (e) { - var t = e[0], - i = e[1]; - n[t].forEach(function (e, t) { - return n[i](t); - }); - }), - (n.clearingTimersOnDispose_ = !1); - })); - }), - (s.registerComponent = function (e, t) { - if ("string" != typeof e || !e) - throw new Error( - 'Illegal component name, "' + e + '"; must be a non-empty string.', - ); - var i = s.getComponent("Tech"), - n = i && i.isTech(t), - i = s === t || s.prototype.isPrototypeOf(t.prototype); - if (n || !i) { - var r = n - ? "techs must be registered using Tech.registerTech()" - : "must be a Component subclass"; - throw new Error('Illegal component, "' + e + '"; ' + r + "."); - } - (e = ut(e)), s.components_ || (s.components_ = {}); - r = s.getComponent("Player"); - if ("Player" === e && r && r.players) { - var a = r.players, - r = Object.keys(a); - if ( - a && - 0 < r.length && - r - .map(function (e) { - return a[e]; - }) - .every(Boolean) - ) - throw new Error( - "Can not register Player component after player has been created.", - ); - } - return (s.components_[e] = t), (s.components_[ot(e)] = t); - }), - (s.getComponent = function (e) { - if (e && s.components_) return s.components_[e]; - }), - s - ); - })(); - (pt.prototype.supportsRaf_ = - "function" == typeof window.requestAnimationFrame && - "function" == typeof window.cancelAnimationFrame), - pt.registerComponent("Component", pt); - var ft = function (e) { - if (void 0 === e) - throw new ReferenceError( - "this hasn't been initialised - super() hasn't been called", - ); - return e; - }; - var mt = function (e, t) { - (e.prototype = Object.create(t.prototype)), - ((e.prototype.constructor = e).__proto__ = t); - }; - function gt(e, t, i, n) { - return ( - (function (e, t, i) { - if ("number" != typeof t || t < 0 || i < t) - throw new Error( - "Failed to execute '" + - e + - "' on 'TimeRanges': The index provided (" + - t + - ") is non-numeric or out of bounds (0-" + - i + - ").", - ); - })(e, n, i.length - 1), - i[n][t] - ); - } - function yt(e) { - var t = - void 0 === e || 0 === e.length - ? { - length: 0, - start: function () { - throw new Error("This TimeRanges object is empty"); - }, - end: function () { - throw new Error("This TimeRanges object is empty"); - }, - } - : { - length: e.length, - start: gt.bind(null, "start", 0, e), - end: gt.bind(null, "end", 1, e), - }; - return ( - window.Symbol && - window.Symbol.iterator && - (t[window.Symbol.iterator] = function () { - return (e || []).values(); - }), - t - ); - } - function vt(e, t) { - return Array.isArray(e) - ? yt(e) - : void 0 === e || void 0 === t - ? yt() - : yt([[e, t]]); - } - function _t(e, t) { - var i, - n, - r = 0; - if (!t) return 0; - (e && e.length) || (e = vt(0, 0)); - for (var a = 0; a < e.length; a++) - (i = e.start(a)), (r += (n = t < (n = e.end(a)) ? t : n) - i); - return r / t; - } - function bt(e) { - if (e instanceof bt) return e; - "number" == typeof e - ? (this.code = e) - : "string" == typeof e - ? (this.message = e) - : T(e) && - ("number" == typeof e.code && (this.code = e.code), b(this, e)), - this.message || (this.message = bt.defaultMessages[this.code] || ""); - } - (bt.prototype.code = 0), - (bt.prototype.message = ""), - (bt.prototype.status = null), - (bt.errorTypes = [ - "MEDIA_ERR_CUSTOM", - "MEDIA_ERR_ABORTED", - "MEDIA_ERR_NETWORK", - "MEDIA_ERR_DECODE", - "MEDIA_ERR_SRC_NOT_SUPPORTED", - "MEDIA_ERR_ENCRYPTED", - ]), - (bt.defaultMessages = { - 1: "You aborted the media playback", - 2: "A network error caused the media download to fail part-way.", - 3: "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", - 4: "The media could not be loaded, either because the server or network failed or because the format is not supported.", - 5: "The media is encrypted and we do not have the keys to decrypt it.", - }); - for (var Tt = 0; Tt < bt.errorTypes.length; Tt++) - (bt[bt.errorTypes[Tt]] = Tt), (bt.prototype[bt.errorTypes[Tt]] = Tt); - var St = function (e, t) { - var i, - n = null; - try { - i = JSON.parse(e, t); - } catch (e) { - n = e; - } - return [n, i]; - }; - function wt(e) { - return null != e && "function" == typeof e.then; - } - function Et(e) { - wt(e) && e.then(null, function (e) {}); - } - function kt(n) { - return [ - "kind", - "label", - "language", - "id", - "inBandMetadataTrackDispatchType", - "mode", - "src", - ].reduce( - function (e, t, i) { - return n[t] && (e[t] = n[t]), e; - }, - { - cues: - n.cues && - Array.prototype.map.call(n.cues, function (e) { - return { - startTime: e.startTime, - endTime: e.endTime, - text: e.text, - id: e.id, - }; - }), - }, - ); - } - var Ct = function (e) { - var t = e.$$("track"), - i = Array.prototype.map.call(t, function (e) { - return e.track; - }); - return Array.prototype.map - .call(t, function (e) { - var t = kt(e.track); - return e.src && (t.src = e.src), t; - }) - .concat( - Array.prototype.filter - .call(e.textTracks(), function (e) { - return -1 === i.indexOf(e); - }) - .map(kt), - ); - }, - It = function (e, i) { - return ( - e.forEach(function (e) { - var t = i.addRemoteTextTrack(e).track; - !e.src && - e.cues && - e.cues.forEach(function (e) { - return t.addCue(e); - }); - }), - i.textTracks() - ); - }, - xt = "vjs-modal-dialog", - At = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - (i.handleKeyDown_ = function (e) { - return i.handleKeyDown(e); - }), - (i.close_ = function (e) { - return i.close(e); - }), - (i.opened_ = i.hasBeenOpened_ = i.hasBeenFilled_ = !1), - i.closeable(!i.options_.uncloseable), - i.content(i.options_.content), - (i.contentEl_ = $( - "div", - { className: xt + "-content" }, - { role: "document" }, - )), - (i.descEl_ = $("p", { - className: xt + "-description vjs-control-text", - id: i.el().getAttribute("aria-describedby"), - })), - J(i.descEl_, i.description()), - i.el_.appendChild(i.descEl_), - i.el_.appendChild(i.contentEl_), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - return n.prototype.createEl.call( - this, - "div", - { className: this.buildCSSClass(), tabIndex: -1 }, - { - "aria-describedby": this.id() + "_description", - "aria-hidden": "true", - "aria-label": this.label(), - role: "dialog", - }, - ); - }), - (t.dispose = function () { - (this.contentEl_ = null), - (this.descEl_ = null), - (this.previouslyActiveEl_ = null), - n.prototype.dispose.call(this); - }), - (t.buildCSSClass = function () { - return xt + " vjs-hidden " + n.prototype.buildCSSClass.call(this); - }), - (t.label = function () { - return this.localize(this.options_.label || "Modal Window"); - }), - (t.description = function () { - var e = - this.options_.description || - this.localize("This is a modal window."); - return ( - this.closeable() && - (e += - " " + - this.localize( - "This modal can be closed by pressing the Escape key or activating the close button.", - )), - e - ); - }), - (t.open = function () { - var e; - this.opened_ || - ((e = this.player()), - this.trigger("beforemodalopen"), - (this.opened_ = !0), - (!this.options_.fillAlways && - (this.hasBeenOpened_ || this.hasBeenFilled_)) || - this.fill(), - (this.wasPlaying_ = !e.paused()), - this.options_.pauseOnOpen && this.wasPlaying_ && e.pause(), - this.on("keydown", this.handleKeyDown_), - (this.hadControls_ = e.controls()), - e.controls(!1), - this.show(), - this.conditionalFocus_(), - this.el().setAttribute("aria-hidden", "false"), - this.trigger("modalopen"), - (this.hasBeenOpened_ = !0)); - }), - (t.opened = function (e) { - return ( - "boolean" == typeof e && this[e ? "open" : "close"](), this.opened_ - ); - }), - (t.close = function () { - var e; - this.opened_ && - ((e = this.player()), - this.trigger("beforemodalclose"), - (this.opened_ = !1), - this.wasPlaying_ && this.options_.pauseOnOpen && e.play(), - this.off("keydown", this.handleKeyDown_), - this.hadControls_ && e.controls(!0), - this.hide(), - this.el().setAttribute("aria-hidden", "true"), - this.trigger("modalclose"), - this.conditionalBlur_(), - this.options_.temporary && this.dispose()); - }), - (t.closeable = function (e) { - var t, i; - return ( - "boolean" == typeof e && - ((t = this.closeable_ = !!e), - (i = this.getChild("closeButton")), - t && - !i && - ((e = this.contentEl_), - (this.contentEl_ = this.el_), - (i = this.addChild("closeButton", { - controlText: "Close Modal Dialog", - })), - (this.contentEl_ = e), - this.on(i, "close", this.close_)), - !t && - i && - (this.off(i, "close", this.close_), - this.removeChild(i), - i.dispose())), - this.closeable_ - ); - }), - (t.fill = function () { - this.fillWith(this.content()); - }), - (t.fillWith = function (e) { - var t = this.contentEl(), - i = t.parentNode, - n = t.nextSibling; - this.trigger("beforemodalfill"), - (this.hasBeenFilled_ = !0), - i.removeChild(t), - this.empty(), - ve(t, e), - this.trigger("modalfill"), - n ? i.insertBefore(t, n) : i.appendChild(t); - t = this.getChild("closeButton"); - t && i.appendChild(t.el_); - }), - (t.empty = function () { - this.trigger("beforemodalempty"), - me(this.contentEl()), - this.trigger("modalempty"); - }), - (t.content = function (e) { - return "undefined" != typeof e && (this.content_ = e), this.content_; - }), - (t.conditionalFocus_ = function () { - var e = document.activeElement, - t = this.player_.el_; - (this.previouslyActiveEl_ = null), - (!t.contains(e) && t !== e) || - ((this.previouslyActiveEl_ = e), this.focus()); - }), - (t.conditionalBlur_ = function () { - this.previouslyActiveEl_ && - (this.previouslyActiveEl_.focus(), - (this.previouslyActiveEl_ = null)); - }), - (t.handleKeyDown = function (e) { - if ( - (e.stopPropagation(), - ht.isEventKey(e, "Escape") && this.closeable()) - ) - return e.preventDefault(), void this.close(); - if (ht.isEventKey(e, "Tab")) { - for ( - var t, - i = this.focusableEls_(), - n = this.el_.querySelector(":focus"), - r = 0; - r < i.length; - r++ - ) - if (n === i[r]) { - t = r; - break; - } - document.activeElement === this.el_ && (t = 0), - e.shiftKey && 0 === t - ? (i[i.length - 1].focus(), e.preventDefault()) - : e.shiftKey || - t !== i.length - 1 || - (i[0].focus(), e.preventDefault()); - } - }), - (t.focusableEls_ = function () { - var e = this.el_.querySelectorAll("*"); - return Array.prototype.filter.call(e, function (e) { - return ( - ((e instanceof window.HTMLAnchorElement || - e instanceof window.HTMLAreaElement) && - e.hasAttribute("href")) || - ((e instanceof window.HTMLInputElement || - e instanceof window.HTMLSelectElement || - e instanceof window.HTMLTextAreaElement || - e instanceof window.HTMLButtonElement) && - !e.hasAttribute("disabled")) || - e instanceof window.HTMLIFrameElement || - e instanceof window.HTMLObjectElement || - e instanceof window.HTMLEmbedElement || - (e.hasAttribute("tabindex") && - -1 !== e.getAttribute("tabindex")) || - e.hasAttribute("contenteditable") - ); - }); - }), - e - ); - })(pt); - (At.prototype.options_ = { pauseOnOpen: !0, temporary: !0 }), - pt.registerComponent("ModalDialog", At); - var Pt, - Lt = (function (n) { - function e(e) { - var t; - void 0 === e && (e = []), - ((t = n.call(this) || this).tracks_ = []), - Object.defineProperty(ft(t), "length", { - get: function () { - return this.tracks_.length; - }, - }); - for (var i = 0; i < e.length; i++) t.addTrack(e[i]); - return t; - } - mt(e, n); - var t = e.prototype; - return ( - (t.addTrack = function (e) { - var t = this, - i = this.tracks_.length; - "" + i in this || - Object.defineProperty(this, i, { - get: function () { - return this.tracks_[i]; - }, - }), - -1 === this.tracks_.indexOf(e) && - (this.tracks_.push(e), - this.trigger({ track: e, type: "addtrack", target: this })), - (e.labelchange_ = function () { - t.trigger({ track: e, type: "labelchange", target: t }); - }), - it(e) && e.addEventListener("labelchange", e.labelchange_); - }), - (t.removeTrack = function (e) { - for (var t, i = 0, n = this.length; i < n; i++) - if (this[i] === e) { - (t = this[i]).off && t.off(), this.tracks_.splice(i, 1); - break; - } - t && this.trigger({ track: t, type: "removetrack", target: this }); - }), - (t.getTrackById = function (e) { - for (var t = null, i = 0, n = this.length; i < n; i++) { - var r = this[i]; - if (r.id === e) { - t = r; - break; - } - } - return t; - }), - e - ); - })(ze); - for (Pt in ((Lt.prototype.allowedEvents_ = { - change: "change", - addtrack: "addtrack", - removetrack: "removetrack", - labelchange: "labelchange", - }), - Lt.prototype.allowedEvents_)) - Lt.prototype["on" + Pt] = null; - function Dt(e, t) { - for (var i = 0; i < e.length; i++) - Object.keys(e[i]).length && t.id !== e[i].id && (e[i].enabled = !1); - } - function Ot(e, t) { - for (var i = 0; i < e.length; i++) - Object.keys(e[i]).length && t.id !== e[i].id && (e[i].selected = !1); - } - function Mt(e) { - var t = [ - "protocol", - "hostname", - "port", - "pathname", - "search", - "hash", - "host", - ], - i = document.createElement("a"); - i.href = e; - for (var n = {}, r = 0; r < t.length; r++) n[t[r]] = i[t[r]]; - return ( - "http:" === n.protocol && (n.host = n.host.replace(/:80$/, "")), - "https:" === n.protocol && (n.host = n.host.replace(/:443$/, "")), - n.protocol || (n.protocol = window.location.protocol), - n.host || (n.host = window.location.host), - n - ); - } - function Rt(e) { - var t; - return ( - e.match(/^https?:\/\//) || - (((t = document.createElement("a")).href = e), (e = t.href)), - e - ); - } - function Nt(e) { - if ("string" == typeof e) { - e = - /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/.exec( - e, - ); - if (e) return e.pop().toLowerCase(); - } - return ""; - } - function Ut(e, t) { - return ( - void 0 === t && (t = window.location), - (":" === (e = Mt(e)).protocol ? t : e).protocol + e.host !== - t.protocol + t.host - ); - } - var Bt = (function (n) { - function e(e) { - for (var t, i = (e = void 0 === e ? [] : e).length - 1; 0 <= i; i--) - if (e[i].enabled) { - Dt(e, e[i]); - break; - } - return ((t = n.call(this, e) || this).changing_ = !1), t; - } - mt(e, n); - var t = e.prototype; - return ( - (t.addTrack = function (e) { - var t = this; - e.enabled && Dt(this, e), - n.prototype.addTrack.call(this, e), - e.addEventListener && - ((e.enabledChange_ = function () { - t.changing_ || - ((t.changing_ = !0), - Dt(t, e), - (t.changing_ = !1), - t.trigger("change")); - }), - e.addEventListener("enabledchange", e.enabledChange_)); - }), - (t.removeTrack = function (e) { - n.prototype.removeTrack.call(this, e), - e.removeEventListener && - e.enabledChange_ && - (e.removeEventListener("enabledchange", e.enabledChange_), - (e.enabledChange_ = null)); - }), - e - ); - })(Lt), - Ft = (function (n) { - function e(e) { - for (var t, i = (e = void 0 === e ? [] : e).length - 1; 0 <= i; i--) - if (e[i].selected) { - Ot(e, e[i]); - break; - } - return ( - ((t = n.call(this, e) || this).changing_ = !1), - Object.defineProperty(ft(t), "selectedIndex", { - get: function () { - for (var e = 0; e < this.length; e++) - if (this[e].selected) return e; - return -1; - }, - set: function () {}, - }), - t - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.addTrack = function (e) { - var t = this; - e.selected && Ot(this, e), - n.prototype.addTrack.call(this, e), - e.addEventListener && - ((e.selectedChange_ = function () { - t.changing_ || - ((t.changing_ = !0), - Ot(t, e), - (t.changing_ = !1), - t.trigger("change")); - }), - e.addEventListener("selectedchange", e.selectedChange_)); - }), - (t.removeTrack = function (e) { - n.prototype.removeTrack.call(this, e), - e.removeEventListener && - e.selectedChange_ && - (e.removeEventListener("selectedchange", e.selectedChange_), - (e.selectedChange_ = null)); - }), - e - ); - })(Lt), - k = (function (i) { - function e() { - return i.apply(this, arguments) || this; - } - mt(e, i); - var t = e.prototype; - return ( - (t.addTrack = function (e) { - var t = this; - i.prototype.addTrack.call(this, e), - this.queueChange_ || - (this.queueChange_ = function () { - return t.queueTrigger("change"); - }), - this.triggerSelectedlanguagechange || - (this.triggerSelectedlanguagechange_ = function () { - return t.trigger("selectedlanguagechange"); - }), - e.addEventListener("modechange", this.queueChange_); - -1 === ["metadata", "chapters"].indexOf(e.kind) && - e.addEventListener( - "modechange", - this.triggerSelectedlanguagechange_, - ); - }), - (t.removeTrack = function (e) { - i.prototype.removeTrack.call(this, e), - e.removeEventListener && - (this.queueChange_ && - e.removeEventListener("modechange", this.queueChange_), - this.selectedlanguagechange_ && - e.removeEventListener( - "modechange", - this.triggerSelectedlanguagechange_, - )); - }), - e - ); - })(Lt), - jt = (function () { - function e(e) { - void 0 === e && (e = []), - (this.trackElements_ = []), - Object.defineProperty(this, "length", { - get: function () { - return this.trackElements_.length; - }, - }); - for (var t = 0, i = e.length; t < i; t++) this.addTrackElement_(e[t]); - } - var t = e.prototype; - return ( - (t.addTrackElement_ = function (e) { - var t = this.trackElements_.length; - "" + t in this || - Object.defineProperty(this, t, { - get: function () { - return this.trackElements_[t]; - }, - }), - -1 === this.trackElements_.indexOf(e) && - this.trackElements_.push(e); - }), - (t.getTrackElementByTrack_ = function (e) { - for (var t, i = 0, n = this.trackElements_.length; i < n; i++) - if (e === this.trackElements_[i].track) { - t = this.trackElements_[i]; - break; - } - return t; - }), - (t.removeTrackElement_ = function (e) { - for (var t = 0, i = this.trackElements_.length; t < i; t++) - if (e === this.trackElements_[t]) { - this.trackElements_[t].track && - "function" == typeof this.trackElements_[t].track.off && - this.trackElements_[t].track.off(), - "function" == typeof this.trackElements_[t].off && - this.trackElements_[t].off(), - this.trackElements_.splice(t, 1); - break; - } - }), - e - ); - })(), - Ht = (function () { - function t(e) { - t.prototype.setCues_.call(this, e), - Object.defineProperty(this, "length", { - get: function () { - return this.length_; - }, - }); - } - var e = t.prototype; - return ( - (e.setCues_ = function (e) { - var t = this.length || 0, - i = 0, - n = e.length; - (this.cues_ = e), (this.length_ = e.length); - function r(e) { - "" + e in this || - Object.defineProperty(this, "" + e, { - get: function () { - return this.cues_[e]; - }, - }); - } - if (t < n) for (i = t; i < n; i++) r.call(this, i); - }), - (e.getCueById = function (e) { - for (var t = null, i = 0, n = this.length; i < n; i++) { - var r = this[i]; - if (r.id === e) { - t = r; - break; - } - } - return t; - }), - t - ); - })(), - qt = { - alternative: "alternative", - captions: "captions", - main: "main", - sign: "sign", - subtitles: "subtitles", - commentary: "commentary", - }, - Vt = { - alternative: "alternative", - descriptions: "descriptions", - main: "main", - "main-desc": "main-desc", - translation: "translation", - commentary: "commentary", - }, - Wt = { - subtitles: "subtitles", - captions: "captions", - descriptions: "descriptions", - chapters: "chapters", - metadata: "metadata", - }, - Gt = { disabled: "disabled", hidden: "hidden", showing: "showing" }, - C = (function (a) { - function e(e) { - void 0 === e && (e = {}); - var t, - i = a.call(this) || this, - n = { - id: e.id || "vjs_track_" + Pe++, - kind: e.kind || "", - language: e.language || "", - }, - r = e.label || ""; - for (t in n) - !(function (e) { - Object.defineProperty(ft(i), e, { - get: function () { - return n[e]; - }, - set: function () {}, - }); - })(t); - return ( - Object.defineProperty(ft(i), "label", { - get: function () { - return r; - }, - set: function (e) { - e !== r && ((r = e), this.trigger("labelchange")); - }, - }), - i - ); - } - return mt(e, a), e; - })(ze), - zt = Object.freeze({ - __proto__: null, - parseUrl: Mt, - getAbsoluteURL: Rt, - getFileExtension: Nt, - isCrossOrigin: Ut, - }), - Xt = - "undefined" != typeof window - ? window - : "undefined" != typeof f - ? f - : "undefined" != typeof self - ? self - : {}, - Kt = Xt, - Yt = function (e) { - if (!e) return !1; - var t = Qt.call(e); - return ( - "[object Function]" === t || - ("function" == typeof e && "[object RegExp]" !== t) || - ("undefined" != typeof window && - (e === window.setTimeout || - e === window.alert || - e === window.confirm || - e === window.prompt)) - ); - }, - Qt = Object.prototype.toString; - ei.httpHandler = function (n, r) { - return ( - void 0 === r && (r = !1), - function (e, t, i) { - if (e) n(e); - else if (400 <= t.statusCode && t.statusCode <= 599) { - e = i; - if (r) - if (Kt.TextDecoder) { - t = (function (e) { - void 0 === e && (e = ""); - return e - .toLowerCase() - .split(";") - .reduce(function (e, t) { - var i = t.split("="), - t = i[0], - i = i[1]; - return "charset" === t.trim() ? i.trim() : e; - }, "utf-8"); - })(t.headers && t.headers["content-type"]); - try { - e = new TextDecoder(t).decode(i); - } catch (e) {} - } else e = String.fromCharCode.apply(null, new Uint8Array(i)); - n({ cause: e }); - } else n(null, i); - } - ); - }; - /** - * @license - * slighly modified parse-headers 2.0.2 - * Copyright (c) 2014 David Björklund - * Available under the MIT license - * - */ - var $t = function (e) { - var n = {}; - return ( - e && - e - .trim() - .split("\n") - .forEach(function (e) { - var t = e.indexOf(":"), - i = e.slice(0, t).trim().toLowerCase(), - t = e.slice(t + 1).trim(); - "undefined" == typeof n[i] - ? (n[i] = t) - : Array.isArray(n[i]) - ? n[i].push(t) - : (n[i] = [n[i], t]); - }), - n - ); - }, - Jt = ei, - I = ei; - function Zt(e, t, i) { - var n = e; - return ( - Yt(t) - ? ((i = t), "string" == typeof e && (n = { uri: e })) - : (n = g({}, t, { uri: e })), - (n.callback = i), - n - ); - } - function ei(e, t, i) { - return ti((t = Zt(e, t, i))); - } - function ti(n) { - if ("undefined" == typeof n.callback) - throw new Error("callback argument missing"); - var r = !1, - a = function (e, t, i) { - r || ((r = !0), n.callback(e, t, i)); - }; - function s() { - var e = void 0, - e = - l.response || - l.responseText || - (function (e) { - try { - if ("document" === e.responseType) return e.responseXML; - var t = - e.responseXML && - "parsererror" === e.responseXML.documentElement.nodeName; - if ("" === e.responseType && !t) return e.responseXML; - } catch (e) {} - return null; - })(l); - if (m) - try { - e = JSON.parse(e); - } catch (e) {} - return e; - } - function t(e) { - return ( - clearTimeout(u), - ((e = !(e instanceof Error) - ? new Error("" + (e || "Unknown XMLHttpRequest Error")) - : e).statusCode = 0), - a(e, g) - ); - } - function e() { - if (!o) { - clearTimeout(u); - var e = - n.useXDR && void 0 === l.status - ? 200 - : 1223 === l.status - ? 204 - : l.status, - t = g, - i = null; - return ( - 0 !== e - ? ((t = { - body: s(), - statusCode: e, - method: d, - headers: {}, - url: c, - rawRequest: l, - }), - l.getAllResponseHeaders && - (t.headers = $t(l.getAllResponseHeaders()))) - : (i = new Error("Internal XMLHttpRequest Error")), - a(i, t, t.body) - ); - } - } - var i, - o, - u, - l = n.xhr || null, - c = ((l = - l || - new (n.cors || n.useXDR - ? ei.XDomainRequest - : ei.XMLHttpRequest)()).url = n.uri || n.url), - d = (l.method = n.method || "GET"), - h = n.body || n.data, - p = (l.headers = n.headers || {}), - f = !!n.sync, - m = !1, - g = { - body: void 0, - headers: {}, - statusCode: 0, - method: d, - url: c, - rawRequest: l, - }; - if ( - ("json" in n && - !1 !== n.json && - ((m = !0), - p.accept || p.Accept || (p.Accept = "application/json"), - "GET" !== d && - "HEAD" !== d && - (p["content-type"] || - p["Content-Type"] || - (p["Content-Type"] = "application/json"), - (h = JSON.stringify(!0 === n.json ? h : n.json)))), - (l.onreadystatechange = function () { - 4 === l.readyState && setTimeout(e, 0); - }), - (l.onload = e), - (l.onerror = t), - (l.onprogress = function () {}), - (l.onabort = function () { - o = !0; - }), - (l.ontimeout = t), - l.open(d, c, !f, n.username, n.password), - f || (l.withCredentials = !!n.withCredentials), - !f && - 0 < n.timeout && - (u = setTimeout(function () { - var e; - o || - ((o = !0), - l.abort("timeout"), - ((e = new Error("XMLHttpRequest timeout")).code = "ETIMEDOUT"), - t(e)); - }, n.timeout)), - l.setRequestHeader) - ) - for (i in p) p.hasOwnProperty(i) && l.setRequestHeader(i, p[i]); - else if ( - n.headers && - !(function (e) { - for (var t in e) if (e.hasOwnProperty(t)) return; - return 1; - })(n.headers) - ) - throw new Error("Headers cannot be set on an XDomainRequest object"); - return ( - "responseType" in n && (l.responseType = n.responseType), - "beforeSend" in n && "function" == typeof n.beforeSend && n.beforeSend(l), - l.send(h || null), - l - ); - } - (ei.XMLHttpRequest = Kt.XMLHttpRequest || function () {}), - (ei.XDomainRequest = - "withCredentials" in new ei.XMLHttpRequest() - ? ei.XMLHttpRequest - : Kt.XDomainRequest), - (function (e, t) { - for (var i = 0; i < e.length; i++) t(e[i]); - })(["get", "put", "post", "patch", "head", "delete"], function (n) { - ei["delete" === n ? "del" : n] = function (e, t, i) { - return ((t = Zt(e, t, i)).method = n.toUpperCase()), ti(t); - }; - }), - (Jt.default = I); - function ii(e, t) { - var i = new window.WebVTT.Parser( - window, - window.vttjs, - window.WebVTT.StringDecoder(), - ), - n = []; - (i.oncue = function (e) { - t.addCue(e); - }), - (i.onparsingerror = function (e) { - n.push(e); - }), - (i.onflush = function () { - t.trigger({ type: "loadeddata", target: t }); - }), - i.parse(e), - 0 < n.length && - (window.console && - window.console.groupCollapsed && - window.console.groupCollapsed( - "Text Track parsing errors for " + t.src, - ), - n.forEach(function (e) { - return h.error(e); - }), - window.console && window.console.groupEnd && window.console.groupEnd()), - i.flush(); - } - function ni(e, n) { - var t = { uri: e }; - (e = Ut(e)) && (t.cors = e), - (e = "use-credentials" === n.tech_.crossOrigin()) && - (t.withCredentials = e), - Jt( - t, - Ve(this, function (e, t, i) { - return e - ? h.error(e, t) - : ((n.loaded_ = !0), - void ("function" != typeof window.WebVTT - ? n.tech_ && - n.tech_.any(["vttjsloaded", "vttjserror"], function (e) { - return "vttjserror" !== e.type - ? ii(i, n) - : void h.error( - "vttjs failed to load, stopping trying to process " + - n.src, - ); - }) - : ii(i, n))); - }), - ); - } - var ri = (function (a) { - function e(e) { - var t; - if (!(e = void 0 === e ? {} : e).tech) - throw new Error("A tech was not provided."); - var e = lt(e, { - kind: Wt[e.kind] || "subtitles", - language: e.language || e.srclang || "", - }), - i = Gt[e.mode] || "disabled", - n = e.default; - ("metadata" !== e.kind && "chapters" !== e.kind) || (i = "hidden"), - ((t = a.call(this, e) || this).tech_ = e.tech), - (t.cues_ = []), - (t.activeCues_ = []), - (t.preload_ = !1 !== t.tech_.preloadTextTracks); - var r = new Ht(t.cues_), - s = new Ht(t.activeCues_), - o = !1; - t.timeupdateHandler = Ve(ft(t), function () { - this.tech_.isDisposed() || - (this.tech_.isReady_ && - ((this.activeCues = this.activeCues), - o && (this.trigger("cuechange"), (o = !1))), - (this.rvf_ = this.tech_.requestVideoFrameCallback( - this.timeupdateHandler, - ))); - }); - return ( - t.tech_.one("dispose", function () { - t.stopTracking(); - }), - "disabled" !== i && t.startTracking(), - Object.defineProperties(ft(t), { - default: { - get: function () { - return n; - }, - set: function () {}, - }, - mode: { - get: function () { - return i; - }, - set: function (e) { - Gt[e] && - i !== e && - ((i = e), - this.preload_ || - "disabled" === i || - 0 !== this.cues.length || - ni(this.src, this), - this.stopTracking(), - "disabled" !== i && this.startTracking(), - this.trigger("modechange")); - }, - }, - cues: { - get: function () { - return this.loaded_ ? r : null; - }, - set: function () {}, - }, - activeCues: { - get: function () { - if (!this.loaded_) return null; - if (0 === this.cues.length) return s; - for ( - var e = this.tech_.currentTime(), - t = [], - i = 0, - n = this.cues.length; - i < n; - i++ - ) { - var r = this.cues[i]; - ((r.startTime <= e && r.endTime >= e) || - (r.startTime === r.endTime && - r.startTime <= e && - r.startTime + 0.5 >= e)) && - t.push(r); - } - if (((o = !1), t.length !== this.activeCues_.length)) o = !0; - else - for (var a = 0; a < t.length; a++) - -1 === this.activeCues_.indexOf(t[a]) && (o = !0); - return (this.activeCues_ = t), s.setCues_(this.activeCues_), s; - }, - set: function () {}, - }, - }), - e.src - ? ((t.src = e.src), - t.preload_ || (t.loaded_ = !0), - (t.preload_ || ("subtitles" !== e.kind && "captions" !== e.kind)) && - ni(t.src, ft(t))) - : (t.loaded_ = !0), - t - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.startTracking = function () { - this.rvf_ = this.tech_.requestVideoFrameCallback( - this.timeupdateHandler, - ); - }), - (t.stopTracking = function () { - this.rvf_ && - (this.tech_.cancelVideoFrameCallback(this.rvf_), - (this.rvf_ = void 0)); - }), - (t.addCue = function (e) { - var t = e; - if (window.vttjs && !(e instanceof window.vttjs.VTTCue)) { - for (var i in ((t = new window.vttjs.VTTCue( - e.startTime, - e.endTime, - e.text, - )), - e)) - i in t || (t[i] = e[i]); - (t.id = e.id), (t.originalCue_ = e); - } - for (var n = this.tech_.textTracks(), r = 0; r < n.length; r++) - n[r] !== this && n[r].removeCue(t); - this.cues_.push(t), this.cues.setCues_(this.cues_); - }), - (t.removeCue = function (e) { - for (var t = this.cues_.length; t--; ) { - var i = this.cues_[t]; - if (i === e || (i.originalCue_ && i.originalCue_ === e)) { - this.cues_.splice(t, 1), this.cues.setCues_(this.cues_); - break; - } - } - }), - e - ); - })(C); - ri.prototype.allowedEvents_ = { cuechange: "cuechange" }; - (x = (function (n) { - function e(e) { - var t = lt((e = void 0 === e ? {} : e), { kind: Vt[e.kind] || "" }), - e = n.call(this, t) || this, - i = !1; - return ( - Object.defineProperty(ft(e), "enabled", { - get: function () { - return i; - }, - set: function (e) { - "boolean" == typeof e && - e !== i && - ((i = e), this.trigger("enabledchange")); - }, - }), - t.enabled && (e.enabled = t.enabled), - (e.loaded_ = !0), - e - ); - } - return mt(e, n), e; - })(C)), - (U = (function (n) { - function e(e) { - var t = lt((e = void 0 === e ? {} : e), { kind: qt[e.kind] || "" }), - e = n.call(this, t) || this, - i = !1; - return ( - Object.defineProperty(ft(e), "selected", { - get: function () { - return i; - }, - set: function (e) { - "boolean" == typeof e && - e !== i && - ((i = e), this.trigger("selectedchange")); - }, - }), - t.selected && (e.selected = t.selected), - e - ); - } - return mt(e, n), e; - })(C)), - (j = (function (r) { - function e(e) { - var t; - void 0 === e && (e = {}); - var i = r.call(this) || this, - n = new ri(e); - return ( - (i.kind = n.kind), - (i.src = n.src), - (i.srclang = n.language), - (i.label = n.label), - (i.default = n.default), - Object.defineProperties(ft(i), { - readyState: { - get: function () { - return t; - }, - }, - track: { - get: function () { - return n; - }, - }, - }), - (t = 0), - n.addEventListener("loadeddata", function () { - (t = 2), i.trigger({ type: "load", target: ft(i) }); - }), - i - ); - } - return mt(e, r), e; - })(ze)); - (j.prototype.allowedEvents_ = { load: "load" }), - (j.NONE = 0), - (j.LOADING = 1), - (j.LOADED = 2), - (j.ERROR = 3); - var ai = { - audio: { ListClass: Bt, TrackClass: x, capitalName: "Audio" }, - video: { ListClass: Ft, TrackClass: U, capitalName: "Video" }, - text: { ListClass: k, TrackClass: ri, capitalName: "Text" }, - }; - Object.keys(ai).forEach(function (e) { - (ai[e].getterName = e + "Tracks"), (ai[e].privateName = e + "Tracks_"); - }); - var si = { - remoteText: { - ListClass: k, - TrackClass: ri, - capitalName: "RemoteText", - getterName: "remoteTextTracks", - privateName: "remoteTextTracks_", - }, - remoteTextEl: { - ListClass: jt, - TrackClass: j, - capitalName: "RemoteTextTrackEls", - getterName: "remoteTextTrackEls", - privateName: "remoteTextTrackEls_", - }, - }, - oi = g({}, ai, si); - (si.names = Object.keys(si)), - (ai.names = Object.keys(ai)), - (oi.names = [].concat(si.names).concat(ai.names)); - var ui = - "undefined" != typeof f ? f : "undefined" != typeof window ? window : {}, - li = - "undefined" != typeof document - ? document - : (li = ui["__GLOBAL_DOCUMENT_CACHE@4"]) || - (ui["__GLOBAL_DOCUMENT_CACHE@4"] = {}), - Xt = li, - ci = - Object.create || - function (e) { - if (1 !== arguments.length) - throw new Error("Object.create shim only accepts one parameter."); - return (di.prototype = e), new di(); - }; - function di() {} - function hi(e, t) { - (this.name = "ParsingError"), - (this.code = e.code), - (this.message = t || e.message); - } - function pi(e) { - function t(e, t, i, n) { - return 3600 * (0 | e) + 60 * (0 | t) + (0 | i) + (0 | n) / 1e3; - } - e = e.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/); - return e - ? e[3] - ? t(e[1], e[2], e[3].replace(":", ""), e[4]) - : 59 < e[1] - ? t(e[1], e[2], 0, e[4]) - : t(0, e[1], e[2], e[4]) - : null; - } - function fi() { - this.values = ci(null); - } - function mi(e, t, i, n) { - var r, - a, - s = n ? e.split(n) : [e]; - for (r in s) - "string" == typeof s[r] && - 2 === (a = s[r].split(i)).length && - t(a[0], a[1]); - } - function gi(t, e, s) { - var i = t; - function n() { - var e = pi(t); - if (null === e) - throw new hi(hi.Errors.BadTimeStamp, "Malformed timestamp: " + i); - return (t = t.replace(/^[^\sa-zA-Z-]+/, "")), e; - } - function r() { - t = t.replace(/^\s+/, ""); - } - if ((r(), (e.startTime = n()), r(), "--\x3e" !== t.substr(0, 3))) - throw new hi( - hi.Errors.BadTimeStamp, - "Malformed time stamp (time stamps must be separated by '--\x3e'): " + - i, - ); - (t = t.substr(3)), - r(), - (e.endTime = n()), - r(), - (function (e, t) { - var a = new fi(); - mi( - e, - function (e, t) { - switch (e) { - case "region": - for (var i = s.length - 1; 0 <= i; i--) - if (s[i].id === t) { - a.set(e, s[i].region); - break; - } - break; - case "vertical": - a.alt(e, t, ["rl", "lr"]); - break; - case "line": - var n = t.split(","), - r = n[0]; - a.integer(e, r), - a.percent(e, r) && a.set("snapToLines", !1), - a.alt(e, r, ["auto"]), - 2 === n.length && - a.alt("lineAlign", n[1], ["start", "center", "end"]); - break; - case "position": - (n = t.split(",")), - a.percent(e, n[0]), - 2 === n.length && - a.alt("positionAlign", n[1], ["start", "center", "end"]); - break; - case "size": - a.percent(e, t); - break; - case "align": - a.alt(e, t, ["start", "center", "end", "left", "right"]); - } - }, - /:/, - /\s/, - ), - (t.region = a.get("region", null)), - (t.vertical = a.get("vertical", "")); - try { - t.line = a.get("line", "auto"); - } catch (e) {} - (t.lineAlign = a.get("lineAlign", "start")), - (t.snapToLines = a.get("snapToLines", !0)), - (t.size = a.get("size", 100)); - try { - t.align = a.get("align", "center"); - } catch (e) { - t.align = a.get("align", "middle"); - } - try { - t.position = a.get("position", "auto"); - } catch (e) { - t.position = a.get( - "position", - { start: 0, left: 0, center: 50, middle: 50, end: 100, right: 100 }, - t.align, - ); - } - t.positionAlign = a.get( - "positionAlign", - { - start: "start", - left: "start", - center: "center", - middle: "center", - end: "end", - right: "end", - }, - t.align, - ); - })(t, e); - } - (((hi.prototype = ci(Error.prototype)).constructor = hi).Errors = { - BadSignature: { code: 0, message: "Malformed WebVTT signature." }, - BadTimeStamp: { code: 1, message: "Malformed time stamp." }, - }), - (fi.prototype = { - set: function (e, t) { - this.get(e) || "" === t || (this.values[e] = t); - }, - get: function (e, t, i) { - return i - ? this.has(e) - ? this.values[e] - : t[i] - : this.has(e) - ? this.values[e] - : t; - }, - has: function (e) { - return e in this.values; - }, - alt: function (e, t, i) { - for (var n = 0; n < i.length; ++n) - if (t === i[n]) { - this.set(e, t); - break; - } - }, - integer: function (e, t) { - /^-?\d+$/.test(t) && this.set(e, parseInt(t, 10)); - }, - percent: function (e, t) { - return ( - !!( - t.match(/^([\d]{1,3})(\.[\d]*)?%$/) && - 0 <= (t = parseFloat(t)) && - t <= 100 - ) && (this.set(e, t), !0) - ); - }, - }); - var yi = Xt.createElement && Xt.createElement("textarea"), - vi = { - c: "span", - i: "i", - b: "b", - u: "u", - ruby: "ruby", - rt: "rt", - v: "span", - lang: "span", - }, - _i = { - white: "rgba(255,255,255,1)", - lime: "rgba(0,255,0,1)", - cyan: "rgba(0,255,255,1)", - red: "rgba(255,0,0,1)", - yellow: "rgba(255,255,0,1)", - magenta: "rgba(255,0,255,1)", - blue: "rgba(0,0,255,1)", - black: "rgba(0,0,0,1)", - }, - bi = { v: "title", lang: "lang" }, - Ti = { rt: "ruby" }; - function Si(e, t) { - for ( - var i, - n, - r, - a, - s, - o, - u, - l, - c, - d, - h = e.document.createElement("div"), - p = h, - f = []; - null !== - (i = (function () { - if (!t) return null; - var e = t.match(/^([^<]*)(<[^>]*>?)?/); - return (e = e[1] || e[2]), (t = t.substr(e.length)), e; - })()); - - ) - "<" !== i[0] - ? p.appendChild( - e.document.createTextNode( - ((s = i), - (yi.innerHTML = s), - (s = yi.textContent), - (yi.textContent = ""), - s), - ), - ) - : "/" !== i[1] - ? (a = pi(i.substr(1, i.length - 2))) - ? ((n = e.document.createProcessingInstruction("timestamp", a)), - p.appendChild(n)) - : (r = i.match( - /^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/, - )) && - ((l = r[1]), - (c = r[3]), - (d = void 0), - (d = vi[l]), - (n = d - ? ((d = e.document.createElement(d)), - (l = bi[l]) && c && (d[l] = c.trim()), - d) - : null) && - ((o = p), - (Ti[(u = n).localName] && Ti[u.localName] !== o.localName) || - (r[2] && - ((a = r[2].split(".")).forEach(function (e) { - var t = /^bg_/.test(e), - e = t ? e.slice(3) : e; - _i.hasOwnProperty(e) && - ((e = _i[e]), - (n.style[t ? "background-color" : "color"] = e)); - }), - (n.className = a.join(" "))), - f.push(r[1]), - p.appendChild(n), - (p = n)))) - : f.length && - f[f.length - 1] === i.substr(2).replace(">", "") && - (f.pop(), (p = p.parentNode)); - return h; - } - var wi = [ - [1470, 1470], - [1472, 1472], - [1475, 1475], - [1478, 1478], - [1488, 1514], - [1520, 1524], - [1544, 1544], - [1547, 1547], - [1549, 1549], - [1563, 1563], - [1566, 1610], - [1645, 1647], - [1649, 1749], - [1765, 1766], - [1774, 1775], - [1786, 1805], - [1807, 1808], - [1810, 1839], - [1869, 1957], - [1969, 1969], - [1984, 2026], - [2036, 2037], - [2042, 2042], - [2048, 2069], - [2074, 2074], - [2084, 2084], - [2088, 2088], - [2096, 2110], - [2112, 2136], - [2142, 2142], - [2208, 2208], - [2210, 2220], - [8207, 8207], - [64285, 64285], - [64287, 64296], - [64298, 64310], - [64312, 64316], - [64318, 64318], - [64320, 64321], - [64323, 64324], - [64326, 64449], - [64467, 64829], - [64848, 64911], - [64914, 64967], - [65008, 65020], - [65136, 65140], - [65142, 65276], - [67584, 67589], - [67592, 67592], - [67594, 67637], - [67639, 67640], - [67644, 67644], - [67647, 67669], - [67671, 67679], - [67840, 67867], - [67872, 67897], - [67903, 67903], - [67968, 68023], - [68030, 68031], - [68096, 68096], - [68112, 68115], - [68117, 68119], - [68121, 68147], - [68160, 68167], - [68176, 68184], - [68192, 68223], - [68352, 68405], - [68416, 68437], - [68440, 68466], - [68472, 68479], - [68608, 68680], - [126464, 126467], - [126469, 126495], - [126497, 126498], - [126500, 126500], - [126503, 126503], - [126505, 126514], - [126516, 126519], - [126521, 126521], - [126523, 126523], - [126530, 126530], - [126535, 126535], - [126537, 126537], - [126539, 126539], - [126541, 126543], - [126545, 126546], - [126548, 126548], - [126551, 126551], - [126553, 126553], - [126555, 126555], - [126557, 126557], - [126559, 126559], - [126561, 126562], - [126564, 126564], - [126567, 126570], - [126572, 126578], - [126580, 126583], - [126585, 126588], - [126590, 126590], - [126592, 126601], - [126603, 126619], - [126625, 126627], - [126629, 126633], - [126635, 126651], - [1114109, 1114109], - ]; - function Ei(e) { - var t = [], - i = ""; - if (!e || !e.childNodes) return "ltr"; - function a(e, t) { - for (var i = t.childNodes.length - 1; 0 <= i; i--) - e.push(t.childNodes[i]); - } - for ( - a(t, e); - (i = (function e(t) { - if (!t || !t.length) return null; - var i = t.pop(), - n = i.textContent || i.innerText; - if (n) { - var r = n.match(/^.*(\n|\r)/); - return r ? r[(t.length = 0)] : n; - } - return "ruby" === i.tagName - ? e(t) - : i.childNodes - ? (a(t, i), e(t)) - : void 0; - })(t)); - - ) - for (var n = 0; n < i.length; n++) - if ( - (function (e) { - for (var t = 0; t < wi.length; t++) { - var i = wi[t]; - if (e >= i[0] && e <= i[1]) return 1; - } - })(i.charCodeAt(n)) - ) - return "rtl"; - return "ltr"; - } - function ki() {} - function Ci(e, t, i) { - ki.call(this), (this.cue = t), (this.cueDiv = Si(e, t.text)); - var n = { - color: "rgba(255, 255, 255, 1)", - backgroundColor: "rgba(0, 0, 0, 0.8)", - position: "relative", - left: 0, - right: 0, - top: 0, - bottom: 0, - display: "inline", - writingMode: - "" === t.vertical - ? "horizontal-tb" - : "lr" === t.vertical - ? "vertical-lr" - : "vertical-rl", - unicodeBidi: "plaintext", - }; - this.applyStyles(n, this.cueDiv), - (this.div = e.document.createElement("div")), - (n = { - direction: Ei(this.cueDiv), - writingMode: - "" === t.vertical - ? "horizontal-tb" - : "lr" === t.vertical - ? "vertical-lr" - : "vertical-rl", - unicodeBidi: "plaintext", - textAlign: "middle" === t.align ? "center" : t.align, - font: i.font, - whiteSpace: "pre-line", - position: "absolute", - }), - this.applyStyles(n), - this.div.appendChild(this.cueDiv); - var r = 0; - switch (t.positionAlign) { - case "start": - r = t.position; - break; - case "center": - r = t.position - t.size / 2; - break; - case "end": - r = t.position - t.size; - } - "" === t.vertical - ? this.applyStyles({ - left: this.formatStyle(r, "%"), - width: this.formatStyle(t.size, "%"), - }) - : this.applyStyles({ - top: this.formatStyle(r, "%"), - height: this.formatStyle(t.size, "%"), - }), - (this.move = function (e) { - this.applyStyles({ - top: this.formatStyle(e.top, "px"), - bottom: this.formatStyle(e.bottom, "px"), - left: this.formatStyle(e.left, "px"), - right: this.formatStyle(e.right, "px"), - height: this.formatStyle(e.height, "px"), - width: this.formatStyle(e.width, "px"), - }); - }); - } - function Ii(e) { - var t, i, n, r; - e.div && - ((t = e.div.offsetHeight), - (i = e.div.offsetWidth), - (n = e.div.offsetTop), - (r = - (r = e.div.childNodes) && - (r = r[0]) && - r.getClientRects && - r.getClientRects()), - (e = e.div.getBoundingClientRect()), - (r = r ? Math.max((r[0] && r[0].height) || 0, e.height / r.length) : 0)), - (this.left = e.left), - (this.right = e.right), - (this.top = e.top || n), - (this.height = e.height || t), - (this.bottom = e.bottom || n + (e.height || t)), - (this.width = e.width || i), - (this.lineHeight = void 0 !== r ? r : e.lineHeight); - } - function xi(e, t, o, u) { - var i, - n = new Ii(t), - r = t.cue, - a = (function (e) { - if ( - "number" == typeof e.line && - (e.snapToLines || (0 <= e.line && e.line <= 100)) - ) - return e.line; - if ( - !e.track || - !e.track.textTrackList || - !e.track.textTrackList.mediaElement - ) - return -1; - for ( - var t = e.track, i = t.textTrackList, n = 0, r = 0; - r < i.length && i[r] !== t; - r++ - ) - "showing" === i[r].mode && n++; - return -1 * ++n; - })(r), - s = []; - if (r.snapToLines) { - switch (r.vertical) { - case "": - (s = ["+y", "-y"]), (i = "height"); - break; - case "rl": - (s = ["+x", "-x"]), (i = "width"); - break; - case "lr": - (s = ["-x", "+x"]), (i = "width"); - } - var l = n.lineHeight, - c = l * Math.round(a), - d = o[i] + l, - h = s[0]; - Math.abs(c) > d && ((c = c < 0 ? -1 : 1), (c *= Math.ceil(d / l) * l)), - a < 0 && - ((c += "" === r.vertical ? o.height : o.width), (s = s.reverse())), - n.move(h, c); - } else { - var p = (n.lineHeight / o.height) * 100; - switch (r.lineAlign) { - case "center": - a -= p / 2; - break; - case "end": - a -= p; - } - switch (r.vertical) { - case "": - t.applyStyles({ top: t.formatStyle(a, "%") }); - break; - case "rl": - t.applyStyles({ left: t.formatStyle(a, "%") }); - break; - case "lr": - t.applyStyles({ right: t.formatStyle(a, "%") }); - } - (s = ["+y", "-x", "+x", "-y"]), (n = new Ii(t)); - } - n = (function (e, t) { - for (var i, n = new Ii(e), r = 1, a = 0; a < t.length; a++) { - for ( - ; - e.overlapsOppositeAxis(o, t[a]) || (e.within(o) && e.overlapsAny(u)); - - ) - e.move(t[a]); - if (e.within(o)) return e; - var s = e.intersectPercentage(o); - s < r && ((i = new Ii(e)), (r = s)), (e = new Ii(n)); - } - return i || n; - })(n, s); - t.move(n.toCSSCompatValues(o)); - } - function Ai() {} - (ki.prototype.applyStyles = function (e, t) { - for (var i in ((t = t || this.div), e)) - e.hasOwnProperty(i) && (t.style[i] = e[i]); - }), - (ki.prototype.formatStyle = function (e, t) { - return 0 === e ? 0 : e + t; - }), - ((Ci.prototype = ci(ki.prototype)).constructor = Ci), - (Ii.prototype.move = function (e, t) { - switch (((t = void 0 !== t ? t : this.lineHeight), e)) { - case "+x": - (this.left += t), (this.right += t); - break; - case "-x": - (this.left -= t), (this.right -= t); - break; - case "+y": - (this.top += t), (this.bottom += t); - break; - case "-y": - (this.top -= t), (this.bottom -= t); - } - }), - (Ii.prototype.overlaps = function (e) { - return ( - this.left < e.right && - this.right > e.left && - this.top < e.bottom && - this.bottom > e.top - ); - }), - (Ii.prototype.overlapsAny = function (e) { - for (var t = 0; t < e.length; t++) if (this.overlaps(e[t])) return !0; - return !1; - }), - (Ii.prototype.within = function (e) { - return ( - this.top >= e.top && - this.bottom <= e.bottom && - this.left >= e.left && - this.right <= e.right - ); - }), - (Ii.prototype.overlapsOppositeAxis = function (e, t) { - switch (t) { - case "+x": - return this.left < e.left; - case "-x": - return this.right > e.right; - case "+y": - return this.top < e.top; - case "-y": - return this.bottom > e.bottom; - } - }), - (Ii.prototype.intersectPercentage = function (e) { - return ( - (Math.max( - 0, - Math.min(this.right, e.right) - Math.max(this.left, e.left), - ) * - Math.max( - 0, - Math.min(this.bottom, e.bottom) - Math.max(this.top, e.top), - )) / - (this.height * this.width) - ); - }), - (Ii.prototype.toCSSCompatValues = function (e) { - return { - top: this.top - e.top, - bottom: e.bottom - this.bottom, - left: this.left - e.left, - right: e.right - this.right, - height: this.height, - width: this.width, - }; - }), - (Ii.getSimpleBoxPosition = function (e) { - var t = e.div ? e.div.offsetHeight : e.tagName ? e.offsetHeight : 0, - i = e.div ? e.div.offsetWidth : e.tagName ? e.offsetWidth : 0, - n = e.div ? e.div.offsetTop : e.tagName ? e.offsetTop : 0; - return { - left: (e = e.div - ? e.div.getBoundingClientRect() - : e.tagName - ? e.getBoundingClientRect() - : e).left, - right: e.right, - top: e.top || n, - height: e.height || t, - bottom: e.bottom || n + (e.height || t), - width: e.width || i, - }; - }), - (Ai.StringDecoder = function () { - return { - decode: function (e) { - if (!e) return ""; - if ("string" != typeof e) - throw new Error("Error - expected string data."); - return decodeURIComponent(encodeURIComponent(e)); - }, - }; - }), - (Ai.convertCueToDOMTree = function (e, t) { - return e && t ? Si(e, t) : null; - }); - (Ai.processCues = function (n, r, e) { - if (!n || !r || !e) return null; - for (; e.firstChild; ) e.removeChild(e.firstChild); - var a = n.document.createElement("div"); - if ( - ((a.style.position = "absolute"), - (a.style.left = "0"), - (a.style.right = "0"), - (a.style.top = "0"), - (a.style.bottom = "0"), - (a.style.margin = "1.5%"), - e.appendChild(a), - (function (e) { - for (var t = 0; t < e.length; t++) - if (e[t].hasBeenReset || !e[t].displayState) return 1; - })(r)) - ) { - var s = [], - o = Ii.getSimpleBoxPosition(a), - u = { font: Math.round(0.05 * o.height * 100) / 100 + "px sans-serif" }; - !(function () { - for (var e, t, i = 0; i < r.length; i++) - (t = r[i]), - (e = new Ci(n, t, u)), - a.appendChild(e.div), - xi(0, e, o, s), - (t.displayState = e.div), - s.push(Ii.getSimpleBoxPosition(e)); - })(); - } else for (var t = 0; t < r.length; t++) a.appendChild(r[t].displayState); - }), - ((Ai.Parser = function (e, t, i) { - i || ((i = t), (t = {})), - (t = t || {}), - (this.window = e), - (this.vttjs = t), - (this.state = "INITIAL"), - (this.buffer = ""), - (this.decoder = i || new TextDecoder("utf8")), - (this.regionList = []); - }).prototype = { - reportOrThrowError: function (e) { - if (!(e instanceof hi)) throw e; - this.onparsingerror && this.onparsingerror(e); - }, - parse: function (e) { - var n = this; - function t() { - for ( - var e = n.buffer, t = 0; - t < e.length && "\r" !== e[t] && "\n" !== e[t]; - - ) - ++t; - var i = e.substr(0, t); - return ( - "\r" === e[t] && ++t, - "\n" === e[t] && ++t, - (n.buffer = e.substr(t)), - i - ); - } - function i(e) { - e.match(/X-TIMESTAMP-MAP/) - ? mi( - e, - function (e, t) { - var i; - "X-TIMESTAMP-MAP" === e && - ((t = t), - (i = new fi()), - mi( - t, - function (e, t) { - switch (e) { - case "MPEGT": - i.integer(e + "S", t); - break; - case "LOCA": - i.set(e + "L", pi(t)); - } - }, - /[^\d]:/, - /,/, - ), - n.ontimestampmap && - n.ontimestampmap({ - MPEGTS: i.get("MPEGTS"), - LOCAL: i.get("LOCAL"), - })); - }, - /=/, - ) - : mi( - e, - function (e, t) { - var r; - "Region" === e && - ((t = t), - (r = new fi()), - mi( - t, - function (e, t) { - switch (e) { - case "id": - r.set(e, t); - break; - case "width": - r.percent(e, t); - break; - case "lines": - r.integer(e, t); - break; - case "regionanchor": - case "viewportanchor": - var i = t.split(","); - if (2 !== i.length) break; - var n = new fi(); - if ( - (n.percent("x", i[0]), - n.percent("y", i[1]), - !n.has("x") || !n.has("y")) - ) - break; - r.set(e + "X", n.get("x")), - r.set(e + "Y", n.get("y")); - break; - case "scroll": - r.alt(e, t, ["up"]); - } - }, - /=/, - /\s/, - ), - r.has("id") && - (((t = new (n.vttjs.VTTRegion || - n.window.VTTRegion)()).width = r.get("width", 100)), - (t.lines = r.get("lines", 3)), - (t.regionAnchorX = r.get("regionanchorX", 0)), - (t.regionAnchorY = r.get("regionanchorY", 100)), - (t.viewportAnchorX = r.get("viewportanchorX", 0)), - (t.viewportAnchorY = r.get("viewportanchorY", 100)), - (t.scroll = r.get("scroll", "")), - n.onregion && n.onregion(t), - n.regionList.push({ id: r.get("id"), region: t }))); - }, - /:/, - ); - } - e && (n.buffer += n.decoder.decode(e, { stream: !0 })); - try { - if ("INITIAL" === n.state) { - if (!/\r\n|\n/.test(n.buffer)) return this; - var r, - a = (r = t()).match(/^WEBVTT([ \t].*)?$/); - if (!a || !a[0]) throw new hi(hi.Errors.BadSignature); - n.state = "HEADER"; - } - for (var s = !1; n.buffer; ) { - if (!/\r\n|\n/.test(n.buffer)) return this; - switch ((s ? (s = !1) : (r = t()), n.state)) { - case "HEADER": - /:/.test(r) ? i(r) : r || (n.state = "ID"); - continue; - case "NOTE": - r || (n.state = "ID"); - continue; - case "ID": - if (/^NOTE($|[ \t])/.test(r)) { - n.state = "NOTE"; - break; - } - if (!r) continue; - n.cue = new (n.vttjs.VTTCue || n.window.VTTCue)(0, 0, ""); - try { - n.cue.align = "center"; - } catch (e) { - n.cue.align = "middle"; - } - if (((n.state = "CUE"), -1 === r.indexOf("--\x3e"))) { - n.cue.id = r; - continue; - } - case "CUE": - try { - gi(r, n.cue, n.regionList); - } catch (e) { - n.reportOrThrowError(e), (n.cue = null), (n.state = "BADCUE"); - continue; - } - n.state = "CUETEXT"; - continue; - case "CUETEXT": - var o = -1 !== r.indexOf("--\x3e"); - if (!r || (o && (s = !0))) { - n.oncue && n.oncue(n.cue), (n.cue = null), (n.state = "ID"); - continue; - } - n.cue.text && (n.cue.text += "\n"), - (n.cue.text += r - .replace(/\u2028/g, "\n") - .replace(/u2029/g, "\n")); - continue; - case "BADCUE": - r || (n.state = "ID"); - continue; - } - } - } catch (e) { - n.reportOrThrowError(e), - "CUETEXT" === n.state && n.cue && n.oncue && n.oncue(n.cue), - (n.cue = null), - (n.state = "INITIAL" === n.state ? "BADWEBVTT" : "BADCUE"); - } - return this; - }, - flush: function () { - var t = this; - try { - if ( - ((t.buffer += t.decoder.decode()), - (!t.cue && "HEADER" !== t.state) || - ((t.buffer += "\n\n"), t.parse()), - "INITIAL" === t.state) - ) - throw new hi(hi.Errors.BadSignature); - } catch (e) { - t.reportOrThrowError(e); - } - return t.onflush && t.onflush(), this; - }, - }); - var Pi = Ai, - Li = { "": 1, lr: 1, rl: 1 }, - Di = { - start: 1, - center: 1, - end: 1, - left: 1, - right: 1, - auto: 1, - "line-left": 1, - "line-right": 1, - }; - function Oi(e) { - return "string" == typeof e && !!Di[e.toLowerCase()] && e.toLowerCase(); - } - function Mi(e, t, i) { - this.hasBeenReset = !1; - var n = "", - r = !1, - a = e, - s = t, - o = i, - u = null, - l = "", - c = !0, - d = "auto", - h = "start", - p = "auto", - f = "auto", - m = 100, - g = "center"; - Object.defineProperties(this, { - id: { - enumerable: !0, - get: function () { - return n; - }, - set: function (e) { - n = "" + e; - }, - }, - pauseOnExit: { - enumerable: !0, - get: function () { - return r; - }, - set: function (e) { - r = !!e; - }, - }, - startTime: { - enumerable: !0, - get: function () { - return a; - }, - set: function (e) { - if ("number" != typeof e) - throw new TypeError("Start time must be set to a number."); - (a = e), (this.hasBeenReset = !0); - }, - }, - endTime: { - enumerable: !0, - get: function () { - return s; - }, - set: function (e) { - if ("number" != typeof e) - throw new TypeError("End time must be set to a number."); - (s = e), (this.hasBeenReset = !0); - }, - }, - text: { - enumerable: !0, - get: function () { - return o; - }, - set: function (e) { - (o = "" + e), (this.hasBeenReset = !0); - }, - }, - region: { - enumerable: !0, - get: function () { - return u; - }, - set: function (e) { - (u = e), (this.hasBeenReset = !0); - }, - }, - vertical: { - enumerable: !0, - get: function () { - return l; - }, - set: function (e) { - e = - "string" == typeof (e = e) && - !!Li[e.toLowerCase()] && - e.toLowerCase(); - if (!1 === e) - throw new SyntaxError( - "Vertical: an invalid or illegal direction string was specified.", - ); - (l = e), (this.hasBeenReset = !0); - }, - }, - snapToLines: { - enumerable: !0, - get: function () { - return c; - }, - set: function (e) { - (c = !!e), (this.hasBeenReset = !0); - }, - }, - line: { - enumerable: !0, - get: function () { - return d; - }, - set: function (e) { - if ("number" != typeof e && "auto" !== e) - throw new SyntaxError( - "Line: an invalid number or illegal string was specified.", - ); - (d = e), (this.hasBeenReset = !0); - }, - }, - lineAlign: { - enumerable: !0, - get: function () { - return h; - }, - set: function (e) { - e = Oi(e); - e && ((h = e), (this.hasBeenReset = !0)); - }, - }, - position: { - enumerable: !0, - get: function () { - return p; - }, - set: function (e) { - if (e < 0 || 100 < e) - throw new Error("Position must be between 0 and 100."); - (p = e), (this.hasBeenReset = !0); - }, - }, - positionAlign: { - enumerable: !0, - get: function () { - return f; - }, - set: function (e) { - e = Oi(e); - e && ((f = e), (this.hasBeenReset = !0)); - }, - }, - size: { - enumerable: !0, - get: function () { - return m; - }, - set: function (e) { - if (e < 0 || 100 < e) - throw new Error("Size must be between 0 and 100."); - (m = e), (this.hasBeenReset = !0); - }, - }, - align: { - enumerable: !0, - get: function () { - return g; - }, - set: function (e) { - e = Oi(e); - if (!e) - throw new SyntaxError( - "align: an invalid or illegal alignment string was specified.", - ); - (g = e), (this.hasBeenReset = !0); - }, - }, - }), - (this.displayState = void 0); - } - Mi.prototype.getCueAsHTML = function () { - return WebVTT.convertCueToDOMTree(window, this.text); - }; - var Ri = Mi, - Ni = { "": !0, up: !0 }; - function Ui(e) { - return "number" == typeof e && 0 <= e && e <= 100; - } - function Bi() { - var t = 100, - i = 3, - n = 0, - r = 100, - a = 0, - s = 100, - o = ""; - Object.defineProperties(this, { - width: { - enumerable: !0, - get: function () { - return t; - }, - set: function (e) { - if (!Ui(e)) throw new Error("Width must be between 0 and 100."); - t = e; - }, - }, - lines: { - enumerable: !0, - get: function () { - return i; - }, - set: function (e) { - if ("number" != typeof e) - throw new TypeError("Lines must be set to a number."); - i = e; - }, - }, - regionAnchorY: { - enumerable: !0, - get: function () { - return r; - }, - set: function (e) { - if (!Ui(e)) - throw new Error("RegionAnchorX must be between 0 and 100."); - r = e; - }, - }, - regionAnchorX: { - enumerable: !0, - get: function () { - return n; - }, - set: function (e) { - if (!Ui(e)) - throw new Error("RegionAnchorY must be between 0 and 100."); - n = e; - }, - }, - viewportAnchorY: { - enumerable: !0, - get: function () { - return s; - }, - set: function (e) { - if (!Ui(e)) - throw new Error("ViewportAnchorY must be between 0 and 100."); - s = e; - }, - }, - viewportAnchorX: { - enumerable: !0, - get: function () { - return a; - }, - set: function (e) { - if (!Ui(e)) - throw new Error("ViewportAnchorX must be between 0 and 100."); - a = e; - }, - }, - scroll: { - enumerable: !0, - get: function () { - return o; - }, - set: function (e) { - e = - "string" == typeof (e = e) && - !!Ni[e.toLowerCase()] && - e.toLowerCase(); - !1 === e || (o = e); - }, - }, - }); - } - var Fi = m(function (e) { - e = e.exports = { WebVTT: Pi, VTTCue: Ri, VTTRegion: Bi }; - (Kt.vttjs = e), (Kt.WebVTT = e.WebVTT); - var t = e.VTTCue, - i = e.VTTRegion, - n = Kt.VTTCue, - r = Kt.VTTRegion; - (e.shim = function () { - (Kt.VTTCue = t), (Kt.VTTRegion = i); - }), - (e.restore = function () { - (Kt.VTTCue = n), (Kt.VTTRegion = r); - }), - Kt.VTTCue || e.shim(); - }); - Fi.WebVTT, Fi.VTTCue, Fi.VTTRegion; - var ji = (function (n) { - function i(t, e) { - var i; - return ( - void 0 === e && (e = function () {}), - ((t = void 0 === t ? {} : t).reportTouchActivity = !1), - ((i = n.call(this, null, t, e) || this).onDurationChange_ = function ( - e, - ) { - return i.onDurationChange(e); - }), - (i.trackProgress_ = function (e) { - return i.trackProgress(e); - }), - (i.trackCurrentTime_ = function (e) { - return i.trackCurrentTime(e); - }), - (i.stopTrackingCurrentTime_ = function (e) { - return i.stopTrackingCurrentTime(e); - }), - (i.disposeSourceHandler_ = function (e) { - return i.disposeSourceHandler(e); - }), - (i.queuedHanders_ = new Set()), - (i.hasStarted_ = !1), - i.on("playing", function () { - this.hasStarted_ = !0; - }), - i.on("loadstart", function () { - this.hasStarted_ = !1; - }), - oi.names.forEach(function (e) { - e = oi[e]; - t && t[e.getterName] && (i[e.privateName] = t[e.getterName]); - }), - i.featuresProgressEvents || i.manualProgressOn(), - i.featuresTimeupdateEvents || i.manualTimeUpdatesOn(), - ["Text", "Audio", "Video"].forEach(function (e) { - !1 === t["native" + e + "Tracks"] && - (i["featuresNative" + e + "Tracks"] = !1); - }), - !1 === t.nativeCaptions || !1 === t.nativeTextTracks - ? (i.featuresNativeTextTracks = !1) - : (!0 !== t.nativeCaptions && !0 !== t.nativeTextTracks) || - (i.featuresNativeTextTracks = !0), - i.featuresNativeTextTracks || i.emulateTextTracks(), - (i.preloadTextTracks = !1 !== t.preloadTextTracks), - (i.autoRemoteTextTracks_ = new oi.text.ListClass()), - i.initTrackListeners(), - t.nativeControlsForTouch || i.emitTapEvents(), - i.constructor && (i.name_ = i.constructor.name || "Unknown Tech"), - i - ); - } - mt(i, n); - var e = i.prototype; - return ( - (e.triggerSourceset = function (e) { - var t = this; - this.isReady_ || - this.one("ready", function () { - return t.setTimeout(function () { - return t.triggerSourceset(e); - }, 1); - }), - this.trigger({ src: e, type: "sourceset" }); - }), - (e.manualProgressOn = function () { - this.on("durationchange", this.onDurationChange_), - (this.manualProgress = !0), - this.one("ready", this.trackProgress_); - }), - (e.manualProgressOff = function () { - (this.manualProgress = !1), - this.stopTrackingProgress(), - this.off("durationchange", this.onDurationChange_); - }), - (e.trackProgress = function (e) { - this.stopTrackingProgress(), - (this.progressInterval = this.setInterval( - Ve(this, function () { - var e = this.bufferedPercent(); - this.bufferedPercent_ !== e && this.trigger("progress"), - 1 === (this.bufferedPercent_ = e) && - this.stopTrackingProgress(); - }), - 500, - )); - }), - (e.onDurationChange = function (e) { - this.duration_ = this.duration(); - }), - (e.buffered = function () { - return vt(0, 0); - }), - (e.bufferedPercent = function () { - return _t(this.buffered(), this.duration_); - }), - (e.stopTrackingProgress = function () { - this.clearInterval(this.progressInterval); - }), - (e.manualTimeUpdatesOn = function () { - (this.manualTimeUpdates = !0), - this.on("play", this.trackCurrentTime_), - this.on("pause", this.stopTrackingCurrentTime_); - }), - (e.manualTimeUpdatesOff = function () { - (this.manualTimeUpdates = !1), - this.stopTrackingCurrentTime(), - this.off("play", this.trackCurrentTime_), - this.off("pause", this.stopTrackingCurrentTime_); - }), - (e.trackCurrentTime = function () { - this.currentTimeInterval && this.stopTrackingCurrentTime(), - (this.currentTimeInterval = this.setInterval(function () { - this.trigger({ - type: "timeupdate", - target: this, - manuallyTriggered: !0, - }); - }, 250)); - }), - (e.stopTrackingCurrentTime = function () { - this.clearInterval(this.currentTimeInterval), - this.trigger({ - type: "timeupdate", - target: this, - manuallyTriggered: !0, - }); - }), - (e.dispose = function () { - this.clearTracks(ai.names), - this.manualProgress && this.manualProgressOff(), - this.manualTimeUpdates && this.manualTimeUpdatesOff(), - n.prototype.dispose.call(this); - }), - (e.clearTracks = function (e) { - var r = this; - (e = [].concat(e)).forEach(function (e) { - for (var t = r[e + "Tracks"]() || [], i = t.length; i--; ) { - var n = t[i]; - "text" === e && r.removeRemoteTextTrack(n), t.removeTrack(n); - } - }); - }), - (e.cleanupAutoTextTracks = function () { - for (var e = this.autoRemoteTextTracks_ || [], t = e.length; t--; ) { - var i = e[t]; - this.removeRemoteTextTrack(i); - } - }), - (e.reset = function () {}), - (e.crossOrigin = function () {}), - (e.setCrossOrigin = function () {}), - (e.error = function (e) { - return ( - void 0 !== e && ((this.error_ = new bt(e)), this.trigger("error")), - this.error_ - ); - }), - (e.played = function () { - return this.hasStarted_ ? vt(0, 0) : vt(); - }), - (e.play = function () {}), - (e.setScrubbing = function () {}), - (e.scrubbing = function () {}), - (e.setCurrentTime = function () { - this.manualTimeUpdates && - this.trigger({ - type: "timeupdate", - target: this, - manuallyTriggered: !0, - }); - }), - (e.initTrackListeners = function () { - var r = this; - ai.names.forEach(function (e) { - function t() { - r.trigger(e + "trackchange"); - } - var i = ai[e], - n = r[i.getterName](); - n.addEventListener("removetrack", t), - n.addEventListener("addtrack", t), - r.on("dispose", function () { - n.removeEventListener("removetrack", t), - n.removeEventListener("addtrack", t); - }); - }); - }), - (e.addWebVttScript_ = function () { - var e, - t = this; - window.WebVTT || - (document.body.contains(this.el()) - ? !this.options_["vtt.js"] && S(Fi) && 0 < Object.keys(Fi).length - ? this.trigger("vttjsloaded") - : (((e = document.createElement("script")).src = - this.options_["vtt.js"] || - "https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js"), - (e.onload = function () { - t.trigger("vttjsloaded"); - }), - (e.onerror = function () { - t.trigger("vttjserror"); - }), - this.on("dispose", function () { - (e.onload = null), (e.onerror = null); - }), - (window.WebVTT = !0), - this.el().parentNode.appendChild(e)) - : this.ready(this.addWebVttScript_)); - }), - (e.emulateTextTracks = function () { - function t(e) { - return n.addTrack(e.track); - } - function i(e) { - return n.removeTrack(e.track); - } - var e = this, - n = this.textTracks(), - r = this.remoteTextTracks(); - r.on("addtrack", t), r.on("removetrack", i), this.addWebVttScript_(); - function a() { - return e.trigger("texttrackchange"); - } - function s() { - a(); - for (var e = 0; e < n.length; e++) { - var t = n[e]; - t.removeEventListener("cuechange", a), - "showing" === t.mode && t.addEventListener("cuechange", a); - } - } - s(), - n.addEventListener("change", s), - n.addEventListener("addtrack", s), - n.addEventListener("removetrack", s), - this.on("dispose", function () { - r.off("addtrack", t), - r.off("removetrack", i), - n.removeEventListener("change", s), - n.removeEventListener("addtrack", s), - n.removeEventListener("removetrack", s); - for (var e = 0; e < n.length; e++) - n[e].removeEventListener("cuechange", a); - }); - }), - (e.addTextTrack = function (e, t, i) { - if (!e) - throw new Error("TextTrack kind is required but was not provided"); - return (function (e, t, i, n, r) { - void 0 === r && (r = {}); - var a = e.textTracks(); - return ( - (r.kind = t), - i && (r.label = i), - n && (r.language = n), - (r.tech = e), - (r = new oi.text.TrackClass(r)), - a.addTrack(r), - r - ); - })(this, e, t, i); - }), - (e.createRemoteTextTrack = function (e) { - e = lt(e, { tech: this }); - return new si.remoteTextEl.TrackClass(e); - }), - (e.addRemoteTextTrack = function (e, t) { - var i = this, - n = this.createRemoteTextTrack((e = void 0 === e ? {} : e)); - return ( - !0 !== t && - !1 !== t && - (h.warn( - 'Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js', - ), - (t = !0)), - this.remoteTextTrackEls().addTrackElement_(n), - this.remoteTextTracks().addTrack(n.track), - !0 !== t && - this.ready(function () { - return i.autoRemoteTextTracks_.addTrack(n.track); - }), - n - ); - }), - (e.removeRemoteTextTrack = function (e) { - var t = this.remoteTextTrackEls().getTrackElementByTrack_(e); - this.remoteTextTrackEls().removeTrackElement_(t), - this.remoteTextTracks().removeTrack(e), - this.autoRemoteTextTracks_.removeTrack(e); - }), - (e.getVideoPlaybackQuality = function () { - return {}; - }), - (e.requestPictureInPicture = function () { - var e = this.options_.Promise || window.Promise; - if (e) return e.reject(); - }), - (e.disablePictureInPicture = function () { - return !0; - }), - (e.setDisablePictureInPicture = function () {}), - (e.requestVideoFrameCallback = function (e) { - var t = this, - i = Pe++; - return ( - this.paused() - ? (this.queuedHanders_.add(i), - this.one("playing", function () { - t.queuedHanders_.has(i) && (t.queuedHanders_.delete(i), e()); - })) - : this.requestNamedAnimationFrame(i, e), - i - ); - }), - (e.cancelVideoFrameCallback = function (e) { - this.queuedHanders_.has(e) - ? this.queuedHanders_.delete(e) - : this.cancelNamedAnimationFrame(e); - }), - (e.setPoster = function () {}), - (e.playsinline = function () {}), - (e.setPlaysinline = function () {}), - (e.overrideNativeAudioTracks = function () {}), - (e.overrideNativeVideoTracks = function () {}), - (e.canPlayType = function () { - return ""; - }), - (i.canPlayType = function () { - return ""; - }), - (i.canPlaySource = function (e, t) { - return i.canPlayType(e.type); - }), - (i.isTech = function (e) { - return e.prototype instanceof i || e instanceof i || e === i; - }), - (i.registerTech = function (e, t) { - if ((i.techs_ || (i.techs_ = {}), !i.isTech(t))) - throw new Error("Tech " + e + " must be a Tech"); - if (!i.canPlayType) - throw new Error( - "Techs must have a static canPlayType method on them", - ); - if (!i.canPlaySource) - throw new Error( - "Techs must have a static canPlaySource method on them", - ); - return ( - (e = ut(e)), - (i.techs_[e] = t), - (i.techs_[ot(e)] = t), - "Tech" !== e && i.defaultTechOrder_.push(e), - t - ); - }), - (i.getTech = function (e) { - if (e) - return i.techs_ && i.techs_[e] - ? i.techs_[e] - : ((e = ut(e)), - window && window.videojs && window.videojs[e] - ? (h.warn( - "The " + - e + - " tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)", - ), - window.videojs[e]) - : void 0); - }), - i - ); - })(pt); - oi.names.forEach(function (e) { - var t = oi[e]; - ji.prototype[t.getterName] = function () { - return ( - (this[t.privateName] = this[t.privateName] || new t.ListClass()), - this[t.privateName] - ); - }; - }), - (ji.prototype.featuresVolumeControl = !0), - (ji.prototype.featuresMuteControl = !0), - (ji.prototype.featuresFullscreenResize = !1), - (ji.prototype.featuresPlaybackRate = !1), - (ji.prototype.featuresProgressEvents = !1), - (ji.prototype.featuresSourceset = !1), - (ji.prototype.featuresTimeupdateEvents = !1), - (ji.prototype.featuresNativeTextTracks = !1), - (ji.prototype.featuresVideoFrameCallback = !1), - (ji.withSourceHandlers = function (r) { - (r.registerSourceHandler = function (e, t) { - var i = (i = r.sourceHandlers) || (r.sourceHandlers = []); - void 0 === t && (t = i.length), i.splice(t, 0, e); - }), - (r.canPlayType = function (e) { - for (var t, i = r.sourceHandlers || [], n = 0; n < i.length; n++) - if ((t = i[n].canPlayType(e))) return t; - return ""; - }), - (r.selectSourceHandler = function (e, t) { - for (var i = r.sourceHandlers || [], n = 0; n < i.length; n++) - if (i[n].canHandleSource(e, t)) return i[n]; - return null; - }), - (r.canPlaySource = function (e, t) { - var i = r.selectSourceHandler(e, t); - return i ? i.canHandleSource(e, t) : ""; - }); - ["seekable", "seeking", "duration"].forEach(function (e) { - var t = this[e]; - "function" == typeof t && - (this[e] = function () { - return this.sourceHandler_ && this.sourceHandler_[e] - ? this.sourceHandler_[e].apply(this.sourceHandler_, arguments) - : t.apply(this, arguments); - }); - }, r.prototype), - (r.prototype.setSource = function (e) { - var t = r.selectSourceHandler(e, this.options_); - t || - (r.nativeSourceHandler - ? (t = r.nativeSourceHandler) - : h.error("No source handler found for the current source.")), - this.disposeSourceHandler(), - this.off("dispose", this.disposeSourceHandler_), - t !== r.nativeSourceHandler && (this.currentSource_ = e), - (this.sourceHandler_ = t.handleSource(e, this, this.options_)), - this.one("dispose", this.disposeSourceHandler_); - }), - (r.prototype.disposeSourceHandler = function () { - this.currentSource_ && - (this.clearTracks(["audio", "video"]), - (this.currentSource_ = null)), - this.cleanupAutoTextTracks(), - this.sourceHandler_ && - (this.sourceHandler_.dispose && this.sourceHandler_.dispose(), - (this.sourceHandler_ = null)); - }); - }), - pt.registerComponent("Tech", ji), - ji.registerTech("Tech", ji), - (ji.defaultTechOrder_ = []); - var Hi = {}, - qi = {}, - Vi = {}; - function Wi(e, t, i) { - e.setTimeout(function () { - return (function i(n, e, r, a, s, o) { - void 0 === n && (n = {}); - void 0 === e && (e = []); - void 0 === s && (s = []); - void 0 === o && (o = !1); - var t = e, - e = t[0], - u = t.slice(1); - if ("string" == typeof e) i(n, Hi[e], r, a, s, o); - else if (e) { - var l = Qi(a, e); - if (!l.setSource) return s.push(l), i(n, u, r, a, s, o); - l.setSource(b({}, n), function (e, t) { - return e - ? i(n, u, r, a, s, o) - : (s.push(l), - void i(t, n.type === t.type ? u : Hi[t.type], r, a, s, o)); - }); - } else - u.length - ? i(n, u, r, a, s, o) - : o - ? r(n, s) - : i(n, Hi["*"], r, a, s, !0); - })(t, Hi[t.type], i, e); - }, 1); - } - function Gi(e, t, i, n) { - void 0 === n && (n = null); - var r = "call" + ut(i), - r = e.reduce(Yi(r), n), - n = r === Vi, - r = n ? null : t[i](r); - return ( - (function (e, t, i, n) { - for (var r = e.length - 1; 0 <= r; r--) { - var a = e[r]; - a[t] && a[t](n, i); - } - })(e, i, r, n), - r - ); - } - var zi = { - buffered: 1, - currentTime: 1, - duration: 1, - muted: 1, - played: 1, - paused: 1, - seekable: 1, - volume: 1, - ended: 1, - }, - Xi = { setCurrentTime: 1, setMuted: 1, setVolume: 1 }, - Ki = { play: 1, pause: 1 }; - function Yi(i) { - return function (e, t) { - return e === Vi ? Vi : t[i] ? t[i](e) : e; - }; - } - function Qi(e, t) { - var i = qi[e.id()], - n = null; - if (null == i) return (n = t(e)), (qi[e.id()] = [[t, n]]), n; - for (var r = 0; r < i.length; r++) { - var a = i[r], - s = a[0], - a = a[1]; - s === t && (n = a); - } - return null === n && ((n = t(e)), i.push([t, n])), n; - } - function $i(e) { - return (e = Nt((e = void 0 === e ? "" : e))), Zi[e.toLowerCase()] || ""; - } - function Ji(e) { - var t; - return (e = Array.isArray(e) - ? ((t = []), - e.forEach(function (e) { - (e = Ji(e)), Array.isArray(e) ? (t = t.concat(e)) : T(e) && t.push(e); - }), - t) - : "string" == typeof e && e.trim() - ? [en({ src: e })] - : T(e) && "string" == typeof e.src && e.src && e.src.trim() - ? [en(e)] - : []); - } - var Zi = { - opus: "video/ogg", - ogv: "video/ogg", - mp4: "video/mp4", - mov: "video/mp4", - m4v: "video/mp4", - mkv: "video/x-matroska", - m4a: "audio/mp4", - mp3: "audio/mpeg", - aac: "audio/aac", - caf: "audio/x-caf", - flac: "audio/flac", - oga: "audio/ogg", - wav: "audio/wav", - m3u8: "application/x-mpegURL", - mpd: "application/dash+xml", - jpg: "image/jpeg", - jpeg: "image/jpeg", - gif: "image/gif", - png: "image/png", - svg: "image/svg+xml", - webp: "image/webp", - }; - function en(e) { - var t; - return e.type || ((t = $i(e.src)) && (e.type = t)), e; - } - I = (function (u) { - function e(e, t, i) { - var n = lt({ createEl: !1 }, t), - i = u.call(this, e, n, i) || this; - if (t.playerOptions.sources && 0 !== t.playerOptions.sources.length) - e.src(t.playerOptions.sources); - else - for (var r = 0, a = t.playerOptions.techOrder; r < a.length; r++) { - var s = ut(a[r]), - o = ji.getTech(s); - if ((o = !s ? pt.getComponent(s) : o) && o.isSupported()) { - e.loadTech_(s); - break; - } - } - return i; - } - return mt(e, u), e; - })(pt); - pt.registerComponent("MediaLoader", I); - C = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.options_.controlText && i.controlText(i.options_.controlText), - (i.handleMouseOver_ = function (e) { - return i.handleMouseOver(e); - }), - (i.handleMouseOut_ = function (e) { - return i.handleMouseOut(e); - }), - (i.handleClick_ = function (e) { - return i.handleClick(e); - }), - (i.handleKeyDown_ = function (e) { - return i.handleKeyDown(e); - }), - i.emitTapEvents(), - i.enable(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function (e, t, i) { - void 0 === e && (e = "div"), - void 0 === t && (t = {}), - void 0 === i && (i = {}), - (t = b({ className: this.buildCSSClass(), tabIndex: 0 }, t)), - "button" === e && - h.error( - "Creating a ClickableComponent with an HTML element of " + - e + - " is not supported; use a Button instead.", - ), - (i = b({ role: "button" }, i)), - (this.tabIndex_ = t.tabIndex); - i = $(e, t, i); - return ( - i.appendChild( - $( - "span", - { className: "vjs-icon-placeholder" }, - { "aria-hidden": !0 }, - ), - ), - this.createControlTextEl(i), - i - ); - }), - (t.dispose = function () { - (this.controlTextEl_ = null), n.prototype.dispose.call(this); - }), - (t.createControlTextEl = function (e) { - return ( - (this.controlTextEl_ = $( - "span", - { className: "vjs-control-text" }, - { "aria-live": "polite" }, - )), - e && e.appendChild(this.controlTextEl_), - this.controlText(this.controlText_, e), - this.controlTextEl_ - ); - }), - (t.controlText = function (e, t) { - if ((void 0 === t && (t = this.el()), void 0 === e)) - return this.controlText_ || "Need Text"; - var i = this.localize(e); - (this.controlText_ = e), - J(this.controlTextEl_, i), - this.nonIconControl || - this.player_.options_.noUITitleAttributes || - t.setAttribute("title", i); - }), - (t.buildCSSClass = function () { - return "vjs-control vjs-button " + n.prototype.buildCSSClass.call(this); - }), - (t.enable = function () { - this.enabled_ || - ((this.enabled_ = !0), - this.removeClass("vjs-disabled"), - this.el_.setAttribute("aria-disabled", "false"), - "undefined" != typeof this.tabIndex_ && - this.el_.setAttribute("tabIndex", this.tabIndex_), - this.on(["tap", "click"], this.handleClick_), - this.on("keydown", this.handleKeyDown_)); - }), - (t.disable = function () { - (this.enabled_ = !1), - this.addClass("vjs-disabled"), - this.el_.setAttribute("aria-disabled", "true"), - "undefined" != typeof this.tabIndex_ && - this.el_.removeAttribute("tabIndex"), - this.off("mouseover", this.handleMouseOver_), - this.off("mouseout", this.handleMouseOut_), - this.off(["tap", "click"], this.handleClick_), - this.off("keydown", this.handleKeyDown_); - }), - (t.handleLanguagechange = function () { - this.controlText(this.controlText_); - }), - (t.handleClick = function (e) { - this.options_.clickHandler && - this.options_.clickHandler.call(this, arguments); - }), - (t.handleKeyDown = function (e) { - ht.isEventKey(e, "Space") || ht.isEventKey(e, "Enter") - ? (e.preventDefault(), e.stopPropagation(), this.trigger("click")) - : n.prototype.handleKeyDown.call(this, e); - }), - e - ); - })(pt); - pt.registerComponent("ClickableComponent", C), - pt.registerComponent( - "PosterImage", - (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.update(), - (i.update_ = function (e) { - return i.update(e); - }), - e.on("posterchange", i.update_), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.dispose = function () { - this.player().off("posterchange", this.update_), - n.prototype.dispose.call(this); - }), - (t.createEl = function () { - return $("div", { className: "vjs-poster", tabIndex: -1 }); - }), - (t.update = function (e) { - var t = this.player().poster(); - this.setSrc(t), t ? this.show() : this.hide(); - }), - (t.setSrc = function (e) { - this.el_.style.backgroundImage = e ? 'url("' + e + '")' : ""; - }), - (t.handleClick = function (e) { - var t; - this.player_.controls() && - ((t = - this.player_.usingPlugin("eme") && - this.player_.eme.sessions && - 0 < this.player_.eme.sessions.length), - !this.player_.tech(!0) || - ((N || O) && t) || - this.player_.tech(!0).focus(), - this.player_.paused() - ? Et(this.player_.play()) - : this.player_.pause()); - }), - e - ); - })(C), - ); - var tn = "#222", - nn = { - monospace: "monospace", - sansSerif: "sans-serif", - serif: "serif", - monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', - monospaceSerif: '"Courier New", monospace', - proportionalSansSerif: "sans-serif", - proportionalSerif: "serif", - casual: '"Comic Sans MS", Impact, fantasy', - script: '"Monotype Corsiva", cursive', - smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif', - }; - function rn(e, t) { - var i; - if (4 === e.length) i = e[1] + e[1] + e[2] + e[2] + e[3] + e[3]; - else { - if (7 !== e.length) - throw new Error( - "Invalid color code provided, " + - e + - "; must be formatted as e.g. #f0e or #f604e2.", - ); - i = e.slice(1); - } - return ( - "rgba(" + - parseInt(i.slice(0, 2), 16) + - "," + - parseInt(i.slice(2, 4), 16) + - "," + - parseInt(i.slice(4, 6), 16) + - "," + - t + - ")" - ); - } - function an(e, t, i) { - try { - e.style[t] = i; - } catch (e) { - return; - } - } - pt.registerComponent( - "TextTrackDisplay", - (function (a) { - function e(i, e, t) { - function n(e) { - return r.updateDisplay(e); - } - var r = a.call(this, i, e, t) || this; - return ( - i.on("loadstart", function (e) { - return r.toggleDisplay(e); - }), - i.on("texttrackchange", n), - i.on("loadedmetadata", function (e) { - return r.preselectTrack(e); - }), - i.ready( - Ve(ft(r), function () { - if (i.tech_ && i.tech_.featuresNativeTextTracks) this.hide(); - else { - i.on("fullscreenchange", n), - i.on("playerresize", n), - window.addEventListener("orientationchange", n), - i.on("dispose", function () { - return window.removeEventListener("orientationchange", n); - }); - for ( - var e = this.options_.playerOptions.tracks || [], t = 0; - t < e.length; - t++ - ) - this.player_.addRemoteTextTrack(e[t], !0); - this.preselectTrack(); - } - }), - ), - r - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.preselectTrack = function () { - for ( - var e, - t, - i, - n = { captions: 1, subtitles: 1 }, - r = this.player_.textTracks(), - a = this.player_.cache_.selectedLanguage, - s = 0; - s < r.length; - s++ - ) { - var o = r[s]; - a && - a.enabled && - a.language && - a.language === o.language && - o.kind in n - ? (i = (o.kind !== a.kind && i) || o) - : a && !a.enabled - ? (t = e = i = null) - : o.default && - ("descriptions" !== o.kind || e - ? o.kind in n && !t && (t = o) - : (e = o)); - } - i - ? (i.mode = "showing") - : t - ? (t.mode = "showing") - : e && (e.mode = "showing"); - }), - (t.toggleDisplay = function () { - this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks - ? this.hide() - : this.show(); - }), - (t.createEl = function () { - return a.prototype.createEl.call( - this, - "div", - { className: "vjs-text-track-display" }, - { translate: "yes", "aria-live": "off", "aria-atomic": "true" }, - ); - }), - (t.clearDisplay = function () { - "function" == typeof window.WebVTT && - window.WebVTT.processCues(window, [], this.el_); - }), - (t.updateDisplay = function () { - var e = this.player_.textTracks(), - t = this.options_.allowMultipleShowingTracks; - if ((this.clearDisplay(), t)) { - for (var i = [], n = 0; n < e.length; ++n) { - var r = e[n]; - "showing" === r.mode && i.push(r); - } - this.updateForTrack(i); - } else { - for (var a = null, s = null, o = e.length; o--; ) { - var u = e[o]; - "showing" === u.mode && - ("descriptions" === u.kind ? (a = u) : (s = u)); - } - s - ? ("off" !== this.getAttribute("aria-live") && - this.setAttribute("aria-live", "off"), - this.updateForTrack(s)) - : a && - ("assertive" !== this.getAttribute("aria-live") && - this.setAttribute("aria-live", "assertive"), - this.updateForTrack(a)); - } - }), - (t.updateDisplayState = function (e) { - for ( - var t = this.player_.textTrackSettings.getValues(), - i = e.activeCues, - n = i.length; - n--; - - ) { - var r, - a = i[n]; - a && - ((r = a.displayState), - t.color && (r.firstChild.style.color = t.color), - t.textOpacity && - an(r.firstChild, "color", rn(t.color || "#fff", t.textOpacity)), - t.backgroundColor && - (r.firstChild.style.backgroundColor = t.backgroundColor), - t.backgroundOpacity && - an( - r.firstChild, - "backgroundColor", - rn(t.backgroundColor || "#000", t.backgroundOpacity), - ), - t.windowColor && - (t.windowOpacity - ? an(r, "backgroundColor", rn(t.windowColor, t.windowOpacity)) - : (r.style.backgroundColor = t.windowColor)), - t.edgeStyle && - ("dropshadow" === t.edgeStyle - ? (r.firstChild.style.textShadow = - "2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px " + tn) - : "raised" === t.edgeStyle - ? (r.firstChild.style.textShadow = - "1px 1px #222, 2px 2px #222, 3px 3px " + tn) - : "depressed" === t.edgeStyle - ? (r.firstChild.style.textShadow = - "1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px " + - tn) - : "uniform" === t.edgeStyle && - (r.firstChild.style.textShadow = - "0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px " + - tn)), - t.fontPercent && - 1 !== t.fontPercent && - ((a = window.parseFloat(r.style.fontSize)), - (r.style.fontSize = a * t.fontPercent + "px"), - (r.style.height = "auto"), - (r.style.top = "auto")), - t.fontFamily && - "default" !== t.fontFamily && - ("small-caps" === t.fontFamily - ? (r.firstChild.style.fontVariant = "small-caps") - : (r.firstChild.style.fontFamily = nn[t.fontFamily]))); - } - }), - (t.updateForTrack = function (e) { - if ( - (Array.isArray(e) || (e = [e]), - "function" == typeof window.WebVTT && - !e.every(function (e) { - return !e.activeCues; - })) - ) { - for (var t = [], i = 0; i < e.length; ++i) - for (var n = e[i], r = 0; r < n.activeCues.length; ++r) - t.push(n.activeCues[r]); - window.WebVTT.processCues(window, t, this.el_); - for (var a = 0; a < e.length; ++a) { - for (var s = e[a], o = 0; o < s.activeCues.length; ++o) { - var u = s.activeCues[o].displayState; - te(u, "vjs-text-track-cue"), - te(u, "vjs-text-track-cue-" + (s.language || a)), - s.language && oe(u, "lang", s.language); - } - this.player_.textTrackSettings && this.updateDisplayState(s); - } - } - }), - e - ); - })(pt), - ), - pt.registerComponent( - "LoadingSpinner", - (function (i) { - function e() { - return i.apply(this, arguments) || this; - } - return ( - mt(e, i), - (e.prototype.createEl = function () { - var e = this.player_.isAudio(), - t = this.localize(e ? "Audio Player" : "Video Player"), - e = $("span", { - className: "vjs-control-text", - textContent: this.localize("{1} is loading.", [t]), - }), - t = i.prototype.createEl.call(this, "div", { - className: "vjs-loading-spinner", - dir: "ltr", - }); - return t.appendChild(e), t; - }), - e - ); - })(pt), - ); - var sn = (function (t) { - function e() { - return t.apply(this, arguments) || this; - } - mt(e, t); - var i = e.prototype; - return ( - (i.createEl = function (e, t, i) { - void 0 === t && (t = {}), void 0 === i && (i = {}); - i = $( - "button", - (t = b({ className: this.buildCSSClass() }, t)), - (i = b({ type: "button" }, i)), - ); - return ( - i.appendChild( - $( - "span", - { className: "vjs-icon-placeholder" }, - { "aria-hidden": !0 }, - ), - ), - this.createControlTextEl(i), - i - ); - }), - (i.addChild = function (e, t) { - void 0 === t && (t = {}); - var i = this.constructor.name; - return ( - h.warn( - "Adding an actionable (user controllable) child to a Button (" + - i + - ") is not supported; use a ClickableComponent instead.", - ), - pt.prototype.addChild.call(this, e, t) - ); - }), - (i.enable = function () { - t.prototype.enable.call(this), this.el_.removeAttribute("disabled"); - }), - (i.disable = function () { - t.prototype.disable.call(this), - this.el_.setAttribute("disabled", "disabled"); - }), - (i.handleKeyDown = function (e) { - ht.isEventKey(e, "Space") || ht.isEventKey(e, "Enter") - ? e.stopPropagation() - : t.prototype.handleKeyDown.call(this, e); - }), - e - ); - })(C); - pt.registerComponent("Button", sn); - Bt = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - (i.mouseused_ = !1), - i.on("mousedown", function (e) { - return i.handleMouseDown(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-big-play-button"; - }), - (t.handleClick = function (e) { - var t = this.player_.play(); - if (this.mouseused_ && e.clientX && e.clientY) { - var i = - this.player_.usingPlugin("eme") && - this.player_.eme.sessions && - 0 < this.player_.eme.sessions.length; - return ( - Et(t), - void ( - !this.player_.tech(!0) || - ((N || O) && i) || - this.player_.tech(!0).focus() - ) - ); - } - var i = this.player_.getChild("controlBar"), - n = i && i.getChild("playToggle"); - n - ? ((i = function () { - return n.focus(); - }), - wt(t) ? t.then(i, function () {}) : this.setTimeout(i, 1)) - : this.player_.tech(!0).focus(); - }), - (t.handleKeyDown = function (e) { - (this.mouseused_ = !1), n.prototype.handleKeyDown.call(this, e); - }), - (t.handleMouseDown = function (e) { - this.mouseused_ = !0; - }), - e - ); - })(sn); - (Bt.prototype.controlText_ = "Play Video"), - pt.registerComponent("BigPlayButton", Bt), - pt.registerComponent( - "CloseButton", - (function (i) { - function e(e, t) { - e = i.call(this, e, t) || this; - return e.controlText((t && t.controlText) || e.localize("Close")), e; - } - mt(e, i); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-close-button " + i.prototype.buildCSSClass.call(this); - }), - (t.handleClick = function (e) { - this.trigger({ type: "close", bubbles: !1 }); - }), - (t.handleKeyDown = function (e) { - ht.isEventKey(e, "Esc") - ? (e.preventDefault(), e.stopPropagation(), this.trigger("click")) - : i.prototype.handleKeyDown.call(this, e); - }), - e - ); - })(sn), - ); - Ft = (function (n) { - function e(e, t) { - var i = n.call(this, e, (t = void 0 === t ? {} : t)) || this; - return ( - (t.replay = void 0 === t.replay || t.replay), - i.on(e, "play", function (e) { - return i.handlePlay(e); - }), - i.on(e, "pause", function (e) { - return i.handlePause(e); - }), - t.replay && - i.on(e, "ended", function (e) { - return i.handleEnded(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-play-control " + n.prototype.buildCSSClass.call(this); - }), - (t.handleClick = function (e) { - this.player_.paused() ? Et(this.player_.play()) : this.player_.pause(); - }), - (t.handleSeeked = function (e) { - this.removeClass("vjs-ended"), - this.player_.paused() ? this.handlePause(e) : this.handlePlay(e); - }), - (t.handlePlay = function (e) { - this.removeClass("vjs-ended"), - this.removeClass("vjs-paused"), - this.addClass("vjs-playing"), - this.controlText("Pause"); - }), - (t.handlePause = function (e) { - this.removeClass("vjs-playing"), - this.addClass("vjs-paused"), - this.controlText("Play"); - }), - (t.handleEnded = function (e) { - var t = this; - this.removeClass("vjs-playing"), - this.addClass("vjs-ended"), - this.controlText("Replay"), - this.one(this.player_, "seeked", function (e) { - return t.handleSeeked(e); - }); - }), - e - ); - })(sn); - (Ft.prototype.controlText_ = "Play"), pt.registerComponent("PlayToggle", Ft); - function on(e, t) { - e = e < 0 ? 0 : e; - var i = Math.floor(e % 60), - n = Math.floor((e / 60) % 60), - r = Math.floor(e / 3600), - a = Math.floor((t / 60) % 60), - t = Math.floor(t / 3600); - return ( - (r = - 0 < (r = isNaN(e) || e === 1 / 0 ? (n = i = "-") : r) || 0 < t - ? r + ":" - : "") + - (n = ((r || 10 <= a) && n < 10 ? "0" + n : n) + ":") + - (i = i < 10 ? "0" + i : i) - ); - } - var un = on; - function ln(e, t) { - return un(e, (t = void 0 === t ? e : t)); - } - k = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.on(e, ["timeupdate", "ended"], function (e) { - return i.updateContent(e); - }), - i.updateTextNode_(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - var e = this.buildCSSClass(), - t = n.prototype.createEl.call(this, "div", { - className: e + " vjs-time-control vjs-control", - }), - i = $( - "span", - { - className: "vjs-control-text", - textContent: this.localize(this.labelText_) + " ", - }, - { role: "presentation" }, - ); - return ( - t.appendChild(i), - (this.contentEl_ = $( - "span", - { className: e + "-display" }, - { "aria-live": "off", role: "presentation" }, - )), - t.appendChild(this.contentEl_), - t - ); - }), - (t.dispose = function () { - (this.contentEl_ = null), - (this.textNode_ = null), - n.prototype.dispose.call(this); - }), - (t.updateTextNode_ = function (e) { - var t = this; - (e = ln((e = void 0 === e ? 0 : e))), - this.formattedTime_ !== e && - ((this.formattedTime_ = e), - this.requestNamedAnimationFrame( - "TimeDisplay#updateTextNode_", - function () { - var e; - t.contentEl_ && - ((e = t.textNode_) && - t.contentEl_.firstChild !== e && - ((e = null), - h.warn( - "TimeDisplay#updateTextnode_: Prevented replacement of text node element since it was no longer a child of this node. Appending a new node instead.", - )), - (t.textNode_ = document.createTextNode(t.formattedTime_)), - t.textNode_ && - (e - ? t.contentEl_.replaceChild(t.textNode_, e) - : t.contentEl_.appendChild(t.textNode_))); - }, - )); - }), - (t.updateContent = function (e) {}), - e - ); - })(pt); - (k.prototype.labelText_ = "Time"), - (k.prototype.controlText_ = "Time"), - pt.registerComponent("TimeDisplay", k); - jt = (function (e) { - function t() { - return e.apply(this, arguments) || this; - } - mt(t, e); - var i = t.prototype; - return ( - (i.buildCSSClass = function () { - return "vjs-current-time"; - }), - (i.updateContent = function (e) { - var t = this.player_.ended() - ? this.player_.duration() - : this.player_.scrubbing() - ? this.player_.getCache().currentTime - : this.player_.currentTime(); - this.updateTextNode_(t); - }), - t - ); - })(k); - (jt.prototype.labelText_ = "Current Time"), - (jt.prototype.controlText_ = "Current Time"), - pt.registerComponent("CurrentTimeDisplay", jt); - j = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this, - t = function (e) { - return i.updateContent(e); - }; - return ( - i.on(e, "durationchange", t), - i.on(e, "loadstart", t), - i.on(e, "loadedmetadata", t), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-duration"; - }), - (t.updateContent = function (e) { - var t = this.player_.duration(); - this.updateTextNode_(t); - }), - e - ); - })(k); - (j.prototype.labelText_ = "Duration"), - (j.prototype.controlText_ = "Duration"), - pt.registerComponent("DurationDisplay", j), - pt.registerComponent( - "TimeDivider", - (function (n) { - function e() { - return n.apply(this, arguments) || this; - } - return ( - mt(e, n), - (e.prototype.createEl = function () { - var e = n.prototype.createEl.call( - this, - "div", - { className: "vjs-time-control vjs-time-divider" }, - { "aria-hidden": !0 }, - ), - t = n.prototype.createEl.call(this, "div"), - i = n.prototype.createEl.call(this, "span", { textContent: "/" }); - return t.appendChild(i), e.appendChild(t), e; - }), - e - ); - })(pt), - ); - f = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.on(e, "durationchange", function (e) { - return i.updateContent(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-remaining-time"; - }), - (t.createEl = function () { - var e = n.prototype.createEl.call(this); - return ( - !1 !== this.options_.displayNegative && - e.insertBefore( - $("span", {}, { "aria-hidden": !0 }, "-"), - this.contentEl_, - ), - e - ); - }), - (t.updateContent = function (e) { - var t; - "number" == typeof this.player_.duration() && - ((t = this.player_.ended() - ? 0 - : this.player_.remainingTimeDisplay - ? this.player_.remainingTimeDisplay() - : this.player_.remainingTime()), - this.updateTextNode_(t)); - }), - e - ); - })(k); - (f.prototype.labelText_ = "Remaining Time"), - (f.prototype.controlText_ = "Remaining Time"), - pt.registerComponent("RemainingTimeDisplay", f), - pt.registerComponent( - "LiveDisplay", - (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.updateShowing(), - i.on(i.player(), "durationchange", function (e) { - return i.updateShowing(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - var e = n.prototype.createEl.call(this, "div", { - className: "vjs-live-control vjs-control", - }); - return ( - (this.contentEl_ = $( - "div", - { className: "vjs-live-display" }, - { "aria-live": "off" }, - )), - this.contentEl_.appendChild( - $("span", { - className: "vjs-control-text", - textContent: this.localize("Stream Type") + " ", - }), - ), - this.contentEl_.appendChild( - document.createTextNode(this.localize("LIVE")), - ), - e.appendChild(this.contentEl_), - e - ); - }), - (t.dispose = function () { - (this.contentEl_ = null), n.prototype.dispose.call(this); - }), - (t.updateShowing = function (e) { - this.player().duration() === 1 / 0 ? this.show() : this.hide(); - }), - e - ); - })(pt), - ); - ui = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.updateLiveEdgeStatus(), - i.player_.liveTracker && - ((i.updateLiveEdgeStatusHandler_ = function (e) { - return i.updateLiveEdgeStatus(e); - }), - i.on( - i.player_.liveTracker, - "liveedgechange", - i.updateLiveEdgeStatusHandler_, - )), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - var e = n.prototype.createEl.call(this, "button", { - className: "vjs-seek-to-live-control vjs-control", - }); - return ( - (this.textEl_ = $( - "span", - { - className: "vjs-seek-to-live-text", - textContent: this.localize("LIVE"), - }, - { "aria-hidden": "true" }, - )), - e.appendChild(this.textEl_), - e - ); - }), - (t.updateLiveEdgeStatus = function () { - !this.player_.liveTracker || this.player_.liveTracker.atLiveEdge() - ? (this.setAttribute("aria-disabled", !0), - this.addClass("vjs-at-live-edge"), - this.controlText("Seek to live, currently playing live")) - : (this.setAttribute("aria-disabled", !1), - this.removeClass("vjs-at-live-edge"), - this.controlText("Seek to live, currently behind live")); - }), - (t.handleClick = function () { - this.player_.liveTracker.seekToLiveEdge(); - }), - (t.dispose = function () { - this.player_.liveTracker && - this.off( - this.player_.liveTracker, - "liveedgechange", - this.updateLiveEdgeStatusHandler_, - ), - (this.textEl_ = null), - n.prototype.dispose.call(this); - }), - e - ); - })(sn); - (ui.prototype.controlText_ = "Seek to live, currently playing live"), - pt.registerComponent("SeekToLive", ui); - function cn(e, t, i) { - return (e = Number(e)), Math.min(i, Math.max(t, isNaN(e) ? t : e)); - } - li = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - (i.handleMouseDown_ = function (e) { - return i.handleMouseDown(e); - }), - (i.handleMouseUp_ = function (e) { - return i.handleMouseUp(e); - }), - (i.handleKeyDown_ = function (e) { - return i.handleKeyDown(e); - }), - (i.handleClick_ = function (e) { - return i.handleClick(e); - }), - (i.handleMouseMove_ = function (e) { - return i.handleMouseMove(e); - }), - (i.update_ = function (e) { - return i.update(e); - }), - (i.bar = i.getChild(i.options_.barName)), - i.vertical(!!i.options_.vertical), - i.enable(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.enabled = function () { - return this.enabled_; - }), - (t.enable = function () { - this.enabled() || - (this.on("mousedown", this.handleMouseDown_), - this.on("touchstart", this.handleMouseDown_), - this.on("keydown", this.handleKeyDown_), - this.on("click", this.handleClick_), - this.on(this.player_, "controlsvisible", this.update), - this.playerEvent && - this.on(this.player_, this.playerEvent, this.update), - this.removeClass("disabled"), - this.setAttribute("tabindex", 0), - (this.enabled_ = !0)); - }), - (t.disable = function () { - var e; - this.enabled() && - ((e = this.bar.el_.ownerDocument), - this.off("mousedown", this.handleMouseDown_), - this.off("touchstart", this.handleMouseDown_), - this.off("keydown", this.handleKeyDown_), - this.off("click", this.handleClick_), - this.off(this.player_, "controlsvisible", this.update_), - this.off(e, "mousemove", this.handleMouseMove_), - this.off(e, "mouseup", this.handleMouseUp_), - this.off(e, "touchmove", this.handleMouseMove_), - this.off(e, "touchend", this.handleMouseUp_), - this.removeAttribute("tabindex"), - this.addClass("disabled"), - this.playerEvent && - this.off(this.player_, this.playerEvent, this.update), - (this.enabled_ = !1)); - }), - (t.createEl = function (e, t, i) { - return ( - void 0 === i && (i = {}), - ((t = void 0 === t ? {} : t).className = t.className + " vjs-slider"), - (t = b({ tabIndex: 0 }, t)), - (i = b( - { - role: "slider", - "aria-valuenow": 0, - "aria-valuemin": 0, - "aria-valuemax": 100, - tabIndex: 0, - }, - i, - )), - n.prototype.createEl.call(this, e, t, i) - ); - }), - (t.handleMouseDown = function (e) { - var t = this.bar.el_.ownerDocument; - "mousedown" === e.type && e.preventDefault(), - "touchstart" !== e.type || M || e.preventDefault(), - le(), - this.addClass("vjs-sliding"), - this.trigger("slideractive"), - this.on(t, "mousemove", this.handleMouseMove_), - this.on(t, "mouseup", this.handleMouseUp_), - this.on(t, "touchmove", this.handleMouseMove_), - this.on(t, "touchend", this.handleMouseUp_), - this.handleMouseMove(e, !0); - }), - (t.handleMouseMove = function (e) {}), - (t.handleMouseUp = function () { - var e = this.bar.el_.ownerDocument; - ce(), - this.removeClass("vjs-sliding"), - this.trigger("sliderinactive"), - this.off(e, "mousemove", this.handleMouseMove_), - this.off(e, "mouseup", this.handleMouseUp_), - this.off(e, "touchmove", this.handleMouseMove_), - this.off(e, "touchend", this.handleMouseUp_), - this.update(); - }), - (t.update = function () { - var t = this; - if (this.el_ && this.bar) { - var i = this.getProgress(); - return i === this.progress_ - ? i - : ((this.progress_ = i), - this.requestNamedAnimationFrame("Slider#update", function () { - var e = t.vertical() ? "height" : "width"; - t.bar.el().style[e] = (100 * i).toFixed(2) + "%"; - }), - i); - } - }), - (t.getProgress = function () { - return Number(cn(this.getPercent(), 0, 1).toFixed(4)); - }), - (t.calculateDistance = function (e) { - e = pe(this.el_, e); - return this.vertical() ? e.y : e.x; - }), - (t.handleKeyDown = function (e) { - ht.isEventKey(e, "Left") || ht.isEventKey(e, "Down") - ? (e.preventDefault(), e.stopPropagation(), this.stepBack()) - : ht.isEventKey(e, "Right") || ht.isEventKey(e, "Up") - ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) - : n.prototype.handleKeyDown.call(this, e); - }), - (t.handleClick = function (e) { - e.stopPropagation(), e.preventDefault(); - }), - (t.vertical = function (e) { - if (void 0 === e) return this.vertical_ || !1; - (this.vertical_ = !!e), - this.vertical_ - ? this.addClass("vjs-slider-vertical") - : this.addClass("vjs-slider-horizontal"); - }), - e - ); - })(pt); - pt.registerComponent("Slider", li); - function dn(e, t) { - return cn((e / t) * 100, 0, 100).toFixed(2) + "%"; - } - pt.registerComponent( - "LoadProgressBar", - (function (r) { - function e(e, t) { - var i = r.call(this, e, t) || this; - return ( - (i.partEls_ = []), - i.on(e, "progress", function (e) { - return i.update(e); - }), - i - ); - } - mt(e, r); - var t = e.prototype; - return ( - (t.createEl = function () { - var e = r.prototype.createEl.call(this, "div", { - className: "vjs-load-progress", - }), - t = $("span", { className: "vjs-control-text" }), - i = $("span", { textContent: this.localize("Loaded") }), - n = document.createTextNode(": "); - return ( - (this.percentageEl_ = $("span", { - className: "vjs-control-text-loaded-percentage", - textContent: "0%", - })), - e.appendChild(t), - t.appendChild(i), - t.appendChild(n), - t.appendChild(this.percentageEl_), - e - ); - }), - (t.dispose = function () { - (this.partEls_ = null), - (this.percentageEl_ = null), - r.prototype.dispose.call(this); - }), - (t.update = function (e) { - var l = this; - this.requestNamedAnimationFrame( - "LoadProgressBar#update", - function () { - var e = l.player_.liveTracker, - t = l.player_.buffered(), - e = e && e.isLive() ? e.seekableEnd() : l.player_.duration(), - i = l.player_.bufferedEnd(), - n = l.partEls_, - e = dn(i, e); - l.percent_ !== e && - ((l.el_.style.width = e), - J(l.percentageEl_, e), - (l.percent_ = e)); - for (var r = 0; r < t.length; r++) { - var a = t.start(r), - s = t.end(r), - o = n[r]; - o || ((o = l.el_.appendChild($())), (n[r] = o)), - (o.dataset.start === a && o.dataset.end === s) || - ((o.dataset.start = a), - (o.dataset.end = s), - (o.style.left = dn(a, i)), - (o.style.width = dn(s - a, i))); - } - for (var u = n.length; u > t.length; u--) - l.el_.removeChild(n[u - 1]); - n.length = t.length; - }, - ); - }), - e - ); - })(pt), - ), - pt.registerComponent( - "TimeTooltip", - (function (i) { - function e(e, t) { - t = i.call(this, e, t) || this; - return (t.update = We(Ve(ft(t), t.update), 30)), t; - } - mt(e, i); - var t = e.prototype; - return ( - (t.createEl = function () { - return i.prototype.createEl.call( - this, - "div", - { className: "vjs-time-tooltip" }, - { "aria-hidden": "true" }, - ); - }), - (t.update = function (e, t, i) { - var n = he(this.el_), - r = de(this.player_.el()), - a = e.width * t; - r && - n && - ((t = e.left - r.left + a), - (r = e.width - a + (r.right - e.right)), - t < (e = n.width / 2) ? (e += e - t) : r < e && (e = r), - e < 0 ? (e = 0) : e > n.width && (e = n.width), - (e = Math.round(e)), - (this.el_.style.right = "-" + e + "px"), - this.write(i)); - }), - (t.write = function (e) { - J(this.el_, e); - }), - (t.updateTime = function (n, r, a, s) { - var o = this; - this.requestNamedAnimationFrame( - "TimeTooltip#updateTime", - function () { - var e, - t, - i = o.player_.duration(); - (i = - o.player_.liveTracker && o.player_.liveTracker.isLive() - ? ((t = (e = o.player_.liveTracker.liveWindow()) - r * e) < - 1 - ? "" - : "-") + ln(t, e) - : ln(a, i)), - o.update(n, r, i), - s && s(); - }, - ); - }), - e - ); - })(pt), - ); - Xt = (function (i) { - function e(e, t) { - t = i.call(this, e, t) || this; - return (t.update = We(Ve(ft(t), t.update), 30)), t; - } - mt(e, i); - var t = e.prototype; - return ( - (t.createEl = function () { - return i.prototype.createEl.call( - this, - "div", - { className: "vjs-play-progress vjs-slider-bar" }, - { "aria-hidden": "true" }, - ); - }), - (t.update = function (e, t) { - var i, - n = this.getChild("timeTooltip"); - n && - ((i = this.player_.scrubbing() - ? this.player_.getCache().currentTime - : this.player_.currentTime()), - n.updateTime(e, t, i)); - }), - e - ); - })(pt); - (Xt.prototype.options_ = { children: [] }), - q || A || Xt.prototype.options_.children.push("timeTooltip"), - pt.registerComponent("PlayProgressBar", Xt); - I = (function (i) { - function e(e, t) { - t = i.call(this, e, t) || this; - return (t.update = We(Ve(ft(t), t.update), 30)), t; - } - mt(e, i); - var t = e.prototype; - return ( - (t.createEl = function () { - return i.prototype.createEl.call(this, "div", { - className: "vjs-mouse-display", - }); - }), - (t.update = function (e, t) { - var i = this, - n = t * this.player_.duration(); - this.getChild("timeTooltip").updateTime(e, t, n, function () { - i.el_.style.left = e.width * t + "px"; - }); - }), - e - ); - })(pt); - (I.prototype.options_ = { children: ["timeTooltip"] }), - pt.registerComponent("MouseTimeDisplay", I); - Bt = (function (a) { - function e(e, t) { - t = a.call(this, e, t) || this; - return t.setEventHandlers_(), t; - } - mt(e, a); - var t = e.prototype; - return ( - (t.setEventHandlers_ = function () { - var t = this; - (this.update_ = Ve(this, this.update)), - (this.update = We(this.update_, 30)), - this.on( - this.player_, - ["ended", "durationchange", "timeupdate"], - this.update, - ), - this.player_.liveTracker && - this.on(this.player_.liveTracker, "liveedgechange", this.update), - (this.updateInterval = null), - (this.enableIntervalHandler_ = function (e) { - return t.enableInterval_(e); - }), - (this.disableIntervalHandler_ = function (e) { - return t.disableInterval_(e); - }), - this.on(this.player_, ["playing"], this.enableIntervalHandler_), - this.on( - this.player_, - ["ended", "pause", "waiting"], - this.disableIntervalHandler_, - ), - "hidden" in document && - "visibilityState" in document && - this.on(document, "visibilitychange", this.toggleVisibility_); - }), - (t.toggleVisibility_ = function (e) { - "hidden" === document.visibilityState - ? (this.cancelNamedAnimationFrame("SeekBar#update"), - this.cancelNamedAnimationFrame("Slider#update"), - this.disableInterval_(e)) - : (this.player_.ended() || - this.player_.paused() || - this.enableInterval_(), - this.update()); - }), - (t.enableInterval_ = function () { - this.updateInterval || - (this.updateInterval = this.setInterval(this.update, 30)); - }), - (t.disableInterval_ = function (e) { - (this.player_.liveTracker && - this.player_.liveTracker.isLive() && - e && - "ended" !== e.type) || - (this.updateInterval && - (this.clearInterval(this.updateInterval), - (this.updateInterval = null))); - }), - (t.createEl = function () { - return a.prototype.createEl.call( - this, - "div", - { className: "vjs-progress-holder" }, - { "aria-label": this.localize("Progress Bar") }, - ); - }), - (t.update = function (e) { - var n = this; - if ("hidden" !== document.visibilityState) { - var r = a.prototype.update.call(this); - return ( - this.requestNamedAnimationFrame("SeekBar#update", function () { - var e = n.player_.ended() - ? n.player_.duration() - : n.getCurrentTime_(), - t = n.player_.liveTracker, - i = n.player_.duration(); - t && t.isLive() && (i = n.player_.liveTracker.liveCurrentTime()), - n.percent_ !== r && - (n.el_.setAttribute("aria-valuenow", (100 * r).toFixed(2)), - (n.percent_ = r)), - (n.currentTime_ === e && n.duration_ === i) || - (n.el_.setAttribute( - "aria-valuetext", - n.localize( - "progress bar timing: currentTime={1} duration={2}", - [ln(e, i), ln(i, i)], - "{1} of {2}", - ), - ), - (n.currentTime_ = e), - (n.duration_ = i)), - n.bar && n.bar.update(de(n.el()), n.getProgress()); - }), - r - ); - } - }), - (t.userSeek_ = function (e) { - this.player_.liveTracker && - this.player_.liveTracker.isLive() && - this.player_.liveTracker.nextSeekedFromUser(), - this.player_.currentTime(e); - }), - (t.getCurrentTime_ = function () { - return this.player_.scrubbing() - ? this.player_.getCache().currentTime - : this.player_.currentTime(); - }), - (t.getPercent = function () { - var e, - t = this.getCurrentTime_(), - i = this.player_.liveTracker; - return ( - i && i.isLive() - ? ((e = (t - i.seekableStart()) / i.liveWindow()), - i.atLiveEdge() && (e = 1)) - : (e = t / this.player_.duration()), - e - ); - }), - (t.handleMouseDown = function (e) { - _e(e) && - (e.stopPropagation(), - (this.videoWasPlaying = !this.player_.paused()), - this.player_.pause(), - a.prototype.handleMouseDown.call(this, e)); - }), - (t.handleMouseMove = function (e, t) { - if ((void 0 === t && (t = !1), _e(e))) { - t || this.player_.scrubbing() || this.player_.scrubbing(!0); - var i = this.calculateDistance(e), - n = this.player_.liveTracker; - if (n && n.isLive()) { - if (0.99 <= i) return void n.seekToLiveEdge(); - var r, - t = n.seekableStart(), - e = n.liveCurrentTime(); - if ( - (r = - (r = e <= (r = t + i * n.liveWindow()) ? e : r) <= t - ? t + 0.1 - : r) === - 1 / 0 - ) - return; - } else - (r = i * this.player_.duration()) === this.player_.duration() && - (r -= 0.1); - this.userSeek_(r); - } - }), - (t.enable = function () { - a.prototype.enable.call(this); - var e = this.getChild("mouseTimeDisplay"); - e && e.show(); - }), - (t.disable = function () { - a.prototype.disable.call(this); - var e = this.getChild("mouseTimeDisplay"); - e && e.hide(); - }), - (t.handleMouseUp = function (e) { - a.prototype.handleMouseUp.call(this, e), - e && e.stopPropagation(), - this.player_.scrubbing(!1), - this.player_.trigger({ - type: "timeupdate", - target: this, - manuallyTriggered: !0, - }), - this.videoWasPlaying ? Et(this.player_.play()) : this.update_(); - }), - (t.stepForward = function () { - this.userSeek_(this.player_.currentTime() + 5); - }), - (t.stepBack = function () { - this.userSeek_(this.player_.currentTime() - 5); - }), - (t.handleAction = function (e) { - this.player_.paused() ? this.player_.play() : this.player_.pause(); - }), - (t.handleKeyDown = function (e) { - var t, - i = this.player_.liveTracker; - ht.isEventKey(e, "Space") || ht.isEventKey(e, "Enter") - ? (e.preventDefault(), e.stopPropagation(), this.handleAction(e)) - : ht.isEventKey(e, "Home") - ? (e.preventDefault(), e.stopPropagation(), this.userSeek_(0)) - : ht.isEventKey(e, "End") - ? (e.preventDefault(), - e.stopPropagation(), - i && i.isLive() - ? this.userSeek_(i.liveCurrentTime()) - : this.userSeek_(this.player_.duration())) - : /^[0-9]$/.test(ht(e)) - ? (e.preventDefault(), - e.stopPropagation(), - (t = (10 * (ht.codes[ht(e)] - ht.codes[0])) / 100), - i && i.isLive() - ? this.userSeek_(i.seekableStart() + i.liveWindow() * t) - : this.userSeek_(this.player_.duration() * t)) - : ht.isEventKey(e, "PgDn") - ? (e.preventDefault(), - e.stopPropagation(), - this.userSeek_(this.player_.currentTime() - 60)) - : ht.isEventKey(e, "PgUp") - ? (e.preventDefault(), - e.stopPropagation(), - this.userSeek_(this.player_.currentTime() + 60)) - : a.prototype.handleKeyDown.call(this, e); - }), - (t.dispose = function () { - this.disableInterval_(), - this.off( - this.player_, - ["ended", "durationchange", "timeupdate"], - this.update, - ), - this.player_.liveTracker && - this.off(this.player_.liveTracker, "liveedgechange", this.update), - this.off(this.player_, ["playing"], this.enableIntervalHandler_), - this.off( - this.player_, - ["ended", "pause", "waiting"], - this.disableIntervalHandler_, - ), - "hidden" in document && - "visibilityState" in document && - this.off(document, "visibilitychange", this.toggleVisibility_), - a.prototype.dispose.call(this); - }), - e - ); - })(li); - (Bt.prototype.options_ = { - children: ["loadProgressBar", "playProgressBar"], - barName: "playProgressBar", - }), - q || A || Bt.prototype.options_.children.splice(1, 0, "mouseTimeDisplay"), - pt.registerComponent("SeekBar", Bt); - Ft = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - (i.handleMouseMove = We(Ve(ft(i), i.handleMouseMove), 30)), - (i.throttledHandleMouseSeek = We(Ve(ft(i), i.handleMouseSeek), 30)), - (i.handleMouseUpHandler_ = function (e) { - return i.handleMouseUp(e); - }), - (i.handleMouseDownHandler_ = function (e) { - return i.handleMouseDown(e); - }), - i.enable(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - return n.prototype.createEl.call(this, "div", { - className: "vjs-progress-control vjs-control", - }); - }), - (t.handleMouseMove = function (e) { - var t, - i, - n, - r, - a = this.getChild("seekBar"); - a && - ((t = a.getChild("playProgressBar")), - (i = a.getChild("mouseTimeDisplay")), - (t || i) && - ((r = he((n = a.el()))), - (e = pe(n, e).x), - (e = cn(e, 0, 1)), - i && i.update(r, e), - t && t.update(r, a.getProgress()))); - }), - (t.handleMouseSeek = function (e) { - var t = this.getChild("seekBar"); - t && t.handleMouseMove(e); - }), - (t.enabled = function () { - return this.enabled_; - }), - (t.disable = function () { - var e; - this.children().forEach(function (e) { - return e.disable && e.disable(); - }), - this.enabled() && - (this.off( - ["mousedown", "touchstart"], - this.handleMouseDownHandler_, - ), - this.off(this.el_, "mousemove", this.handleMouseMove), - this.removeListenersAddedOnMousedownAndTouchstart(), - this.addClass("disabled"), - (this.enabled_ = !1), - this.player_.scrubbing() && - ((e = this.getChild("seekBar")), - this.player_.scrubbing(!1), - e.videoWasPlaying && Et(this.player_.play()))); - }), - (t.enable = function () { - this.children().forEach(function (e) { - return e.enable && e.enable(); - }), - this.enabled() || - (this.on(["mousedown", "touchstart"], this.handleMouseDownHandler_), - this.on(this.el_, "mousemove", this.handleMouseMove), - this.removeClass("disabled"), - (this.enabled_ = !0)); - }), - (t.removeListenersAddedOnMousedownAndTouchstart = function () { - var e = this.el_.ownerDocument; - this.off(e, "mousemove", this.throttledHandleMouseSeek), - this.off(e, "touchmove", this.throttledHandleMouseSeek), - this.off(e, "mouseup", this.handleMouseUpHandler_), - this.off(e, "touchend", this.handleMouseUpHandler_); - }), - (t.handleMouseDown = function (e) { - var t = this.el_.ownerDocument, - i = this.getChild("seekBar"); - i && i.handleMouseDown(e), - this.on(t, "mousemove", this.throttledHandleMouseSeek), - this.on(t, "touchmove", this.throttledHandleMouseSeek), - this.on(t, "mouseup", this.handleMouseUpHandler_), - this.on(t, "touchend", this.handleMouseUpHandler_); - }), - (t.handleMouseUp = function (e) { - var t = this.getChild("seekBar"); - t && t.handleMouseUp(e), - this.removeListenersAddedOnMousedownAndTouchstart(); - }), - e - ); - })(pt); - (Ft.prototype.options_ = { children: ["seekBar"] }), - pt.registerComponent("ProgressControl", Ft); - jt = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.on( - e, - ["enterpictureinpicture", "leavepictureinpicture"], - function (e) { - return i.handlePictureInPictureChange(e); - }, - ), - i.on( - e, - ["disablepictureinpicturechanged", "loadedmetadata"], - function (e) { - return i.handlePictureInPictureEnabledChange(e); - }, - ), - i.on( - e, - ["loadedmetadata", "audioonlymodechange", "audiopostermodechange"], - function () { - "audio" === e.currentType().substring(0, 5) || - e.audioPosterMode() || - e.audioOnlyMode() - ? (e.isInPictureInPicture() && e.exitPictureInPicture(), i.hide()) - : i.show(); - }, - ), - i.disable(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return ( - "vjs-picture-in-picture-control " + - n.prototype.buildCSSClass.call(this) - ); - }), - (t.handlePictureInPictureEnabledChange = function () { - document.pictureInPictureEnabled && - !1 === this.player_.disablePictureInPicture() - ? this.enable() - : this.disable(); - }), - (t.handlePictureInPictureChange = function (e) { - this.player_.isInPictureInPicture() - ? this.controlText("Exit Picture-in-Picture") - : this.controlText("Picture-in-Picture"), - this.handlePictureInPictureEnabledChange(); - }), - (t.handleClick = function (e) { - this.player_.isInPictureInPicture() - ? this.player_.exitPictureInPicture() - : this.player_.requestPictureInPicture(); - }), - e - ); - })(sn); - (jt.prototype.controlText_ = "Picture-in-Picture"), - pt.registerComponent("PictureInPictureToggle", jt); - j = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.on(e, "fullscreenchange", function (e) { - return i.handleFullscreenChange(e); - }), - !1 === document[e.fsApi_.fullscreenEnabled] && i.disable(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-fullscreen-control " + n.prototype.buildCSSClass.call(this); - }), - (t.handleFullscreenChange = function (e) { - this.player_.isFullscreen() - ? this.controlText("Non-Fullscreen") - : this.controlText("Fullscreen"); - }), - (t.handleClick = function (e) { - this.player_.isFullscreen() - ? this.player_.exitFullscreen() - : this.player_.requestFullscreen(); - }), - e - ); - })(sn); - (j.prototype.controlText_ = "Fullscreen"), - pt.registerComponent("FullscreenToggle", j); - pt.registerComponent( - "VolumeLevel", - (function (t) { - function e() { - return t.apply(this, arguments) || this; - } - return ( - mt(e, t), - (e.prototype.createEl = function () { - var e = t.prototype.createEl.call(this, "div", { - className: "vjs-volume-level", - }); - return ( - e.appendChild( - t.prototype.createEl.call(this, "span", { - className: "vjs-control-text", - }), - ), - e - ); - }), - e - ); - })(pt), - ), - pt.registerComponent( - "VolumeLevelTooltip", - (function (i) { - function e(e, t) { - t = i.call(this, e, t) || this; - return (t.update = We(Ve(ft(t), t.update), 30)), t; - } - mt(e, i); - var t = e.prototype; - return ( - (t.createEl = function () { - return i.prototype.createEl.call( - this, - "div", - { className: "vjs-volume-tooltip" }, - { "aria-hidden": "true" }, - ); - }), - (t.update = function (e, t, i, n) { - if (!i) { - var r = de(this.el_), - a = de(this.player_.el()), - i = e.width * t; - if (!a || !r) return; - (t = e.left - a.left + i), - (a = e.width - i + (a.right - e.right)), - (e = r.width / 2); - t < e ? (e += e - t) : a < e && (e = a), - e < 0 ? (e = 0) : e > r.width && (e = r.width), - (this.el_.style.right = "-" + e + "px"); - } - this.write(n + "%"); - }), - (t.write = function (e) { - J(this.el_, e); - }), - (t.updateVolume = function (e, t, i, n, r) { - var a = this; - this.requestNamedAnimationFrame( - "VolumeLevelTooltip#updateVolume", - function () { - a.update(e, t, i, n.toFixed(0)), r && r(); - }, - ); - }), - e - ); - })(pt), - ); - k = (function (i) { - function e(e, t) { - t = i.call(this, e, t) || this; - return (t.update = We(Ve(ft(t), t.update), 30)), t; - } - mt(e, i); - var t = e.prototype; - return ( - (t.createEl = function () { - return i.prototype.createEl.call(this, "div", { - className: "vjs-mouse-display", - }); - }), - (t.update = function (e, t, i) { - var n = this, - r = 100 * t; - this.getChild("volumeLevelTooltip").updateVolume( - e, - t, - i, - r, - function () { - i - ? (n.el_.style.bottom = e.height * t + "px") - : (n.el_.style.left = e.width * t + "px"); - }, - ); - }), - e - ); - })(pt); - (k.prototype.options_ = { children: ["volumeLevelTooltip"] }), - pt.registerComponent("MouseVolumeLevelDisplay", k); - f = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.on("slideractive", function (e) { - return i.updateLastVolume_(e); - }), - i.on(e, "volumechange", function (e) { - return i.updateARIAAttributes(e); - }), - e.ready(function () { - return i.updateARIAAttributes(); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - return n.prototype.createEl.call( - this, - "div", - { className: "vjs-volume-bar vjs-slider-bar" }, - { - "aria-label": this.localize("Volume Level"), - "aria-live": "polite", - }, - ); - }), - (t.handleMouseDown = function (e) { - _e(e) && n.prototype.handleMouseDown.call(this, e); - }), - (t.handleMouseMove = function (e) { - var t, - i, - n, - r = this.getChild("mouseVolumeLevelDisplay"); - r && - ((t = de((n = this.el()))), - (i = this.vertical()), - (n = pe(n, e)), - (n = i ? n.y : n.x), - (n = cn(n, 0, 1)), - r.update(t, n, i)), - _e(e) && - (this.checkMuted(), this.player_.volume(this.calculateDistance(e))); - }), - (t.checkMuted = function () { - this.player_.muted() && this.player_.muted(!1); - }), - (t.getPercent = function () { - return this.player_.muted() ? 0 : this.player_.volume(); - }), - (t.stepForward = function () { - this.checkMuted(), this.player_.volume(this.player_.volume() + 0.1); - }), - (t.stepBack = function () { - this.checkMuted(), this.player_.volume(this.player_.volume() - 0.1); - }), - (t.updateARIAAttributes = function (e) { - var t = this.player_.muted() ? 0 : this.volumeAsPercentage_(); - this.el_.setAttribute("aria-valuenow", t), - this.el_.setAttribute("aria-valuetext", t + "%"); - }), - (t.volumeAsPercentage_ = function () { - return Math.round(100 * this.player_.volume()); - }), - (t.updateLastVolume_ = function () { - var e = this, - t = this.player_.volume(); - this.one("sliderinactive", function () { - 0 === e.player_.volume() && e.player_.lastVolume_(t); - }); - }), - e - ); - })(li); - (f.prototype.options_ = { - children: ["volumeLevel"], - barName: "volumeLevel", - }), - q || - A || - f.prototype.options_.children.splice(0, 0, "mouseVolumeLevelDisplay"), - (f.prototype.playerEvent = "volumechange"), - pt.registerComponent("VolumeBar", f); - ui = (function (a) { - function e(e, t) { - var i, n, r; - return ( - ((t = void 0 === t ? {} : t).vertical = t.vertical || !1), - ("undefined" != typeof t.volumeBar && !S(t.volumeBar)) || - ((t.volumeBar = t.volumeBar || {}), - (t.volumeBar.vertical = t.vertical)), - (i = a.call(this, e, t) || this), - (n = ft(i)), - (r = e).tech_ && - !r.tech_.featuresVolumeControl && - n.addClass("vjs-hidden"), - n.on(r, "loadstart", function () { - r.tech_.featuresVolumeControl - ? n.removeClass("vjs-hidden") - : n.addClass("vjs-hidden"); - }), - (i.throttledHandleMouseMove = We(Ve(ft(i), i.handleMouseMove), 30)), - (i.handleMouseUpHandler_ = function (e) { - return i.handleMouseUp(e); - }), - i.on("mousedown", function (e) { - return i.handleMouseDown(e); - }), - i.on("touchstart", function (e) { - return i.handleMouseDown(e); - }), - i.on("mousemove", function (e) { - return i.handleMouseMove(e); - }), - i.on(i.volumeBar, ["focus", "slideractive"], function () { - i.volumeBar.addClass("vjs-slider-active"), - i.addClass("vjs-slider-active"), - i.trigger("slideractive"); - }), - i.on(i.volumeBar, ["blur", "sliderinactive"], function () { - i.volumeBar.removeClass("vjs-slider-active"), - i.removeClass("vjs-slider-active"), - i.trigger("sliderinactive"); - }), - i - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.createEl = function () { - var e = "vjs-volume-horizontal"; - return ( - this.options_.vertical && (e = "vjs-volume-vertical"), - a.prototype.createEl.call(this, "div", { - className: "vjs-volume-control vjs-control " + e, - }) - ); - }), - (t.handleMouseDown = function (e) { - var t = this.el_.ownerDocument; - this.on(t, "mousemove", this.throttledHandleMouseMove), - this.on(t, "touchmove", this.throttledHandleMouseMove), - this.on(t, "mouseup", this.handleMouseUpHandler_), - this.on(t, "touchend", this.handleMouseUpHandler_); - }), - (t.handleMouseUp = function (e) { - var t = this.el_.ownerDocument; - this.off(t, "mousemove", this.throttledHandleMouseMove), - this.off(t, "touchmove", this.throttledHandleMouseMove), - this.off(t, "mouseup", this.handleMouseUpHandler_), - this.off(t, "touchend", this.handleMouseUpHandler_); - }), - (t.handleMouseMove = function (e) { - this.volumeBar.handleMouseMove(e); - }), - e - ); - })(pt); - (ui.prototype.options_ = { children: ["volumeBar"] }), - pt.registerComponent("VolumeControl", ui); - Xt = (function (a) { - function e(e, t) { - var i, - n, - r = a.call(this, e, t) || this; - return ( - (i = ft(r)), - (n = e).tech_ && - !n.tech_.featuresMuteControl && - i.addClass("vjs-hidden"), - i.on(n, "loadstart", function () { - n.tech_.featuresMuteControl - ? i.removeClass("vjs-hidden") - : i.addClass("vjs-hidden"); - }), - r.on(e, ["loadstart", "volumechange"], function (e) { - return r.update(e); - }), - r - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-mute-control " + a.prototype.buildCSSClass.call(this); - }), - (t.handleClick = function (e) { - var t = this.player_.volume(), - i = this.player_.lastVolume_(); - 0 === t - ? (this.player_.volume(i < 0.1 ? 0.1 : i), this.player_.muted(!1)) - : this.player_.muted(!this.player_.muted()); - }), - (t.update = function (e) { - this.updateIcon_(), this.updateControlText_(); - }), - (t.updateIcon_ = function () { - var e = this.player_.volume(), - t = 3; - q && - this.player_.tech_ && - this.player_.tech_.el_ && - this.player_.muted(this.player_.tech_.el_.muted), - 0 === e || this.player_.muted() - ? (t = 0) - : e < 0.33 - ? (t = 1) - : e < 0.67 && (t = 2); - for (var i = 0; i < 4; i++) ie(this.el_, "vjs-vol-" + i); - te(this.el_, "vjs-vol-" + t); - }), - (t.updateControlText_ = function () { - var e = - this.player_.muted() || 0 === this.player_.volume() - ? "Unmute" - : "Mute"; - this.controlText() !== e && this.controlText(e); - }), - e - ); - })(sn); - (Xt.prototype.controlText_ = "Mute"), pt.registerComponent("MuteToggle", Xt); - I = (function (n) { - function e(e, t) { - var i; - return ( - "undefined" != typeof (t = void 0 === t ? {} : t).inline - ? (t.inline = t.inline) - : (t.inline = !0), - ("undefined" != typeof t.volumeControl && !S(t.volumeControl)) || - ((t.volumeControl = t.volumeControl || {}), - (t.volumeControl.vertical = !t.inline)), - ((i = n.call(this, e, t) || this).handleKeyPressHandler_ = function ( - e, - ) { - return i.handleKeyPress(e); - }), - i.on(e, ["loadstart"], function (e) { - return i.volumePanelState_(e); - }), - i.on(i.muteToggle, "keyup", function (e) { - return i.handleKeyPress(e); - }), - i.on(i.volumeControl, "keyup", function (e) { - return i.handleVolumeControlKeyUp(e); - }), - i.on("keydown", function (e) { - return i.handleKeyPress(e); - }), - i.on("mouseover", function (e) { - return i.handleMouseOver(e); - }), - i.on("mouseout", function (e) { - return i.handleMouseOut(e); - }), - i.on(i.volumeControl, ["slideractive"], i.sliderActive_), - i.on(i.volumeControl, ["sliderinactive"], i.sliderInactive_), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.sliderActive_ = function () { - this.addClass("vjs-slider-active"); - }), - (t.sliderInactive_ = function () { - this.removeClass("vjs-slider-active"); - }), - (t.volumePanelState_ = function () { - this.volumeControl.hasClass("vjs-hidden") && - this.muteToggle.hasClass("vjs-hidden") && - this.addClass("vjs-hidden"), - this.volumeControl.hasClass("vjs-hidden") && - !this.muteToggle.hasClass("vjs-hidden") && - this.addClass("vjs-mute-toggle-only"); - }), - (t.createEl = function () { - var e = "vjs-volume-panel-horizontal"; - return ( - this.options_.inline || (e = "vjs-volume-panel-vertical"), - n.prototype.createEl.call(this, "div", { - className: "vjs-volume-panel vjs-control " + e, - }) - ); - }), - (t.dispose = function () { - this.handleMouseOut(), n.prototype.dispose.call(this); - }), - (t.handleVolumeControlKeyUp = function (e) { - ht.isEventKey(e, "Esc") && this.muteToggle.focus(); - }), - (t.handleMouseOver = function (e) { - this.addClass("vjs-hover"), - Be(document, "keyup", this.handleKeyPressHandler_); - }), - (t.handleMouseOut = function (e) { - this.removeClass("vjs-hover"), - Fe(document, "keyup", this.handleKeyPressHandler_); - }), - (t.handleKeyPress = function (e) { - ht.isEventKey(e, "Esc") && this.handleMouseOut(); - }), - e - ); - })(pt); - (I.prototype.options_ = { children: ["muteToggle", "volumeControl"] }), - pt.registerComponent("VolumePanel", I); - var hn = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - t && (i.menuButton_ = t.menuButton), - (i.focusedChild_ = -1), - i.on("keydown", function (e) { - return i.handleKeyDown(e); - }), - (i.boundHandleBlur_ = function (e) { - return i.handleBlur(e); - }), - (i.boundHandleTapClick_ = function (e) { - return i.handleTapClick(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.addEventListenerForItem = function (e) { - e instanceof pt && - (this.on(e, "blur", this.boundHandleBlur_), - this.on(e, ["tap", "click"], this.boundHandleTapClick_)); - }), - (t.removeEventListenerForItem = function (e) { - e instanceof pt && - (this.off(e, "blur", this.boundHandleBlur_), - this.off(e, ["tap", "click"], this.boundHandleTapClick_)); - }), - (t.removeChild = function (e) { - "string" == typeof e && (e = this.getChild(e)), - this.removeEventListenerForItem(e), - n.prototype.removeChild.call(this, e); - }), - (t.addItem = function (e) { - e = this.addChild(e); - e && this.addEventListenerForItem(e); - }), - (t.createEl = function () { - var e = this.options_.contentElType || "ul"; - (this.contentEl_ = $(e, { className: "vjs-menu-content" })), - this.contentEl_.setAttribute("role", "menu"); - e = n.prototype.createEl.call(this, "div", { - append: this.contentEl_, - className: "vjs-menu", - }); - return ( - e.appendChild(this.contentEl_), - Be(e, "click", function (e) { - e.preventDefault(), e.stopImmediatePropagation(); - }), - e - ); - }), - (t.dispose = function () { - (this.contentEl_ = null), - (this.boundHandleBlur_ = null), - (this.boundHandleTapClick_ = null), - n.prototype.dispose.call(this); - }), - (t.handleBlur = function (e) { - var t = e.relatedTarget || document.activeElement; - this.children().some(function (e) { - return e.el() === t; - }) || - ((e = this.menuButton_) && - e.buttonPressed_ && - t !== e.el().firstChild && - e.unpressButton()); - }), - (t.handleTapClick = function (t) { - var e; - this.menuButton_ && - (this.menuButton_.unpressButton(), - (e = this.children()), - !Array.isArray(e) || - ((e = e.filter(function (e) { - return e.el() === t.target; - })[0]) && - "CaptionSettingsMenuItem" !== e.name() && - this.menuButton_.focus())); - }), - (t.handleKeyDown = function (e) { - ht.isEventKey(e, "Left") || ht.isEventKey(e, "Down") - ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) - : (ht.isEventKey(e, "Right") || ht.isEventKey(e, "Up")) && - (e.preventDefault(), e.stopPropagation(), this.stepBack()); - }), - (t.stepForward = function () { - var e = 0; - void 0 !== this.focusedChild_ && (e = this.focusedChild_ + 1), - this.focus(e); - }), - (t.stepBack = function () { - var e = 0; - void 0 !== this.focusedChild_ && (e = this.focusedChild_ - 1), - this.focus(e); - }), - (t.focus = function (e) { - void 0 === e && (e = 0); - var t = this.children().slice(); - t.length && t[0].hasClass("vjs-menu-title") && t.shift(), - 0 < t.length && - (e < 0 ? (e = 0) : e >= t.length && (e = t.length - 1), - t[(this.focusedChild_ = e)].el_.focus()); - }), - e - ); - })(pt); - pt.registerComponent("Menu", hn); - Bt = (function (n) { - function e(e, t) { - var i; - ((i = n.call(this, e, (t = void 0 === t ? {} : t)) || this).menuButton_ = - new sn(e, t)), - i.menuButton_.controlText(i.controlText_), - i.menuButton_.el_.setAttribute("aria-haspopup", "true"); - t = sn.prototype.buildCSSClass(); - (i.menuButton_.el_.className = i.buildCSSClass() + " " + t), - i.menuButton_.removeClass("vjs-control"), - i.addChild(i.menuButton_), - i.update(), - (i.enabled_ = !0); - t = function (e) { - return i.handleClick(e); - }; - return ( - (i.handleMenuKeyUp_ = function (e) { - return i.handleMenuKeyUp(e); - }), - i.on(i.menuButton_, "tap", t), - i.on(i.menuButton_, "click", t), - i.on(i.menuButton_, "keydown", function (e) { - return i.handleKeyDown(e); - }), - i.on(i.menuButton_, "mouseenter", function () { - i.addClass("vjs-hover"), - i.menu.show(), - Be(document, "keyup", i.handleMenuKeyUp_); - }), - i.on("mouseleave", function (e) { - return i.handleMouseLeave(e); - }), - i.on("keydown", function (e) { - return i.handleSubmenuKeyDown(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.update = function () { - var e = this.createMenu(); - this.menu && (this.menu.dispose(), this.removeChild(this.menu)), - (this.menu = e), - this.addChild(e), - (this.buttonPressed_ = !1), - this.menuButton_.el_.setAttribute("aria-expanded", "false"), - this.items && this.items.length <= this.hideThreshold_ - ? (this.hide(), this.menu.contentEl_.removeAttribute("role")) - : (this.show(), this.menu.contentEl_.setAttribute("role", "menu")); - }), - (t.createMenu = function () { - var e, - t = new hn(this.player_, { menuButton: this }); - if ( - ((this.hideThreshold_ = 0), - this.options_.title && - ((e = $("li", { - className: "vjs-menu-title", - textContent: ut(this.options_.title), - tabIndex: -1, - })), - (e = new pt(this.player_, { el: e })), - t.addItem(e)), - (this.items = this.createItems()), - this.items) - ) - for (var i = 0; i < this.items.length; i++) t.addItem(this.items[i]); - return t; - }), - (t.createItems = function () {}), - (t.createEl = function () { - return n.prototype.createEl.call( - this, - "div", - { className: this.buildWrapperCSSClass() }, - {}, - ); - }), - (t.buildWrapperCSSClass = function () { - var e = "vjs-menu-button"; - return ( - !0 === this.options_.inline ? (e += "-inline") : (e += "-popup"), - "vjs-menu-button " + - e + - " " + - sn.prototype.buildCSSClass() + - " " + - n.prototype.buildCSSClass.call(this) - ); - }), - (t.buildCSSClass = function () { - var e = "vjs-menu-button"; - return ( - !0 === this.options_.inline ? (e += "-inline") : (e += "-popup"), - "vjs-menu-button " + e + " " + n.prototype.buildCSSClass.call(this) - ); - }), - (t.controlText = function (e, t) { - return ( - void 0 === t && (t = this.menuButton_.el()), - this.menuButton_.controlText(e, t) - ); - }), - (t.dispose = function () { - this.handleMouseLeave(), n.prototype.dispose.call(this); - }), - (t.handleClick = function (e) { - this.buttonPressed_ ? this.unpressButton() : this.pressButton(); - }), - (t.handleMouseLeave = function (e) { - this.removeClass("vjs-hover"), - Fe(document, "keyup", this.handleMenuKeyUp_); - }), - (t.focus = function () { - this.menuButton_.focus(); - }), - (t.blur = function () { - this.menuButton_.blur(); - }), - (t.handleKeyDown = function (e) { - ht.isEventKey(e, "Esc") || ht.isEventKey(e, "Tab") - ? (this.buttonPressed_ && this.unpressButton(), - ht.isEventKey(e, "Tab") || - (e.preventDefault(), this.menuButton_.focus())) - : (ht.isEventKey(e, "Up") || ht.isEventKey(e, "Down")) && - (this.buttonPressed_ || (e.preventDefault(), this.pressButton())); - }), - (t.handleMenuKeyUp = function (e) { - (ht.isEventKey(e, "Esc") || ht.isEventKey(e, "Tab")) && - this.removeClass("vjs-hover"); - }), - (t.handleSubmenuKeyPress = function (e) { - this.handleSubmenuKeyDown(e); - }), - (t.handleSubmenuKeyDown = function (e) { - (ht.isEventKey(e, "Esc") || ht.isEventKey(e, "Tab")) && - (this.buttonPressed_ && this.unpressButton(), - ht.isEventKey(e, "Tab") || - (e.preventDefault(), this.menuButton_.focus())); - }), - (t.pressButton = function () { - this.enabled_ && - ((this.buttonPressed_ = !0), - this.menu.show(), - this.menu.lockShowing(), - this.menuButton_.el_.setAttribute("aria-expanded", "true"), - (q && Y()) || this.menu.focus()); - }), - (t.unpressButton = function () { - this.enabled_ && - ((this.buttonPressed_ = !1), - this.menu.unlockShowing(), - this.menu.hide(), - this.menuButton_.el_.setAttribute("aria-expanded", "false")); - }), - (t.disable = function () { - this.unpressButton(), - (this.enabled_ = !1), - this.addClass("vjs-disabled"), - this.menuButton_.disable(); - }), - (t.enable = function () { - (this.enabled_ = !0), - this.removeClass("vjs-disabled"), - this.menuButton_.enable(); - }), - e - ); - })(pt); - pt.registerComponent("MenuButton", Bt); - Ft = (function (r) { - function e(e, t) { - var i = t.tracks, - t = r.call(this, e, t) || this; - if ((t.items.length <= 1 && t.hide(), !i)) return ft(t); - var n = Ve(ft(t), t.update); - return ( - i.addEventListener("removetrack", n), - i.addEventListener("addtrack", n), - i.addEventListener("labelchange", n), - t.player_.on("ready", n), - t.player_.on("dispose", function () { - i.removeEventListener("removetrack", n), - i.removeEventListener("addtrack", n), - i.removeEventListener("labelchange", n); - }), - t - ); - } - return mt(e, r), e; - })(Bt); - pt.registerComponent("TrackButton", Ft); - var pn = ["Tab", "Esc", "Up", "Down", "Right", "Left"], - jt = (function (n) { - function e(e, t) { - e = n.call(this, e, t) || this; - return ( - (e.selectable = t.selectable), - (e.isSelected_ = t.selected || !1), - (e.multiSelectable = t.multiSelectable), - e.selected(e.isSelected_), - e.selectable - ? e.multiSelectable - ? e.el_.setAttribute("role", "menuitemcheckbox") - : e.el_.setAttribute("role", "menuitemradio") - : e.el_.setAttribute("role", "menuitem"), - e - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function (e, t, i) { - this.nonIconControl = !0; - i = n.prototype.createEl.call( - this, - "li", - b({ className: "vjs-menu-item", tabIndex: -1 }, t), - i, - ); - return ( - i.replaceChild( - $("span", { - className: "vjs-menu-item-text", - textContent: this.localize(this.options_.label), - }), - i.querySelector(".vjs-icon-placeholder"), - ), - i - ); - }), - (t.handleKeyDown = function (t) { - pn.some(function (e) { - return ht.isEventKey(t, e); - }) || n.prototype.handleKeyDown.call(this, t); - }), - (t.handleClick = function (e) { - this.selected(!0); - }), - (t.selected = function (e) { - this.selectable && - (e - ? (this.addClass("vjs-selected"), - this.el_.setAttribute("aria-checked", "true"), - this.controlText(", selected"), - (this.isSelected_ = !0)) - : (this.removeClass("vjs-selected"), - this.el_.setAttribute("aria-checked", "false"), - this.controlText(""), - (this.isSelected_ = !1))); - }), - e - ); - })(C); - pt.registerComponent("MenuItem", jt); - var fn = (function (u) { - function e(e, t) { - var n, - i = t.track, - r = e.textTracks(); - (t.label = i.label || i.language || "Unknown"), - (t.selected = "showing" === i.mode), - ((n = u.call(this, e, t) || this).track = i), - (n.kinds = (t.kinds || [t.kind || n.track.kind]).filter(Boolean)); - function a() { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - n.handleTracksChange.apply(ft(n), t); - } - function s() { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - n.handleSelectedLanguageChange.apply(ft(n), t); - } - var o; - return ( - e.on(["loadstart", "texttrackchange"], a), - r.addEventListener("change", a), - r.addEventListener("selectedlanguagechange", s), - n.on("dispose", function () { - e.off(["loadstart", "texttrackchange"], a), - r.removeEventListener("change", a), - r.removeEventListener("selectedlanguagechange", s); - }), - void 0 === r.onchange && - n.on(["tap", "click"], function () { - if ("object" != typeof window.Event) - try { - o = new window.Event("change"); - } catch (e) {} - o || - (o = document.createEvent("Event")).initEvent("change", !0, !0), - r.dispatchEvent(o); - }), - n.handleTracksChange(), - n - ); - } - mt(e, u); - var t = e.prototype; - return ( - (t.handleClick = function (e) { - var t = this.track, - i = this.player_.textTracks(); - if ((u.prototype.handleClick.call(this, e), i)) - for (var n = 0; n < i.length; n++) { - var r = i[n]; - -1 !== this.kinds.indexOf(r.kind) && - (r === t - ? "showing" !== r.mode && (r.mode = "showing") - : "disabled" !== r.mode && (r.mode = "disabled")); - } - }), - (t.handleTracksChange = function (e) { - var t = "showing" === this.track.mode; - t !== this.isSelected_ && this.selected(t); - }), - (t.handleSelectedLanguageChange = function (e) { - var t; - "showing" === this.track.mode && - (((t = this.player_.cache_.selectedLanguage) && - t.enabled && - t.language === this.track.language && - t.kind !== this.track.kind) || - (this.player_.cache_.selectedLanguage = { - enabled: !0, - language: this.track.language, - kind: this.track.kind, - })); - }), - (t.dispose = function () { - (this.track = null), u.prototype.dispose.call(this); - }), - e - ); - })(jt); - pt.registerComponent("TextTrackMenuItem", fn); - var mn = (function (i) { - function e(e, t) { - return ( - (t.track = { - player: e, - kind: t.kind, - kinds: t.kinds, - default: !1, - mode: "disabled", - }), - t.kinds || (t.kinds = [t.kind]), - t.label - ? (t.track.label = t.label) - : (t.track.label = t.kinds.join(" and ") + " off"), - (t.selectable = !0), - (t.multiSelectable = !1), - i.call(this, e, t) || this - ); - } - mt(e, i); - var t = e.prototype; - return ( - (t.handleTracksChange = function (e) { - for ( - var t = this.player().textTracks(), i = !0, n = 0, r = t.length; - n < r; - n++ - ) { - var a = t[n]; - if ( - -1 < this.options_.kinds.indexOf(a.kind) && - "showing" === a.mode - ) { - i = !1; - break; - } - } - i !== this.isSelected_ && this.selected(i); - }), - (t.handleSelectedLanguageChange = function (e) { - for ( - var t = this.player().textTracks(), i = !0, n = 0, r = t.length; - n < r; - n++ - ) { - var a = t[n]; - if ( - -1 < ["captions", "descriptions", "subtitles"].indexOf(a.kind) && - "showing" === a.mode - ) { - i = !1; - break; - } - } - i && (this.player_.cache_.selectedLanguage = { enabled: !1 }); - }), - e - ); - })(fn); - pt.registerComponent("OffTextTrackMenuItem", mn); - j = (function (i) { - function e(e, t) { - return ( - ((t = void 0 === t ? {} : t).tracks = e.textTracks()), - i.call(this, e, t) || this - ); - } - return ( - mt(e, i), - (e.prototype.createItems = function (e, t) { - var i; - void 0 === t && (t = fn), - this.label_ && (i = this.label_ + " off"), - (e = void 0 === e ? [] : e).push( - new mn(this.player_, { - kinds: this.kinds_, - kind: this.kind_, - label: i, - }), - ), - (this.hideThreshold_ += 1); - var n = this.player_.textTracks(); - Array.isArray(this.kinds_) || (this.kinds_ = [this.kind_]); - for (var r = 0; r < n.length; r++) { - var a, - s = n[r]; - -1 < this.kinds_.indexOf(s.kind) && - ((a = new t(this.player_, { - track: s, - kinds: this.kinds_, - kind: this.kind_, - selectable: !0, - multiSelectable: !1, - })).addClass("vjs-" + s.kind + "-menu-item"), - e.push(a)); - } - return e; - }), - e - ); - })(Ft); - pt.registerComponent("TextTrackButton", j); - var gn = (function (a) { - function e(e, t) { - var i = t.track, - n = t.cue, - r = e.currentTime(); - return ( - (t.selectable = !0), - (t.multiSelectable = !1), - (t.label = n.text), - (t.selected = n.startTime <= r && r < n.endTime), - ((t = a.call(this, e, t) || this).track = i), - (t.cue = n), - t - ); - } - return ( - mt(e, a), - (e.prototype.handleClick = function (e) { - a.prototype.handleClick.call(this), - this.player_.currentTime(this.cue.startTime); - }), - e - ); - })(jt); - pt.registerComponent("ChaptersTrackMenuItem", gn); - k = (function (r) { - function e(e, t, i) { - var n = r.call(this, e, t, i) || this; - return ( - (n.selectCurrentItem_ = function () { - n.items.forEach(function (e) { - e.selected(n.track_.activeCues[0] === e.cue); - }); - }), - n - ); - } - mt(e, r); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-chapters-button " + r.prototype.buildCSSClass.call(this); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-chapters-button " + r.prototype.buildWrapperCSSClass.call(this) - ); - }), - (t.update = function (e) { - (e && e.track && "chapters" !== e.track.kind) || - ((e = this.findChaptersTrack()) !== this.track_ - ? (this.setTrack(e), r.prototype.update.call(this)) - : (!this.items || - (e && e.cues && e.cues.length !== this.items.length)) && - r.prototype.update.call(this)); - }), - (t.setTrack = function (e) { - var t; - this.track_ !== e && - (this.updateHandler_ || - (this.updateHandler_ = this.update.bind(this)), - this.track_ && - ((t = this.player_ - .remoteTextTrackEls() - .getTrackElementByTrack_(this.track_)) && - t.removeEventListener("load", this.updateHandler_), - this.track_.removeEventListener( - "cuechange", - this.selectCurrentItem_, - ), - (this.track_ = null)), - (this.track_ = e), - this.track_ && - ((this.track_.mode = "hidden"), - (e = this.player_ - .remoteTextTrackEls() - .getTrackElementByTrack_(this.track_)) && - e.addEventListener("load", this.updateHandler_), - this.track_.addEventListener( - "cuechange", - this.selectCurrentItem_, - ))); - }), - (t.findChaptersTrack = function () { - for ( - var e = this.player_.textTracks() || [], t = e.length - 1; - 0 <= t; - t-- - ) { - var i = e[t]; - if (i.kind === this.kind_) return i; - } - }), - (t.getMenuCaption = function () { - return this.track_ && this.track_.label - ? this.track_.label - : this.localize(ut(this.kind_)); - }), - (t.createMenu = function () { - return ( - (this.options_.title = this.getMenuCaption()), - r.prototype.createMenu.call(this) - ); - }), - (t.createItems = function () { - var e = []; - if (!this.track_) return e; - var t = this.track_.cues; - if (!t) return e; - for (var i = 0, n = t.length; i < n; i++) { - var r = t[i], - r = new gn(this.player_, { track: this.track_, cue: r }); - e.push(r); - } - return e; - }), - e - ); - })(j); - (k.prototype.kind_ = "chapters"), - (k.prototype.controlText_ = "Chapters"), - pt.registerComponent("ChaptersButton", k); - li = (function (a) { - function e(e, t, i) { - var i = a.call(this, e, t, i) || this, - n = e.textTracks(), - r = Ve(ft(i), i.handleTracksChange); - return ( - n.addEventListener("change", r), - i.on("dispose", function () { - n.removeEventListener("change", r); - }), - i - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.handleTracksChange = function (e) { - for ( - var t = this.player().textTracks(), i = !1, n = 0, r = t.length; - n < r; - n++ - ) { - var a = t[n]; - if (a.kind !== this.kind_ && "showing" === a.mode) { - i = !0; - break; - } - } - i ? this.disable() : this.enable(); - }), - (t.buildCSSClass = function () { - return ( - "vjs-descriptions-button " + a.prototype.buildCSSClass.call(this) - ); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-descriptions-button " + - a.prototype.buildWrapperCSSClass.call(this) - ); - }), - e - ); - })(j); - (li.prototype.kind_ = "descriptions"), - (li.prototype.controlText_ = "Descriptions"), - pt.registerComponent("DescriptionsButton", li); - f = (function (n) { - function e(e, t, i) { - return n.call(this, e, t, i) || this; - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-subtitles-button " + n.prototype.buildCSSClass.call(this); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-subtitles-button " + n.prototype.buildWrapperCSSClass.call(this) - ); - }), - e - ); - })(j); - (f.prototype.kind_ = "subtitles"), - (f.prototype.controlText_ = "Subtitles"), - pt.registerComponent("SubtitlesButton", f); - var yn = (function (i) { - function e(e, t) { - return ( - (t.track = { - player: e, - kind: t.kind, - label: t.kind + " settings", - selectable: !1, - default: !1, - mode: "disabled", - }), - (t.selectable = !1), - (t.name = "CaptionSettingsMenuItem"), - (e = i.call(this, e, t) || this).addClass("vjs-texttrack-settings"), - e.controlText(", opens " + t.kind + " settings dialog"), - e - ); - } - return ( - mt(e, i), - (e.prototype.handleClick = function (e) { - this.player().getChild("textTrackSettings").open(); - }), - e - ); - })(fn); - pt.registerComponent("CaptionSettingsMenuItem", yn); - ui = (function (n) { - function e(e, t, i) { - return n.call(this, e, t, i) || this; - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-captions-button " + n.prototype.buildCSSClass.call(this); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-captions-button " + n.prototype.buildWrapperCSSClass.call(this) - ); - }), - (t.createItems = function () { - var e = []; - return ( - (this.player().tech_ && - this.player().tech_.featuresNativeTextTracks) || - !this.player().getChild("textTrackSettings") || - (e.push(new yn(this.player_, { kind: this.kind_ })), - (this.hideThreshold_ += 1)), - n.prototype.createItems.call(this, e) - ); - }), - e - ); - })(j); - (ui.prototype.kind_ = "captions"), - (ui.prototype.controlText_ = "Captions"), - pt.registerComponent("CaptionsButton", ui); - var vn = (function (n) { - function e() { - return n.apply(this, arguments) || this; - } - return ( - mt(e, n), - (e.prototype.createEl = function (e, t, i) { - (t = n.prototype.createEl.call(this, e, t, i)), - (i = t.querySelector(".vjs-menu-item-text")); - return ( - "captions" === this.options_.track.kind && - (i.appendChild( - $( - "span", - { className: "vjs-icon-placeholder" }, - { "aria-hidden": !0 }, - ), - ), - i.appendChild( - $("span", { - className: "vjs-control-text", - textContent: " " + this.localize("Captions"), - }), - )), - t - ); - }), - e - ); - })(fn); - pt.registerComponent("SubsCapsMenuItem", vn); - Xt = (function (i) { - function e(e, t) { - return ( - ((t = i.call(this, e, (t = void 0 === t ? {} : t)) || this).label_ = - "subtitles"), - -1 < ["en", "en-us", "en-ca", "fr-ca"].indexOf(t.player_.language_) && - (t.label_ = "captions"), - t.menuButton_.controlText(ut(t.label_)), - t - ); - } - mt(e, i); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-subs-caps-button " + i.prototype.buildCSSClass.call(this); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-subs-caps-button " + i.prototype.buildWrapperCSSClass.call(this) - ); - }), - (t.createItems = function () { - var e = []; - return ( - (this.player().tech_ && - this.player().tech_.featuresNativeTextTracks) || - !this.player().getChild("textTrackSettings") || - (e.push(new yn(this.player_, { kind: this.label_ })), - (this.hideThreshold_ += 1)), - (e = i.prototype.createItems.call(this, e, vn)) - ); - }), - e - ); - })(j); - (Xt.prototype.kinds_ = ["captions", "subtitles"]), - (Xt.prototype.controlText_ = "Subtitles"), - pt.registerComponent("SubsCapsButton", Xt); - var _n = (function (s) { - function e(e, t) { - var n, - i = t.track, - r = e.audioTracks(); - (t.label = i.label || i.language || "Unknown"), - (t.selected = i.enabled), - ((n = s.call(this, e, t) || this).track = i), - n.addClass("vjs-" + i.kind + "-menu-item"); - function a() { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - n.handleTracksChange.apply(ft(n), t); - } - return ( - r.addEventListener("change", a), - n.on("dispose", function () { - r.removeEventListener("change", a); - }), - n - ); - } - mt(e, s); - var t = e.prototype; - return ( - (t.createEl = function (e, t, i) { - (t = s.prototype.createEl.call(this, e, t, i)), - (i = t.querySelector(".vjs-menu-item-text")); - return ( - "main-desc" === this.options_.track.kind && - (i.appendChild( - $( - "span", - { className: "vjs-icon-placeholder" }, - { "aria-hidden": !0 }, - ), - ), - i.appendChild( - $("span", { - className: "vjs-control-text", - textContent: " " + this.localize("Descriptions"), - }), - )), - t - ); - }), - (t.handleClick = function (e) { - if ( - (s.prototype.handleClick.call(this, e), - (this.track.enabled = !0), - this.player_.tech_.featuresNativeAudioTracks) - ) - for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) { - var n = t[i]; - n !== this.track && (n.enabled = n === this.track); - } - }), - (t.handleTracksChange = function (e) { - this.selected(this.track.enabled); - }), - e - ); - })(jt); - pt.registerComponent("AudioTrackMenuItem", _n); - I = (function (i) { - function e(e, t) { - return ( - ((t = void 0 === t ? {} : t).tracks = e.audioTracks()), - i.call(this, e, t) || this - ); - } - mt(e, i); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-audio-button " + i.prototype.buildCSSClass.call(this); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-audio-button " + i.prototype.buildWrapperCSSClass.call(this) - ); - }), - (t.createItems = function (e) { - void 0 === e && (e = []), (this.hideThreshold_ = 1); - for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) { - var n = t[i]; - e.push( - new _n(this.player_, { - track: n, - selectable: !0, - multiSelectable: !1, - }), - ); - } - return e; - }), - e - ); - })(Ft); - (I.prototype.controlText_ = "Audio Track"), - pt.registerComponent("AudioTrackButton", I); - var bn = (function (a) { - function e(e, t) { - var i, - n = t.rate, - r = parseFloat(n, 10); - return ( - (t.label = n), - (t.selected = r === e.playbackRate()), - (t.selectable = !0), - (t.multiSelectable = !1), - ((i = a.call(this, e, t) || this).label = n), - (i.rate = r), - i.on(e, "ratechange", function (e) { - return i.update(e); - }), - i - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.handleClick = function (e) { - a.prototype.handleClick.call(this), - this.player().playbackRate(this.rate); - }), - (t.update = function (e) { - this.selected(this.player().playbackRate() === this.rate); - }), - e - ); - })(jt); - (bn.prototype.contentElType = "button"), - pt.registerComponent("PlaybackRateMenuItem", bn); - C = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.menuButton_.el_.setAttribute("aria-describedby", i.labelElId_), - i.updateVisibility(), - i.updateLabel(), - i.on(e, "loadstart", function (e) { - return i.updateVisibility(e); - }), - i.on(e, "ratechange", function (e) { - return i.updateLabel(e); - }), - i.on(e, "playbackrateschange", function (e) { - return i.handlePlaybackRateschange(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createEl = function () { - var e = n.prototype.createEl.call(this); - return ( - (this.labelElId_ = "vjs-playback-rate-value-label-" + this.id_), - (this.labelEl_ = $("div", { - className: "vjs-playback-rate-value", - id: this.labelElId_, - textContent: "1x", - })), - e.appendChild(this.labelEl_), - e - ); - }), - (t.dispose = function () { - (this.labelEl_ = null), n.prototype.dispose.call(this); - }), - (t.buildCSSClass = function () { - return "vjs-playback-rate " + n.prototype.buildCSSClass.call(this); - }), - (t.buildWrapperCSSClass = function () { - return ( - "vjs-playback-rate " + n.prototype.buildWrapperCSSClass.call(this) - ); - }), - (t.createItems = function () { - for ( - var e = this.playbackRates(), t = [], i = e.length - 1; - 0 <= i; - i-- - ) - t.push(new bn(this.player(), { rate: e[i] + "x" })); - return t; - }), - (t.updateARIAAttributes = function () { - this.el().setAttribute("aria-valuenow", this.player().playbackRate()); - }), - (t.handleClick = function (e) { - var t = this.player().playbackRate(), - i = this.playbackRates(), - t = (i.indexOf(t) + 1) % i.length; - this.player().playbackRate(i[t]); - }), - (t.handlePlaybackRateschange = function (e) { - this.update(); - }), - (t.playbackRates = function () { - var e = this.player(); - return (e.playbackRates && e.playbackRates()) || []; - }), - (t.playbackRateSupported = function () { - return ( - this.player().tech_ && - this.player().tech_.featuresPlaybackRate && - this.playbackRates() && - 0 < this.playbackRates().length - ); - }), - (t.updateVisibility = function (e) { - this.playbackRateSupported() - ? this.removeClass("vjs-hidden") - : this.addClass("vjs-hidden"); - }), - (t.updateLabel = function (e) { - this.playbackRateSupported() && - (this.labelEl_.textContent = this.player().playbackRate() + "x"); - }), - e - ); - })(Bt); - (C.prototype.controlText_ = "Playback Rate"), - pt.registerComponent("PlaybackRateMenuButton", C); - k = (function (n) { - function e() { - return n.apply(this, arguments) || this; - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-spacer " + n.prototype.buildCSSClass.call(this); - }), - (t.createEl = function (e, t, i) { - return ( - void 0 === e && (e = "div"), - void 0 === i && (i = {}), - (t = void 0 === t ? {} : t).className || - (t.className = this.buildCSSClass()), - n.prototype.createEl.call(this, e, t, i) - ); - }), - e - ); - })(pt); - pt.registerComponent("Spacer", k), - pt.registerComponent( - "CustomControlSpacer", - (function (e) { - function t() { - return e.apply(this, arguments) || this; - } - mt(t, e); - var i = t.prototype; - return ( - (i.buildCSSClass = function () { - return ( - "vjs-custom-control-spacer " + - e.prototype.buildCSSClass.call(this) - ); - }), - (i.createEl = function () { - return e.prototype.createEl.call(this, "div", { - className: this.buildCSSClass(), - textContent: " ", - }); - }), - t - ); - })(k), - ); - li = (function (e) { - function t() { - return e.apply(this, arguments) || this; - } - return ( - mt(t, e), - (t.prototype.createEl = function () { - return e.prototype.createEl.call(this, "div", { - className: "vjs-control-bar", - dir: "ltr", - }); - }), - t - ); - })(pt); - (li.prototype.options_ = { - children: [ - "playToggle", - "volumePanel", - "currentTimeDisplay", - "timeDivider", - "durationDisplay", - "progressControl", - "liveDisplay", - "seekToLive", - "remainingTimeDisplay", - "customControlSpacer", - "playbackRateMenuButton", - "chaptersButton", - "descriptionsButton", - "subsCapsButton", - "audioTrackButton", - "fullscreenToggle", - ], - }), - "exitPictureInPicture" in document && - li.prototype.options_.children.splice( - li.prototype.options_.children.length - 1, - 0, - "pictureInPictureToggle", - ), - pt.registerComponent("ControlBar", li); - f = (function (n) { - function e(e, t) { - var i = n.call(this, e, t) || this; - return ( - i.on(e, "error", function (e) { - return i.open(e); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.buildCSSClass = function () { - return "vjs-error-display " + n.prototype.buildCSSClass.call(this); - }), - (t.content = function () { - var e = this.player().error(); - return e ? this.localize(e.message) : ""; - }), - e - ); - })(At); - (f.prototype.options_ = g({}, At.prototype.options_, { - pauseOnOpen: !1, - fillAlways: !0, - temporary: !1, - uncloseable: !0, - })), - pt.registerComponent("ErrorDisplay", f); - var Tn = "vjs-text-track-settings", - ui = ["#000", "Black"], - j = ["#00F", "Blue"], - Xt = ["#0FF", "Cyan"], - Ft = ["#0F0", "Green"], - I = ["#F0F", "Magenta"], - jt = ["#F00", "Red"], - Bt = ["#FFF", "White"], - C = ["#FF0", "Yellow"], - k = ["1", "Opaque"], - li = ["0.5", "Semi-Transparent"], - f = ["0", "Transparent"], - Sn = { - backgroundColor: { - selector: ".vjs-bg-color > select", - id: "captions-background-color-%s", - label: "Color", - options: [ui, Bt, jt, Ft, j, C, I, Xt], - }, - backgroundOpacity: { - selector: ".vjs-bg-opacity > select", - id: "captions-background-opacity-%s", - label: "Transparency", - options: [k, li, f], - }, - color: { - selector: ".vjs-fg-color > select", - id: "captions-foreground-color-%s", - label: "Color", - options: [Bt, ui, jt, Ft, j, C, I, Xt], - }, - edgeStyle: { - selector: ".vjs-edge-style > select", - id: "%s", - label: "Text Edge Style", - options: [ - ["none", "None"], - ["raised", "Raised"], - ["depressed", "Depressed"], - ["uniform", "Uniform"], - ["dropshadow", "Dropshadow"], - ], - }, - fontFamily: { - selector: ".vjs-font-family > select", - id: "captions-font-family-%s", - label: "Font Family", - options: [ - ["proportionalSansSerif", "Proportional Sans-Serif"], - ["monospaceSansSerif", "Monospace Sans-Serif"], - ["proportionalSerif", "Proportional Serif"], - ["monospaceSerif", "Monospace Serif"], - ["casual", "Casual"], - ["script", "Script"], - ["small-caps", "Small Caps"], - ], - }, - fontPercent: { - selector: ".vjs-font-percent > select", - id: "captions-font-size-%s", - label: "Font Size", - options: [ - ["0.50", "50%"], - ["0.75", "75%"], - ["1.00", "100%"], - ["1.25", "125%"], - ["1.50", "150%"], - ["1.75", "175%"], - ["2.00", "200%"], - ["3.00", "300%"], - ["4.00", "400%"], - ], - default: 2, - parser: function (e) { - return "1.00" === e ? null : Number(e); - }, - }, - textOpacity: { - selector: ".vjs-text-opacity > select", - id: "captions-foreground-opacity-%s", - label: "Transparency", - options: [k, li], - }, - windowColor: { - selector: ".vjs-window-color > select", - id: "captions-window-color-%s", - label: "Color", - }, - windowOpacity: { - selector: ".vjs-window-opacity > select", - id: "captions-window-opacity-%s", - label: "Transparency", - options: [f, li, k], - }, - }; - function wn(e, t) { - if ((e = t ? t(e) : e) && "none" !== e) return e; - } - (Sn.windowColor.options = Sn.backgroundColor.options), - pt.registerComponent( - "TextTrackSettings", - (function (n) { - function e(e, t) { - var i; - return ( - (t.temporary = !1), - ((i = n.call(this, e, t) || this).updateDisplay = - i.updateDisplay.bind(ft(i))), - i.fill(), - (i.hasBeenOpened_ = i.hasBeenFilled_ = !0), - (i.endDialog = $("p", { - className: "vjs-control-text", - textContent: i.localize("End of dialog window."), - })), - i.el().appendChild(i.endDialog), - i.setDefaults(), - void 0 === t.persistTextTrackSettings && - (i.options_.persistTextTrackSettings = - i.options_.playerOptions.persistTextTrackSettings), - i.on(i.$(".vjs-done-button"), "click", function () { - i.saveSettings(), i.close(); - }), - i.on(i.$(".vjs-default-button"), "click", function () { - i.setDefaults(), i.updateDisplay(); - }), - _(Sn, function (e) { - i.on(i.$(e.selector), "change", i.updateDisplay); - }), - i.options_.persistTextTrackSettings && i.restoreSettings(), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.dispose = function () { - (this.endDialog = null), n.prototype.dispose.call(this); - }), - (t.createElSelect_ = function (e, t, i) { - var n = this; - void 0 === t && (t = ""), void 0 === i && (i = "label"); - var e = Sn[e], - r = e.id.replace("%s", this.id_), - a = [t, r].join(" ").trim(); - return [ - "<" + - i + - ' id="' + - r + - '" class="' + - ("label" === i ? "vjs-label" : "") + - '">', - this.localize(e.label), - "", - '") - .join(""); - }), - (t.createElFgColor_ = function () { - var e = "captions-text-legend-" + this.id_; - return [ - '
    ', - '', - this.localize("Text"), - "", - this.createElSelect_("color", e), - '', - this.createElSelect_("textOpacity", e), - "", - "
    ", - ].join(""); - }), - (t.createElBgColor_ = function () { - var e = "captions-background-" + this.id_; - return [ - '
    ', - '', - this.localize("Background"), - "", - this.createElSelect_("backgroundColor", e), - '', - this.createElSelect_("backgroundOpacity", e), - "", - "
    ", - ].join(""); - }), - (t.createElWinColor_ = function () { - var e = "captions-window-" + this.id_; - return [ - '
    ', - '', - this.localize("Window"), - "", - this.createElSelect_("windowColor", e), - '', - this.createElSelect_("windowOpacity", e), - "", - "
    ", - ].join(""); - }), - (t.createElColors_ = function () { - return $("div", { - className: "vjs-track-settings-colors", - innerHTML: [ - this.createElFgColor_(), - this.createElBgColor_(), - this.createElWinColor_(), - ].join(""), - }); - }), - (t.createElFont_ = function () { - return $("div", { - className: "vjs-track-settings-font", - innerHTML: [ - '
    ', - this.createElSelect_("fontPercent", "", "legend"), - "
    ", - '
    ', - this.createElSelect_("edgeStyle", "", "legend"), - "
    ", - '
    ', - this.createElSelect_("fontFamily", "", "legend"), - "
    ", - ].join(""), - }); - }), - (t.createElControls_ = function () { - var e = this.localize("restore all settings to the default values"); - return $("div", { - className: "vjs-track-settings-controls", - innerHTML: [ - '", - '", - ].join(""), - }); - }), - (t.content = function () { - return [ - this.createElColors_(), - this.createElFont_(), - this.createElControls_(), - ]; - }), - (t.label = function () { - return this.localize("Caption Settings Dialog"); - }), - (t.description = function () { - return this.localize( - "Beginning of dialog window. Escape will cancel and close the window.", - ); - }), - (t.buildCSSClass = function () { - return ( - n.prototype.buildCSSClass.call(this) + " vjs-text-track-settings" - ); - }), - (t.getValues = function () { - var i, - n, - e, - r = this; - return ( - (n = function (e, t, i) { - var n, - t = - ((n = r.$(t.selector)), - (t = t.parser), - wn(n.options[n.options.selectedIndex].value, t)); - return void 0 !== t && (e[i] = t), e; - }), - void 0 === (e = {}) && (e = 0), - v((i = Sn)).reduce(function (e, t) { - return n(e, i[t], t); - }, e) - ); - }), - (t.setValues = function (i) { - var n = this; - _(Sn, function (e, t) { - !(function (e, t, i) { - if (t) - for (var n = 0; n < e.options.length; n++) - if (wn(e.options[n].value, i) === t) { - e.selectedIndex = n; - break; - } - })(n.$(e.selector), i[t], e.parser); - }); - }), - (t.setDefaults = function () { - var i = this; - _(Sn, function (e) { - var t = e.hasOwnProperty("default") ? e.default : 0; - i.$(e.selector).selectedIndex = t; - }); - }), - (t.restoreSettings = function () { - var e; - try { - e = JSON.parse(window.localStorage.getItem(Tn)); - } catch (e) { - h.warn(e); - } - e && this.setValues(e); - }), - (t.saveSettings = function () { - if (this.options_.persistTextTrackSettings) { - var e = this.getValues(); - try { - Object.keys(e).length - ? window.localStorage.setItem(Tn, JSON.stringify(e)) - : window.localStorage.removeItem(Tn); - } catch (e) { - h.warn(e); - } - } - }), - (t.updateDisplay = function () { - var e = this.player_.getChild("textTrackDisplay"); - e && e.updateDisplay(); - }), - (t.conditionalBlur_ = function () { - this.previouslyActiveEl_ = null; - var e = this.player_.controlBar, - t = e && e.subsCapsButton, - e = e && e.captionsButton; - t ? t.focus() : e && e.focus(); - }), - e - ); - })(At), - ), - pt.registerComponent( - "ResizeManager", - (function (a) { - function e(e, t) { - var i, - n = t.ResizeObserver || window.ResizeObserver, - r = lt( - { - createEl: !(n = null === t.ResizeObserver ? !1 : n), - reportTouchActivity: !1, - }, - t, - ); - return ( - ((i = a.call(this, e, r) || this).ResizeObserver = - t.ResizeObserver || window.ResizeObserver), - (i.loadListener_ = null), - (i.resizeObserver_ = null), - (i.debouncedHandler_ = Ge( - function () { - i.resizeHandler(); - }, - 100, - !1, - ft(i), - )), - n - ? ((i.resizeObserver_ = new i.ResizeObserver( - i.debouncedHandler_, - )), - i.resizeObserver_.observe(e.el())) - : ((i.loadListener_ = function () { - var e, t; - i.el_ && - i.el_.contentWindow && - ((e = i.debouncedHandler_), - (t = i.unloadListener_ = - function () { - Fe(this, "resize", e), - Fe(this, "unload", t), - (t = null); - }), - Be(i.el_.contentWindow, "unload", t), - Be(i.el_.contentWindow, "resize", e)); - }), - i.one("load", i.loadListener_)), - i - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.createEl = function () { - return a.prototype.createEl.call( - this, - "iframe", - { - className: "vjs-resize-manager", - tabIndex: -1, - title: this.localize("No content"), - }, - { "aria-hidden": "true" }, - ); - }), - (t.resizeHandler = function () { - this.player_ && - this.player_.trigger && - this.player_.trigger("playerresize"); - }), - (t.dispose = function () { - this.debouncedHandler_ && this.debouncedHandler_.cancel(), - this.resizeObserver_ && - (this.player_.el() && - this.resizeObserver_.unobserve(this.player_.el()), - this.resizeObserver_.disconnect()), - this.loadListener_ && this.off("load", this.loadListener_), - this.el_ && - this.el_.contentWindow && - this.unloadListener_ && - this.unloadListener_.call(this.el_.contentWindow), - (this.ResizeObserver = null), - (this.resizeObserver = null), - (this.debouncedHandler_ = null), - (this.loadListener_ = null), - a.prototype.dispose.call(this); - }), - e - ); - })(pt), - ); - var En = { trackingThreshold: 20, liveTolerance: 15 }; - pt.registerComponent( - "LiveTracker", - (function (n) { - function e(e, t) { - var t = lt(En, t, { createEl: !1 }), - i = n.call(this, e, t) || this; - return ( - (i.handleVisibilityChange_ = function (e) { - return i.handleVisibilityChange(e); - }), - (i.trackLiveHandler_ = function () { - return i.trackLive_(); - }), - (i.handlePlay_ = function (e) { - return i.handlePlay(e); - }), - (i.handleFirstTimeupdate_ = function (e) { - return i.handleFirstTimeupdate(e); - }), - (i.handleSeeked_ = function (e) { - return i.handleSeeked(e); - }), - (i.seekToLiveEdge_ = function (e) { - return i.seekToLiveEdge(e); - }), - i.reset_(), - i.on(i.player_, "durationchange", function (e) { - return i.handleDurationchange(e); - }), - i.on(i.player_, "canplay", function () { - return i.toggleTracking(); - }), - N && - "hidden" in document && - "visibilityState" in document && - i.on(document, "visibilitychange", i.handleVisibilityChange_), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.handleVisibilityChange = function () { - this.player_.duration() === 1 / 0 && - (document.hidden ? this.stopTracking() : this.startTracking()); - }), - (t.trackLive_ = function () { - var e, - t = this.player_.seekable(); - t && - t.length && - ((e = Number(window.performance.now().toFixed(4))), - (t = -1 === this.lastTime_ ? 0 : (e - this.lastTime_) / 1e3), - (this.lastTime_ = e), - (this.pastSeekEnd_ = this.pastSeekEnd() + t), - (e = this.liveCurrentTime()), - (t = this.player_.currentTime()), - (t = - this.player_.paused() || - this.seekedBehindLive_ || - Math.abs(e - t) > this.options_.liveTolerance), - (t = !this.timeupdateSeen_ || e === 1 / 0 ? !1 : t) !== - this.behindLiveEdge_ && - ((this.behindLiveEdge_ = t), this.trigger("liveedgechange"))); - }), - (t.handleDurationchange = function () { - this.toggleTracking(); - }), - (t.toggleTracking = function () { - this.player_.duration() === 1 / 0 && - this.liveWindow() >= this.options_.trackingThreshold - ? (this.player_.options_.liveui && - this.player_.addClass("vjs-liveui"), - this.startTracking()) - : (this.player_.removeClass("vjs-liveui"), this.stopTracking()); - }), - (t.startTracking = function () { - this.isTracking() || - (this.timeupdateSeen_ || - (this.timeupdateSeen_ = this.player_.hasStarted()), - (this.trackingInterval_ = this.setInterval( - this.trackLiveHandler_, - 30, - )), - this.trackLive_(), - this.on(this.player_, ["play", "pause"], this.trackLiveHandler_), - this.timeupdateSeen_ - ? this.on(this.player_, "seeked", this.handleSeeked_) - : (this.one(this.player_, "play", this.handlePlay_), - this.one( - this.player_, - "timeupdate", - this.handleFirstTimeupdate_, - ))); - }), - (t.handleFirstTimeupdate = function () { - (this.timeupdateSeen_ = !0), - this.on(this.player_, "seeked", this.handleSeeked_); - }), - (t.handleSeeked = function () { - var e = Math.abs(this.liveCurrentTime() - this.player_.currentTime()); - (this.seekedBehindLive_ = this.nextSeekedFromUser_ && 2 < e), - (this.nextSeekedFromUser_ = !1), - this.trackLive_(); - }), - (t.handlePlay = function () { - this.one(this.player_, "timeupdate", this.seekToLiveEdge_); - }), - (t.reset_ = function () { - (this.lastTime_ = -1), - (this.pastSeekEnd_ = 0), - (this.lastSeekEnd_ = -1), - (this.behindLiveEdge_ = !0), - (this.timeupdateSeen_ = !1), - (this.seekedBehindLive_ = !1), - (this.nextSeekedFromUser_ = !1), - this.clearInterval(this.trackingInterval_), - (this.trackingInterval_ = null), - this.off(this.player_, ["play", "pause"], this.trackLiveHandler_), - this.off(this.player_, "seeked", this.handleSeeked_), - this.off(this.player_, "play", this.handlePlay_), - this.off(this.player_, "timeupdate", this.handleFirstTimeupdate_), - this.off(this.player_, "timeupdate", this.seekToLiveEdge_); - }), - (t.nextSeekedFromUser = function () { - this.nextSeekedFromUser_ = !0; - }), - (t.stopTracking = function () { - this.isTracking() && (this.reset_(), this.trigger("liveedgechange")); - }), - (t.seekableEnd = function () { - for ( - var e = this.player_.seekable(), t = [], i = e ? e.length : 0; - i--; - - ) - t.push(e.end(i)); - return t.length ? t.sort()[t.length - 1] : 1 / 0; - }), - (t.seekableStart = function () { - for ( - var e = this.player_.seekable(), t = [], i = e ? e.length : 0; - i--; - - ) - t.push(e.start(i)); - return t.length ? t.sort()[0] : 0; - }), - (t.liveWindow = function () { - var e = this.liveCurrentTime(); - return e === 1 / 0 ? 0 : e - this.seekableStart(); - }), - (t.isLive = function () { - return this.isTracking(); - }), - (t.atLiveEdge = function () { - return !this.behindLiveEdge(); - }), - (t.liveCurrentTime = function () { - return this.pastSeekEnd() + this.seekableEnd(); - }), - (t.pastSeekEnd = function () { - var e = this.seekableEnd(); - return ( - -1 !== this.lastSeekEnd_ && - e !== this.lastSeekEnd_ && - (this.pastSeekEnd_ = 0), - (this.lastSeekEnd_ = e), - this.pastSeekEnd_ - ); - }), - (t.behindLiveEdge = function () { - return this.behindLiveEdge_; - }), - (t.isTracking = function () { - return "number" == typeof this.trackingInterval_; - }), - (t.seekToLiveEdge = function () { - (this.seekedBehindLive_ = !1), - this.atLiveEdge() || - ((this.nextSeekedFromUser_ = !1), - this.player_.currentTime(this.liveCurrentTime())); - }), - (t.dispose = function () { - this.off(document, "visibilitychange", this.handleVisibilityChange_), - this.stopTracking(), - n.prototype.dispose.call(this); - }), - e - ); - })(pt), - ); - function kn(e) { - if ((n = e.el()).hasAttribute("src")) return e.triggerSourceset(n.src), 1; - var t = e.$$("source"), - i = [], - n = ""; - if (t.length) { - for (var r = 0; r < t.length; r++) { - var a = t[r].src; - a && -1 === i.indexOf(a) && i.push(a); - } - return ( - !!i.length && (1 === i.length && (n = i[0]), e.triggerSourceset(n), !0) - ); - } - } - function Cn(e, t) { - for ( - var i = {}, n = 0; - n < e.length && - !((i = Object.getOwnPropertyDescriptor(e[n], t)) && i.set && i.get); - n++ - ); - return (i.enumerable = !0), (i.configurable = !0), i; - } - function In(a) { - var t, - e, - i, - s = a.el(); - s.resetSourceWatch_ || - ((t = {}), - (e = Cn( - [ - a.el(), - window.HTMLMediaElement.prototype, - window.Element.prototype, - Ln, - ], - "innerHTML", - )), - (i = function (r) { - return function () { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - var n = r.apply(s, t); - return kn(a), n; - }; - }), - ["append", "appendChild", "insertAdjacentHTML"].forEach(function (e) { - s[e] && ((t[e] = s[e]), (s[e] = i(t[e]))); - }), - Object.defineProperty(s, "innerHTML", lt(e, { set: i(e.set) })), - (s.resetSourceWatch_ = function () { - (s.resetSourceWatch_ = null), - Object.keys(t).forEach(function (e) { - s[e] = t[e]; - }), - Object.defineProperty(s, "innerHTML", e); - }), - a.one("sourceset", s.resetSourceWatch_)); - } - function xn(i) { - var n, t, r, a; - i.featuresSourceset && - ((n = i.el()).resetSourceset_ || - ((t = Cn([i.el(), window.HTMLMediaElement.prototype, Dn], "src")), - (r = n.setAttribute), - (a = n.load), - Object.defineProperty( - n, - "src", - lt(t, { - set: function (e) { - e = t.set.call(n, e); - return i.triggerSourceset(n.src), e; - }, - }), - ), - (n.setAttribute = function (e, t) { - t = r.call(n, e, t); - return /src/i.test(e) && i.triggerSourceset(n.src), t; - }), - (n.load = function () { - var e = a.call(n); - return kn(i) || (i.triggerSourceset(""), In(i)), e; - }), - n.currentSrc ? i.triggerSourceset(n.currentSrc) : kn(i) || In(i), - (n.resetSourceset_ = function () { - (n.resetSourceset_ = null), - (n.load = a), - (n.setAttribute = r), - Object.defineProperty(n, "src", t), - n.resetSourceWatch_ && n.resetSourceWatch_(); - }))); - } - function An(t, i, n, e) { - function r(e) { - return Object.defineProperty(t, i, { - value: e, - enumerable: !0, - writable: !0, - }); - } - var a = { - configurable: !0, - enumerable: !0, - get: function () { - var e = n(); - return r(e), e; - }, - }; - return ( - (e = void 0 === e ? !0 : e) && (a.set = r), Object.defineProperty(t, i, a) - ); - } - var Pn, - Ln = Object.defineProperty({}, "innerHTML", { - get: function () { - return this.cloneNode(!0).innerHTML; - }, - set: function (e) { - var t = document.createElement(this.nodeName.toLowerCase()); - t.innerHTML = e; - for (var i = document.createDocumentFragment(); t.childNodes.length; ) - i.appendChild(t.childNodes[0]); - return ( - (this.innerText = ""), - window.Element.prototype.appendChild.call(this, i), - this.innerHTML - ); - }, - }), - Dn = Object.defineProperty({}, "src", { - get: function () { - return this.hasAttribute("src") - ? Rt(window.Element.prototype.getAttribute.call(this, "src")) - : ""; - }, - set: function (e) { - return window.Element.prototype.setAttribute.call(this, "src", e), e; - }, - }), - On = (function (l) { - function s(e, t) { - var i = l.call(this, e, t) || this, - t = e.source, - n = !1; - if ( - ((i.featuresVideoFrameCallback = - i.featuresVideoFrameCallback && "VIDEO" === i.el_.tagName), - t && - (i.el_.currentSrc !== t.src || - (e.tag && 3 === e.tag.initNetworkState_)) - ? i.setSource(t) - : i.handleLateInit_(i.el_), - e.enableSourceset && i.setupSourcesetHandling_(), - (i.isScrubbing_ = !1), - i.el_.hasChildNodes()) - ) { - for (var r = i.el_.childNodes, a = r.length, s = []; a--; ) { - var o = r[a]; - "track" === o.nodeName.toLowerCase() && - (i.featuresNativeTextTracks - ? (i.remoteTextTrackEls().addTrackElement_(o), - i.remoteTextTracks().addTrack(o.track), - i.textTracks().addTrack(o.track), - n || - i.el_.hasAttribute("crossorigin") || - !Ut(o.src) || - (n = !0)) - : s.push(o)); - } - for (var u = 0; u < s.length; u++) i.el_.removeChild(s[u]); - } - return ( - i.proxyNativeTracks_(), - i.featuresNativeTextTracks && - n && - h.warn( - "Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\nThis may prevent text tracks from loading.", - ), - i.restoreMetadataTracksInIOSNativePlayer_(), - (F || H || L) && !0 === e.nativeControlsForTouch && i.setControls(!0), - i.proxyWebkitFullscreen_(), - i.triggerReady(), - i - ); - } - mt(s, l); - var e = s.prototype; - return ( - (e.dispose = function () { - this.el_ && this.el_.resetSourceset_ && this.el_.resetSourceset_(), - s.disposeMediaElement(this.el_), - (this.options_ = null), - l.prototype.dispose.call(this); - }), - (e.setupSourcesetHandling_ = function () { - xn(this); - }), - (e.restoreMetadataTracksInIOSNativePlayer_ = function () { - function e() { - i = []; - for (var e = 0; e < n.length; e++) { - var t = n[e]; - "metadata" === t.kind && i.push({ track: t, storedMode: t.mode }); - } - } - var i, - n = this.textTracks(); - e(), - n.addEventListener("change", e), - this.on("dispose", function () { - return n.removeEventListener("change", e); - }); - function r() { - for (var e = 0; e < i.length; e++) { - var t = i[e]; - "disabled" === t.track.mode && - t.track.mode !== t.storedMode && - (t.track.mode = t.storedMode); - } - n.removeEventListener("change", r); - } - this.on("webkitbeginfullscreen", function () { - n.removeEventListener("change", e), - n.removeEventListener("change", r), - n.addEventListener("change", r); - }), - this.on("webkitendfullscreen", function () { - n.removeEventListener("change", e), - n.addEventListener("change", e), - n.removeEventListener("change", r); - }); - }), - (e.overrideNative_ = function (e, t) { - var i, - n = this; - t === this["featuresNative" + e + "Tracks"] && - (this[(i = e.toLowerCase()) + "TracksListeners_"] && - Object.keys(this[i + "TracksListeners_"]).forEach(function (e) { - n.el()[i + "Tracks"].removeEventListener( - e, - n[i + "TracksListeners_"][e], - ); - }), - (this["featuresNative" + e + "Tracks"] = !t), - (this[i + "TracksListeners_"] = null), - this.proxyNativeTracksForType_(i)); - }), - (e.overrideNativeAudioTracks = function (e) { - this.overrideNative_("Audio", e); - }), - (e.overrideNativeVideoTracks = function (e) { - this.overrideNative_("Video", e); - }), - (e.proxyNativeTracksForType_ = function (i) { - var e, - t, - n = this, - r = ai[i], - a = this.el()[r.getterName], - s = this[r.getterName](); - this["featuresNative" + r.capitalName + "Tracks"] && - a && - a.addEventListener && - ((t = function () { - for (var e = [], t = 0; t < s.length; t++) { - for (var i = !1, n = 0; n < a.length; n++) - if (a[n] === s[t]) { - i = !0; - break; - } - i || e.push(s[t]); - } - for (; e.length; ) s.removeTrack(e.shift()); - }), - (this[r.getterName + "Listeners_"] = e = - { - change: function (e) { - var t = { - type: "change", - target: s, - currentTarget: s, - srcElement: s, - }; - s.trigger(t), - "text" === i && n[si.remoteText.getterName]().trigger(t); - }, - addtrack: function (e) { - s.addTrack(e.track); - }, - removetrack: function (e) { - s.removeTrack(e.track); - }, - }), - Object.keys(e).forEach(function (t) { - var i = e[t]; - a.addEventListener(t, i), - n.on("dispose", function (e) { - return a.removeEventListener(t, i); - }); - }), - this.on("loadstart", t), - this.on("dispose", function (e) { - return n.off("loadstart", t); - })); - }), - (e.proxyNativeTracks_ = function () { - var t = this; - ai.names.forEach(function (e) { - t.proxyNativeTracksForType_(e); - }); - }), - (e.createEl = function () { - var e, - t = this.options_.tag; - (t && - (this.options_.playerElIngest || this.movingMediaElementInDOM)) || - (t - ? ((e = t.cloneNode(!0)), - t.parentNode && t.parentNode.insertBefore(e, t), - s.disposeMediaElement(t), - (t = e)) - : ((t = document.createElement("video")), - (e = lt({}, this.options_.tag && ae(this.options_.tag))), - (F && !0 === this.options_.nativeControlsForTouch) || - delete e.controls, - re(t, b(e, { id: this.options_.techId, class: "vjs-tech" }))), - (t.playerId = this.options_.playerId)), - "undefined" != typeof this.options_.preload && - oe(t, "preload", this.options_.preload), - void 0 !== this.options_.disablePictureInPicture && - (t.disablePictureInPicture = - this.options_.disablePictureInPicture); - for ( - var i = ["loop", "muted", "playsinline", "autoplay"], n = 0; - n < i.length; - n++ - ) { - var r = i[n], - a = this.options_[r]; - "undefined" != typeof a && (a ? oe(t, r, r) : ue(t, r), (t[r] = a)); - } - return t; - }), - (e.handleLateInit_ = function (e) { - if (0 !== e.networkState && 3 !== e.networkState) { - if (0 === e.readyState) { - var t = !1, - i = function () { - t = !0; - }; - this.on("loadstart", i); - var n = function () { - t || this.trigger("loadstart"); - }; - return ( - this.on("loadedmetadata", n), - void this.ready(function () { - this.off("loadstart", i), - this.off("loadedmetadata", n), - t || this.trigger("loadstart"); - }) - ); - } - var r = ["loadstart"]; - r.push("loadedmetadata"), - 2 <= e.readyState && r.push("loadeddata"), - 3 <= e.readyState && r.push("canplay"), - 4 <= e.readyState && r.push("canplaythrough"), - this.ready(function () { - r.forEach(function (e) { - this.trigger(e); - }, this); - }); - } - }), - (e.setScrubbing = function (e) { - this.isScrubbing_ = e; - }), - (e.scrubbing = function () { - return this.isScrubbing_; - }), - (e.setCurrentTime = function (e) { - try { - this.isScrubbing_ && this.el_.fastSeek && V - ? this.el_.fastSeek(e) - : (this.el_.currentTime = e); - } catch (e) { - h(e, "Video is not ready. (Video.js)"); - } - }), - (e.duration = function () { - var t = this; - return this.el_.duration === 1 / 0 && - A && - M && - 0 === this.el_.currentTime - ? (this.on("timeupdate", function e() { - 0 < t.el_.currentTime && - (t.el_.duration === 1 / 0 && t.trigger("durationchange"), - t.off("timeupdate", e)); - }), - NaN) - : this.el_.duration || NaN; - }), - (e.width = function () { - return this.el_.offsetWidth; - }), - (e.height = function () { - return this.el_.offsetHeight; - }), - (e.proxyWebkitFullscreen_ = function () { - var e, - t, - i = this; - "webkitDisplayingFullscreen" in this.el_ && - ((e = function () { - this.trigger("fullscreenchange", { isFullscreen: !1 }), - this.el_.controls && - !this.options_.nativeControlsForTouch && - this.controls() && - (this.el_.controls = !1); - }), - (t = function () { - "webkitPresentationMode" in this.el_ && - "picture-in-picture" !== this.el_.webkitPresentationMode && - (this.one("webkitendfullscreen", e), - this.trigger("fullscreenchange", { - isFullscreen: !0, - nativeIOSFullscreen: !0, - })); - }), - this.on("webkitbeginfullscreen", t), - this.on("dispose", function () { - i.off("webkitbeginfullscreen", t), - i.off("webkitendfullscreen", e); - })); - }), - (e.supportsFullScreen = function () { - if ("function" == typeof this.el_.webkitEnterFullScreen) { - var e = (window.navigator && window.navigator.userAgent) || ""; - if (/Android/.test(e) || !/Chrome|Mac OS X 10.5/.test(e)) return !0; - } - return !1; - }), - (e.enterFullScreen = function () { - var e = this.el_; - if (e.paused && e.networkState <= e.HAVE_METADATA) - Et(this.el_.play()), - this.setTimeout(function () { - e.pause(); - try { - e.webkitEnterFullScreen(); - } catch (e) { - this.trigger("fullscreenerror", e); - } - }, 0); - else - try { - e.webkitEnterFullScreen(); - } catch (e) { - this.trigger("fullscreenerror", e); - } - }), - (e.exitFullScreen = function () { - this.el_.webkitDisplayingFullscreen - ? this.el_.webkitExitFullScreen() - : this.trigger( - "fullscreenerror", - new Error("The video is not fullscreen"), - ); - }), - (e.requestPictureInPicture = function () { - return this.el_.requestPictureInPicture(); - }), - (e.requestVideoFrameCallback = function (e) { - return this.featuresVideoFrameCallback && !this.el_.webkitKeys - ? this.el_.requestVideoFrameCallback(e) - : l.prototype.requestVideoFrameCallback.call(this, e); - }), - (e.cancelVideoFrameCallback = function (e) { - this.featuresVideoFrameCallback && !this.el_.webkitKeys - ? this.el_.cancelVideoFrameCallback(e) - : l.prototype.cancelVideoFrameCallback.call(this, e); - }), - (e.src = function (e) { - if (void 0 === e) return this.el_.src; - this.setSrc(e); - }), - (e.reset = function () { - s.resetMediaElement(this.el_); - }), - (e.currentSrc = function () { - return this.currentSource_ - ? this.currentSource_.src - : this.el_.currentSrc; - }), - (e.setControls = function (e) { - this.el_.controls = !!e; - }), - (e.addTextTrack = function (e, t, i) { - return this.featuresNativeTextTracks - ? this.el_.addTextTrack(e, t, i) - : l.prototype.addTextTrack.call(this, e, t, i); - }), - (e.createRemoteTextTrack = function (e) { - if (!this.featuresNativeTextTracks) - return l.prototype.createRemoteTextTrack.call(this, e); - var t = document.createElement("track"); - return ( - e.kind && (t.kind = e.kind), - e.label && (t.label = e.label), - (e.language || e.srclang) && (t.srclang = e.language || e.srclang), - e.default && (t.default = e.default), - e.id && (t.id = e.id), - e.src && (t.src = e.src), - t - ); - }), - (e.addRemoteTextTrack = function (e, t) { - t = l.prototype.addRemoteTextTrack.call(this, e, t); - return this.featuresNativeTextTracks && this.el().appendChild(t), t; - }), - (e.removeRemoteTextTrack = function (e) { - if ( - (l.prototype.removeRemoteTextTrack.call(this, e), - this.featuresNativeTextTracks) - ) - for (var t = this.$$("track"), i = t.length; i--; ) - (e !== t[i] && e !== t[i].track) || this.el().removeChild(t[i]); - }), - (e.getVideoPlaybackQuality = function () { - if ("function" == typeof this.el().getVideoPlaybackQuality) - return this.el().getVideoPlaybackQuality(); - var e = {}; - return ( - "undefined" != typeof this.el().webkitDroppedFrameCount && - "undefined" != typeof this.el().webkitDecodedFrameCount && - ((e.droppedVideoFrames = this.el().webkitDroppedFrameCount), - (e.totalVideoFrames = this.el().webkitDecodedFrameCount)), - window.performance && "function" == typeof window.performance.now - ? (e.creationTime = window.performance.now()) - : window.performance && - window.performance.timing && - "number" == typeof window.performance.timing.navigationStart && - (e.creationTime = - window.Date.now() - - window.performance.timing.navigationStart), - e - ); - }), - s - ); - })(ji); - An(On, "TEST_VID", function () { - if (X()) { - var e = document.createElement("video"), - t = document.createElement("track"); - return ( - (t.kind = "captions"), - (t.srclang = "en"), - (t.label = "English"), - e.appendChild(t), - e - ); - } - }), - (On.isSupported = function () { - try { - On.TEST_VID.volume = 0.5; - } catch (e) { - return !1; - } - return !(!On.TEST_VID || !On.TEST_VID.canPlayType); - }), - (On.canPlayType = function (e) { - return On.TEST_VID.canPlayType(e); - }), - (On.canPlaySource = function (e, t) { - return On.canPlayType(e.type); - }), - (On.canControlVolume = function () { - try { - var e = On.TEST_VID.volume; - On.TEST_VID.volume = e / 2 + 0.1; - var t = e !== On.TEST_VID.volume; - return t && q - ? (window.setTimeout(function () { - On && - On.prototype && - (On.prototype.featuresVolumeControl = e !== On.TEST_VID.volume); - }), - !1) - : t; - } catch (e) { - return !1; - } - }), - (On.canMuteVolume = function () { - try { - var e = On.TEST_VID.muted; - return ( - (On.TEST_VID.muted = !e), - On.TEST_VID.muted - ? oe(On.TEST_VID, "muted", "muted") - : ue(On.TEST_VID, "muted"), - e !== On.TEST_VID.muted - ); - } catch (e) { - return !1; - } - }), - (On.canControlPlaybackRate = function () { - if (A && M && R < 58) return !1; - try { - var e = On.TEST_VID.playbackRate; - return ( - (On.TEST_VID.playbackRate = e / 2 + 0.1), - e !== On.TEST_VID.playbackRate - ); - } catch (e) { - return !1; - } - }), - (On.canOverrideAttributes = function () { - try { - var e = function () {}; - Object.defineProperty(document.createElement("video"), "src", { - get: e, - set: e, - }), - Object.defineProperty(document.createElement("audio"), "src", { - get: e, - set: e, - }), - Object.defineProperty(document.createElement("video"), "innerHTML", { - get: e, - set: e, - }), - Object.defineProperty(document.createElement("audio"), "innerHTML", { - get: e, - set: e, - }); - } catch (e) { - return !1; - } - return !0; - }), - (On.supportsNativeTextTracks = function () { - return V || (q && M); - }), - (On.supportsNativeVideoTracks = function () { - return !(!On.TEST_VID || !On.TEST_VID.videoTracks); - }), - (On.supportsNativeAudioTracks = function () { - return !(!On.TEST_VID || !On.TEST_VID.audioTracks); - }), - (On.Events = [ - "loadstart", - "suspend", - "abort", - "error", - "emptied", - "stalled", - "loadedmetadata", - "loadeddata", - "canplay", - "canplaythrough", - "playing", - "waiting", - "seeking", - "seeked", - "ended", - "durationchange", - "timeupdate", - "progress", - "play", - "pause", - "ratechange", - "resize", - "volumechange", - ]), - [ - ["featuresMuteControl", "canMuteVolume"], - ["featuresPlaybackRate", "canControlPlaybackRate"], - ["featuresSourceset", "canOverrideAttributes"], - ["featuresNativeTextTracks", "supportsNativeTextTracks"], - ["featuresNativeVideoTracks", "supportsNativeVideoTracks"], - ["featuresNativeAudioTracks", "supportsNativeAudioTracks"], - ].forEach(function (e) { - var t = e[0], - i = e[1]; - An( - On.prototype, - t, - function () { - return On[i](); - }, - !0, - ); - }), - (On.prototype.featuresVolumeControl = On.canControlVolume()), - (On.prototype.movingMediaElementInDOM = !q), - (On.prototype.featuresFullscreenResize = !0), - (On.prototype.featuresProgressEvents = !0), - (On.prototype.featuresTimeupdateEvents = !0), - (On.prototype.featuresVideoFrameCallback = !( - !On.TEST_VID || !On.TEST_VID.requestVideoFrameCallback - )), - (On.patchCanPlayType = function () { - 4 <= P && - !D && - !M && - ((Pn = On.TEST_VID && On.TEST_VID.constructor.prototype.canPlayType), - (On.TEST_VID.constructor.prototype.canPlayType = function (e) { - return e && /^application\/(?:x-|vnd\.apple\.)mpegurl/i.test(e) - ? "maybe" - : Pn.call(this, e); - })); - }), - (On.unpatchCanPlayType = function () { - var e = On.TEST_VID.constructor.prototype.canPlayType; - return Pn && (On.TEST_VID.constructor.prototype.canPlayType = Pn), e; - }), - On.patchCanPlayType(), - (On.disposeMediaElement = function (e) { - if (e) { - for (e.parentNode && e.parentNode.removeChild(e); e.hasChildNodes(); ) - e.removeChild(e.firstChild); - e.removeAttribute("src"), - "function" == typeof e.load && - (function () { - try { - e.load(); - } catch (e) {} - })(); - } - }), - (On.resetMediaElement = function (e) { - if (e) { - for (var t = e.querySelectorAll("source"), i = t.length; i--; ) - e.removeChild(t[i]); - e.removeAttribute("src"), - "function" == typeof e.load && - (function () { - try { - e.load(); - } catch (e) {} - })(); - } - }), - [ - "muted", - "defaultMuted", - "autoplay", - "controls", - "loop", - "playsinline", - ].forEach(function (e) { - On.prototype[e] = function () { - return this.el_[e] || this.el_.hasAttribute(e); - }; - }), - ["muted", "defaultMuted", "autoplay", "loop", "playsinline"].forEach( - function (t) { - On.prototype["set" + ut(t)] = function (e) { - (this.el_[t] = e) - ? this.el_.setAttribute(t, t) - : this.el_.removeAttribute(t); - }; - }, - ), - [ - "paused", - "currentTime", - "buffered", - "volume", - "poster", - "preload", - "error", - "seeking", - "seekable", - "ended", - "playbackRate", - "defaultPlaybackRate", - "disablePictureInPicture", - "played", - "networkState", - "readyState", - "videoWidth", - "videoHeight", - "crossOrigin", - ].forEach(function (e) { - On.prototype[e] = function () { - return this.el_[e]; - }; - }), - [ - "volume", - "src", - "poster", - "preload", - "playbackRate", - "defaultPlaybackRate", - "disablePictureInPicture", - "crossOrigin", - ].forEach(function (t) { - On.prototype["set" + ut(t)] = function (e) { - this.el_[t] = e; - }; - }), - ["pause", "load", "play"].forEach(function (e) { - On.prototype[e] = function () { - return this.el_[e](); - }; - }), - ji.withSourceHandlers(On), - (On.nativeSourceHandler = {}), - (On.nativeSourceHandler.canPlayType = function (e) { - try { - return On.TEST_VID.canPlayType(e); - } catch (e) { - return ""; - } - }), - (On.nativeSourceHandler.canHandleSource = function (e, t) { - if (e.type) return On.nativeSourceHandler.canPlayType(e.type); - if (e.src) { - e = Nt(e.src); - return On.nativeSourceHandler.canPlayType("video/" + e); - } - return ""; - }), - (On.nativeSourceHandler.handleSource = function (e, t, i) { - t.setSrc(e.src); - }), - (On.nativeSourceHandler.dispose = function () {}), - On.registerSourceHandler(On.nativeSourceHandler), - ji.registerTech("Html5", On); - var Mn = [ - "progress", - "abort", - "suspend", - "emptied", - "stalled", - "loadedmetadata", - "loadeddata", - "timeupdate", - "resize", - "volumechange", - "texttrackchange", - ], - Rn = { - canplay: "CanPlay", - canplaythrough: "CanPlayThrough", - playing: "Playing", - seeked: "Seeked", - }, - Nn = ["tiny", "xsmall", "small", "medium", "large", "xlarge", "huge"], - Un = {}; - Nn.forEach(function (e) { - var t = "x" === e.charAt(0) ? "x-" + e.substring(1) : e; - Un[e] = "vjs-layout-" + t; - }); - var Bn = { - tiny: 210, - xsmall: 320, - small: 425, - medium: 768, - large: 1440, - xlarge: 2560, - huge: 1 / 0, - }, - Fn = (function (c) { - function o(e, t, i) { - var n, r; - if ( - ((e.id = e.id || t.id || "vjs_video_" + Pe++), - ((t = b(o.getTagSettings(e), t)).initChildren = !1), - (t.createEl = !1), - (t.evented = !1), - (t.reportTouchActivity = !1), - !t.language) - ) - if ("function" == typeof e.closest) { - var a = e.closest("[lang]"); - a && a.getAttribute && (t.language = a.getAttribute("lang")); - } else - for (var s = e; s && 1 === s.nodeType; ) { - if (ae(s).hasOwnProperty("lang")) { - t.language = s.getAttribute("lang"); - break; - } - s = s.parentNode; - } - if ( - (((n = - c.call(this, null, t, i) || this).boundDocumentFullscreenChange_ = - function (e) { - return n.documentFullscreenChange_(e); - }), - (n.boundFullWindowOnEscKey_ = function (e) { - return n.fullWindowOnEscKey(e); - }), - (n.boundUpdateStyleEl_ = function (e) { - return n.updateStyleEl_(e); - }), - (n.boundApplyInitTime_ = function (e) { - return n.applyInitTime_(e); - }), - (n.boundUpdateCurrentBreakpoint_ = function (e) { - return n.updateCurrentBreakpoint_(e); - }), - (n.boundHandleTechClick_ = function (e) { - return n.handleTechClick_(e); - }), - (n.boundHandleTechDoubleClick_ = function (e) { - return n.handleTechDoubleClick_(e); - }), - (n.boundHandleTechTouchStart_ = function (e) { - return n.handleTechTouchStart_(e); - }), - (n.boundHandleTechTouchMove_ = function (e) { - return n.handleTechTouchMove_(e); - }), - (n.boundHandleTechTouchEnd_ = function (e) { - return n.handleTechTouchEnd_(e); - }), - (n.boundHandleTechTap_ = function (e) { - return n.handleTechTap_(e); - }), - (n.isFullscreen_ = !1), - (n.log = p(n.id_)), - (n.fsApi_ = l), - (n.isPosterFromTech_ = !1), - (n.queuedCallbacks_ = []), - (n.isReady_ = !1), - (n.hasStarted_ = !1), - (n.userActive_ = !1), - (n.debugEnabled_ = !1), - (n.audioOnlyMode_ = !1), - (n.audioPosterMode_ = !1), - (n.audioOnlyCache_ = { playerHeight: null, hiddenChildren: [] }), - !n.options_ || !n.options_.techOrder || !n.options_.techOrder.length) - ) - throw new Error( - "No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?", - ); - (n.tag = e), - (n.tagAttributes = e && ae(e)), - n.language(n.options_.language), - t.languages - ? ((r = {}), - Object.getOwnPropertyNames(t.languages).forEach(function (e) { - r[e.toLowerCase()] = t.languages[e]; - }), - (n.languages_ = r)) - : (n.languages_ = o.prototype.options_.languages), - n.resetCache_(), - (n.poster_ = t.poster || ""), - (n.controls_ = !!t.controls), - (e.controls = !1), - e.removeAttribute("controls"), - (n.changingSrc_ = !1), - (n.playCallbacks_ = []), - (n.playTerminatedQueue_ = []), - e.hasAttribute("autoplay") - ? n.autoplay(!0) - : n.autoplay(n.options_.autoplay), - t.plugins && - Object.keys(t.plugins).forEach(function (e) { - if ("function" != typeof n[e]) - throw new Error('plugin "' + e + '" does not exist'); - }), - (n.scrubbing_ = !1), - (n.el_ = n.createEl()), - rt(ft(n), { eventBusKey: "el_" }), - n.fsApi_.requestFullscreen && - (Be( - document, - n.fsApi_.fullscreenchange, - n.boundDocumentFullscreenChange_, - ), - n.on(n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_)), - n.fluid_ && n.on(["playerreset", "resize"], n.boundUpdateStyleEl_); - i = lt(n.options_); - t.plugins && - Object.keys(t.plugins).forEach(function (e) { - n[e](t.plugins[e]); - }), - t.debug && n.debug(!0), - (n.options_.playerOptions = i), - (n.middleware_ = []), - n.playbackRates(t.playbackRates), - n.initChildren(), - n.isAudio("audio" === e.nodeName.toLowerCase()), - n.controls() - ? n.addClass("vjs-controls-enabled") - : n.addClass("vjs-controls-disabled"), - n.el_.setAttribute("role", "region"), - n.isAudio() - ? n.el_.setAttribute("aria-label", n.localize("Audio Player")) - : n.el_.setAttribute("aria-label", n.localize("Video Player")), - n.isAudio() && n.addClass("vjs-audio"), - n.flexNotSupported_() && n.addClass("vjs-no-flex"), - F && n.addClass("vjs-touch-enabled"), - q || n.addClass("vjs-workinghover"), - (o.players[n.id_] = ft(n)); - e = u.split(".")[0]; - return ( - n.addClass("vjs-v" + e), - n.userActive(!0), - n.reportUserActivity(), - n.one("play", function (e) { - return n.listenForUserActivity_(e); - }), - n.on("stageclick", function (e) { - return n.handleStageClick_(e); - }), - n.on("keydown", function (e) { - return n.handleKeyDown(e); - }), - n.on("languagechange", function (e) { - return n.handleLanguagechange(e); - }), - n.breakpoints(n.options_.breakpoints), - n.responsive(n.options_.responsive), - n.on("ready", function () { - n.audioPosterMode(n.options_.audioPosterMode), - n.audioOnlyMode(n.options_.audioOnlyMode); - }), - n - ); - } - mt(o, c); - var e = o.prototype; - return ( - (e.dispose = function () { - var t = this; - this.trigger("dispose"), - this.off("dispose"), - Fe( - document, - this.fsApi_.fullscreenchange, - this.boundDocumentFullscreenChange_, - ), - Fe(document, "keydown", this.boundFullWindowOnEscKey_), - this.styleEl_ && - this.styleEl_.parentNode && - (this.styleEl_.parentNode.removeChild(this.styleEl_), - (this.styleEl_ = null)), - (o.players[this.id_] = null), - this.tag && this.tag.player && (this.tag.player = null), - this.el_ && this.el_.player && (this.el_.player = null), - this.tech_ && - (this.tech_.dispose(), - (this.isPosterFromTech_ = !1), - (this.poster_ = "")), - this.playerElIngest_ && (this.playerElIngest_ = null), - this.tag && (this.tag = null), - (qi[this.id()] = null), - oi.names.forEach(function (e) { - (e = oi[e]), (e = t[e.getterName]()); - e && e.off && e.off(); - }), - c.prototype.dispose.call(this, { - restoreEl: this.options_.restoreEl, - }); - }), - (e.createEl = function () { - var t, - i = this.tag, - e = (this.playerElIngest_ = - i.parentNode && - i.parentNode.hasAttribute && - i.parentNode.hasAttribute("data-vjs-player")), - n = "video-js" === this.tag.tagName.toLowerCase(); - e - ? (t = this.el_ = i.parentNode) - : n || (t = this.el_ = c.prototype.createEl.call(this, "div")); - var r, - a, - s = ae(i); - if (n) { - for ( - t = this.el_ = i, i = this.tag = document.createElement("video"); - t.children.length; - - ) - i.appendChild(t.firstChild); - ee(t, "video-js") || te(t, "video-js"), - t.appendChild(i), - (e = this.playerElIngest_ = t), - Object.keys(t).forEach(function (e) { - try { - i[e] = t[e]; - } catch (e) {} - }); - } - i.setAttribute("tabindex", "-1"), - (s.tabindex = "-1"), - (N || (M && B)) && - (i.setAttribute("role", "application"), (s.role = "application")), - i.removeAttribute("width"), - i.removeAttribute("height"), - "width" in s && delete s.width, - "height" in s && delete s.height, - Object.getOwnPropertyNames(s).forEach(function (e) { - (n && "class" === e) || t.setAttribute(e, s[e]), - n && i.setAttribute(e, s[e]); - }), - (i.playerId = i.id), - (i.id += "_html5_api"), - (i.className = "vjs-tech"), - (i.player = t.player = this).addClass("vjs-paused"), - !0 !== window.VIDEOJS_NO_DYNAMIC_STYLE && - ((this.styleEl_ = xe("vjs-styles-dimensions")), - (r = Te(".vjs-styles-defaults")), - (a = Te("head")).insertBefore( - this.styleEl_, - r ? r.nextSibling : a.firstChild, - )), - (this.fill_ = !1), - (this.fluid_ = !1), - this.width(this.options_.width), - this.height(this.options_.height), - this.fill(this.options_.fill), - this.fluid(this.options_.fluid), - this.aspectRatio(this.options_.aspectRatio), - this.crossOrigin( - this.options_.crossOrigin || this.options_.crossorigin, - ); - for (var o = i.getElementsByTagName("a"), u = 0; u < o.length; u++) { - var l = o.item(u); - te(l, "vjs-hidden"), l.setAttribute("hidden", "hidden"); - } - return ( - (i.initNetworkState_ = i.networkState), - i.parentNode && !e && i.parentNode.insertBefore(t, i), - Z(i, t), - this.children_.unshift(i), - this.el_.setAttribute("lang", this.language_), - this.el_.setAttribute("translate", "no"), - (this.el_ = t) - ); - }), - (e.crossOrigin = function (e) { - if (!e) return this.techGet_("crossOrigin"); - "anonymous" === e || "use-credentials" === e - ? this.techCall_("setCrossOrigin", e) - : h.warn( - 'crossOrigin must be "anonymous" or "use-credentials", given "' + - e + - '"', - ); - }), - (e.width = function (e) { - return this.dimension("width", e); - }), - (e.height = function (e) { - return this.dimension("height", e); - }), - (e.dimension = function (e, t) { - var i = e + "_"; - if (void 0 === t) return this[i] || 0; - if ("" === t || "auto" === t) - return (this[i] = void 0), void this.updateStyleEl_(); - var n = parseFloat(t); - isNaN(n) - ? h.error('Improper value "' + t + '" supplied for for ' + e) - : ((this[i] = n), this.updateStyleEl_()); - }), - (e.fluid = function (e) { - var t, - i = this; - if (void 0 === e) return !!this.fluid_; - (this.fluid_ = !!e), - it(this) && - this.off(["playerreset", "resize"], this.boundUpdateStyleEl_), - e - ? (this.addClass("vjs-fluid"), - this.fill(!1), - (t = function () { - i.on(["playerreset", "resize"], i.boundUpdateStyleEl_); - }), - it((e = this)) - ? t() - : (e.eventedCallbacks || (e.eventedCallbacks = []), - e.eventedCallbacks.push(t))) - : this.removeClass("vjs-fluid"), - this.updateStyleEl_(); - }), - (e.fill = function (e) { - if (void 0 === e) return !!this.fill_; - (this.fill_ = !!e), - e - ? (this.addClass("vjs-fill"), this.fluid(!1)) - : this.removeClass("vjs-fill"); - }), - (e.aspectRatio = function (e) { - if (void 0 === e) return this.aspectRatio_; - if (!/^\d+\:\d+$/.test(e)) - throw new Error( - "Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.", - ); - (this.aspectRatio_ = e), this.fluid(!0), this.updateStyleEl_(); - }), - (e.updateStyleEl_ = function () { - var e, t, i, n; - !0 !== window.VIDEOJS_NO_DYNAMIC_STYLE - ? ((n = - (i = ( - void 0 !== this.aspectRatio_ && "auto" !== this.aspectRatio_ - ? this.aspectRatio_ - : 0 < this.videoWidth() - ? this.videoWidth() + ":" + this.videoHeight() - : "16:9" - ).split(":"))[1] / i[0]), - (e = - void 0 !== this.width_ - ? this.width_ - : void 0 !== this.height_ - ? this.height_ / n - : this.videoWidth() || 300), - (t = void 0 !== this.height_ ? this.height_ : e * n), - (i = /^[^a-zA-Z]/.test(this.id()) - ? "dimensions-" + this.id() - : this.id() + "-dimensions"), - this.addClass(i), - Ae( - this.styleEl_, - "\n ." + - i + - " {\n width: " + - e + - "px;\n height: " + - t + - "px;\n }\n\n ." + - i + - ".vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: " + - 100 * n + - "%;\n }\n ", - )) - : ((t = - "number" == typeof this.width_ - ? this.width_ - : this.options_.width), - (i = - "number" == typeof this.height_ - ? this.height_ - : this.options_.height), - (n = this.tech_ && this.tech_.el()) && - (0 <= t && (n.width = t), 0 <= i && (n.height = i))); - }), - (e.loadTech_ = function (e, t) { - var i = this; - this.tech_ && this.unloadTech_(); - var n = ut(e), - r = e.charAt(0).toLowerCase() + e.slice(1); - "Html5" !== n && - this.tag && - (ji.getTech("Html5").disposeMediaElement(this.tag), - (this.tag.player = null), - (this.tag = null)), - (this.techName_ = n), - (this.isReady_ = !1); - var a = this.autoplay(), - s = { - source: t, - autoplay: (a = - "string" == typeof this.autoplay() || - (!0 === this.autoplay() && this.options_.normalizeAutoplay) - ? !1 - : a), - nativeControlsForTouch: this.options_.nativeControlsForTouch, - playerId: this.id(), - techId: this.id() + "_" + r + "_api", - playsinline: this.options_.playsinline, - preload: this.options_.preload, - loop: this.options_.loop, - disablePictureInPicture: this.options_.disablePictureInPicture, - muted: this.options_.muted, - poster: this.poster(), - language: this.language(), - playerElIngest: this.playerElIngest_ || !1, - "vtt.js": this.options_["vtt.js"], - canOverridePoster: !!this.options_.techCanOverridePoster, - enableSourceset: this.options_.enableSourceset, - Promise: this.options_.Promise, - }; - oi.names.forEach(function (e) { - e = oi[e]; - s[e.getterName] = i[e.privateName]; - }), - b(s, this.options_[n]), - b(s, this.options_[r]), - b(s, this.options_[e.toLowerCase()]), - this.tag && (s.tag = this.tag), - t && - t.src === this.cache_.src && - 0 < this.cache_.currentTime && - (s.startTime = this.cache_.currentTime); - e = ji.getTech(e); - if (!e) - throw new Error( - "No Tech named '" + - n + - "' exists! '" + - n + - "' should be registered using videojs.registerTech()'", - ); - (this.tech_ = new e(s)), - this.tech_.ready(Ve(this, this.handleTechReady_), !0), - It(this.textTracksJson_ || [], this.tech_), - Mn.forEach(function (t) { - i.on(i.tech_, t, function (e) { - return i["handleTech" + ut(t) + "_"](e); - }); - }), - Object.keys(Rn).forEach(function (t) { - i.on(i.tech_, t, function (e) { - 0 === i.tech_.playbackRate() && i.tech_.seeking() - ? i.queuedCallbacks_.push({ - callback: i["handleTech" + Rn[t] + "_"].bind(i), - event: e, - }) - : i["handleTech" + Rn[t] + "_"](e); - }); - }), - this.on(this.tech_, "loadstart", function (e) { - return i.handleTechLoadStart_(e); - }), - this.on(this.tech_, "sourceset", function (e) { - return i.handleTechSourceset_(e); - }), - this.on(this.tech_, "waiting", function (e) { - return i.handleTechWaiting_(e); - }), - this.on(this.tech_, "ended", function (e) { - return i.handleTechEnded_(e); - }), - this.on(this.tech_, "seeking", function (e) { - return i.handleTechSeeking_(e); - }), - this.on(this.tech_, "play", function (e) { - return i.handleTechPlay_(e); - }), - this.on(this.tech_, "firstplay", function (e) { - return i.handleTechFirstPlay_(e); - }), - this.on(this.tech_, "pause", function (e) { - return i.handleTechPause_(e); - }), - this.on(this.tech_, "durationchange", function (e) { - return i.handleTechDurationChange_(e); - }), - this.on(this.tech_, "fullscreenchange", function (e, t) { - return i.handleTechFullscreenChange_(e, t); - }), - this.on(this.tech_, "fullscreenerror", function (e, t) { - return i.handleTechFullscreenError_(e, t); - }), - this.on(this.tech_, "enterpictureinpicture", function (e) { - return i.handleTechEnterPictureInPicture_(e); - }), - this.on(this.tech_, "leavepictureinpicture", function (e) { - return i.handleTechLeavePictureInPicture_(e); - }), - this.on(this.tech_, "error", function (e) { - return i.handleTechError_(e); - }), - this.on(this.tech_, "posterchange", function (e) { - return i.handleTechPosterChange_(e); - }), - this.on(this.tech_, "textdata", function (e) { - return i.handleTechTextData_(e); - }), - this.on(this.tech_, "ratechange", function (e) { - return i.handleTechRateChange_(e); - }), - this.on(this.tech_, "loadedmetadata", this.boundUpdateStyleEl_), - this.usingNativeControls(this.techGet_("controls")), - this.controls() && - !this.usingNativeControls() && - this.addTechControlsListeners_(), - this.tech_.el().parentNode === this.el() || - ("Html5" === n && this.tag) || - Z(this.tech_.el(), this.el()), - this.tag && ((this.tag.player = null), (this.tag = null)); - }), - (e.unloadTech_ = function () { - var t = this; - oi.names.forEach(function (e) { - e = oi[e]; - t[e.privateName] = t[e.getterName](); - }), - (this.textTracksJson_ = Ct(this.tech_)), - (this.isReady_ = !1), - this.tech_.dispose(), - (this.tech_ = !1), - this.isPosterFromTech_ && - ((this.poster_ = ""), this.trigger("posterchange")), - (this.isPosterFromTech_ = !1); - }), - (e.tech = function (e) { - return ( - void 0 === e && - h.warn( - "Using the tech directly can be dangerous. I hope you know what you're doing.\nSee https://github.com/videojs/video.js/issues/2617 for more info.\n", - ), - this.tech_ - ); - }), - (e.addTechControlsListeners_ = function () { - this.removeTechControlsListeners_(), - this.on(this.tech_, "click", this.boundHandleTechClick_), - this.on(this.tech_, "dblclick", this.boundHandleTechDoubleClick_), - this.on(this.tech_, "touchstart", this.boundHandleTechTouchStart_), - this.on(this.tech_, "touchmove", this.boundHandleTechTouchMove_), - this.on(this.tech_, "touchend", this.boundHandleTechTouchEnd_), - this.on(this.tech_, "tap", this.boundHandleTechTap_); - }), - (e.removeTechControlsListeners_ = function () { - this.off(this.tech_, "tap", this.boundHandleTechTap_), - this.off(this.tech_, "touchstart", this.boundHandleTechTouchStart_), - this.off(this.tech_, "touchmove", this.boundHandleTechTouchMove_), - this.off(this.tech_, "touchend", this.boundHandleTechTouchEnd_), - this.off(this.tech_, "click", this.boundHandleTechClick_), - this.off(this.tech_, "dblclick", this.boundHandleTechDoubleClick_); - }), - (e.handleTechReady_ = function () { - this.triggerReady(), - this.cache_.volume && - this.techCall_("setVolume", this.cache_.volume), - this.handleTechPosterChange_(), - this.handleTechDurationChange_(); - }), - (e.handleTechLoadStart_ = function () { - this.removeClass("vjs-ended"), - this.removeClass("vjs-seeking"), - this.error(null), - this.handleTechDurationChange_(), - this.paused() - ? (this.hasStarted(!1), this.trigger("loadstart")) - : (this.trigger("loadstart"), this.trigger("firstplay")), - this.manualAutoplay_( - !0 === this.autoplay() && this.options_.normalizeAutoplay - ? "play" - : this.autoplay(), - ); - }), - (e.manualAutoplay_ = function (e) { - var n = this; - if (this.tech_ && "string" == typeof e) { - var t, - i = function () { - var e = n.muted(); - n.muted(!0); - function t() { - n.muted(e); - } - n.playTerminatedQueue_.push(t); - var i = n.play(); - if (wt(i)) - return i.catch(function (e) { - throw ( - (t(), - new Error( - "Rejection at manualAutoplay. Restoring muted value. " + - (e || ""), - )) - ); - }); - }; - if ( - ("any" !== e || this.muted() - ? (t = "muted" !== e || this.muted() ? this.play() : i()) - : wt((t = this.play())) && (t = t.catch(i)), - wt(t)) - ) - return t - .then(function () { - n.trigger({ type: "autoplay-success", autoplay: e }); - }) - .catch(function () { - n.trigger({ type: "autoplay-failure", autoplay: e }); - }); - } - }), - (e.updateSourceCaches_ = function (e) { - var t = (e = void 0 === e ? "" : e), - i = ""; - "string" != typeof t && ((t = e.src), (i = e.type)), - (this.cache_.source = this.cache_.source || {}), - (this.cache_.sources = this.cache_.sources || []), - t && - !i && - (i = (function (e, t) { - if (!t) return ""; - if (e.cache_.source.src === t && e.cache_.source.type) - return e.cache_.source.type; - var i = e.cache_.sources.filter(function (e) { - return e.src === t; - }); - if (i.length) return i[0].type; - for (var n = e.$$("source"), r = 0; r < n.length; r++) { - var a = n[r]; - if (a.type && a.src && a.src === t) return a.type; - } - return $i(t); - })(this, t)), - (this.cache_.source = lt({}, e, { src: t, type: i })); - for ( - var i = this.cache_.sources.filter(function (e) { - return e.src && e.src === t; - }), - n = [], - r = this.$$("source"), - a = [], - s = 0; - s < r.length; - s++ - ) { - var o = ae(r[s]); - n.push(o), o.src && o.src === t && a.push(o.src); - } - a.length && !i.length - ? (this.cache_.sources = n) - : i.length || (this.cache_.sources = [this.cache_.source]), - (this.cache_.src = t); - }), - (e.handleTechSourceset_ = function (e) { - var t, - i, - n, - r = this; - this.changingSrc_ || - ((t = function (e) { - return r.updateSourceCaches_(e); - }), - (i = this.currentSource().src), - (n = e.src), - i && - !/^blob:/.test(i) && - /^blob:/.test(n) && - ((this.lastSource_ && - (this.lastSource_.tech === n || - this.lastSource_.player === i)) || - (t = function () {})), - t(n), - e.src || - this.tech_.any(["sourceset", "loadstart"], function (e) { - "sourceset" !== e.type && - ((e = r.techGet("currentSrc")), - (r.lastSource_.tech = e), - r.updateSourceCaches_(e)); - })), - (this.lastSource_ = { - player: this.currentSource().src, - tech: e.src, - }), - this.trigger({ src: e.src, type: "sourceset" }); - }), - (e.hasStarted = function (e) { - if (void 0 === e) return this.hasStarted_; - e !== this.hasStarted_ && - ((this.hasStarted_ = e), - this.hasStarted_ - ? (this.addClass("vjs-has-started"), this.trigger("firstplay")) - : this.removeClass("vjs-has-started")); - }), - (e.handleTechPlay_ = function () { - this.removeClass("vjs-ended"), - this.removeClass("vjs-paused"), - this.addClass("vjs-playing"), - this.hasStarted(!0), - this.trigger("play"); - }), - (e.handleTechRateChange_ = function () { - 0 < this.tech_.playbackRate() && - 0 === this.cache_.lastPlaybackRate && - (this.queuedCallbacks_.forEach(function (e) { - return e.callback(e.event); - }), - (this.queuedCallbacks_ = [])), - (this.cache_.lastPlaybackRate = this.tech_.playbackRate()), - this.trigger("ratechange"); - }), - (e.handleTechWaiting_ = function () { - var t = this; - this.addClass("vjs-waiting"), this.trigger("waiting"); - var i = this.currentTime(); - this.on("timeupdate", function e() { - i !== t.currentTime() && - (t.removeClass("vjs-waiting"), t.off("timeupdate", e)); - }); - }), - (e.handleTechCanPlay_ = function () { - this.removeClass("vjs-waiting"), this.trigger("canplay"); - }), - (e.handleTechCanPlayThrough_ = function () { - this.removeClass("vjs-waiting"), this.trigger("canplaythrough"); - }), - (e.handleTechPlaying_ = function () { - this.removeClass("vjs-waiting"), this.trigger("playing"); - }), - (e.handleTechSeeking_ = function () { - this.addClass("vjs-seeking"), this.trigger("seeking"); - }), - (e.handleTechSeeked_ = function () { - this.removeClass("vjs-seeking"), - this.removeClass("vjs-ended"), - this.trigger("seeked"); - }), - (e.handleTechFirstPlay_ = function () { - this.options_.starttime && - (h.warn( - "Passing the `starttime` option to the player will be deprecated in 6.0", - ), - this.currentTime(this.options_.starttime)), - this.addClass("vjs-has-started"), - this.trigger("firstplay"); - }), - (e.handleTechPause_ = function () { - this.removeClass("vjs-playing"), - this.addClass("vjs-paused"), - this.trigger("pause"); - }), - (e.handleTechEnded_ = function () { - this.addClass("vjs-ended"), - this.removeClass("vjs-waiting"), - this.options_.loop - ? (this.currentTime(0), this.play()) - : this.paused() || this.pause(), - this.trigger("ended"); - }), - (e.handleTechDurationChange_ = function () { - this.duration(this.techGet_("duration")); - }), - (e.handleTechClick_ = function (e) { - this.controls_ && - ((void 0 !== this.options_ && - void 0 !== this.options_.userActions && - void 0 !== this.options_.userActions.click && - !1 === this.options_.userActions.click) || - (void 0 !== this.options_ && - void 0 !== this.options_.userActions && - "function" == typeof this.options_.userActions.click - ? this.options_.userActions.click.call(this, e) - : this.paused() - ? Et(this.play()) - : this.pause())); - }), - (e.handleTechDoubleClick_ = function (t) { - this.controls_ && - (Array.prototype.some.call( - this.$$(".vjs-control-bar, .vjs-modal-dialog"), - function (e) { - return e.contains(t.target); - }, - ) || - (void 0 !== this.options_ && - void 0 !== this.options_.userActions && - void 0 !== this.options_.userActions.doubleClick && - !1 === this.options_.userActions.doubleClick) || - (void 0 !== this.options_ && - void 0 !== this.options_.userActions && - "function" == typeof this.options_.userActions.doubleClick - ? this.options_.userActions.doubleClick.call(this, t) - : this.isFullscreen() - ? this.exitFullscreen() - : this.requestFullscreen())); - }), - (e.handleTechTap_ = function () { - this.userActive(!this.userActive()); - }), - (e.handleTechTouchStart_ = function () { - this.userWasActive = this.userActive(); - }), - (e.handleTechTouchMove_ = function () { - this.userWasActive && this.reportUserActivity(); - }), - (e.handleTechTouchEnd_ = function (e) { - e.cancelable && e.preventDefault(); - }), - (e.handleStageClick_ = function () { - this.reportUserActivity(); - }), - (e.toggleFullscreenClass_ = function () { - this.isFullscreen() - ? this.addClass("vjs-fullscreen") - : this.removeClass("vjs-fullscreen"); - }), - (e.documentFullscreenChange_ = function (e) { - var t = e.target.player; - (t && t !== this) || - ((e = this.el()), - !(t = document[this.fsApi_.fullscreenElement] === e) && e.matches - ? (t = e.matches(":" + this.fsApi_.fullscreen)) - : !t && - e.msMatchesSelector && - (t = e.msMatchesSelector(":" + this.fsApi_.fullscreen)), - this.isFullscreen(t)); - }), - (e.handleTechFullscreenChange_ = function (e, t) { - var i = this; - t && - (t.nativeIOSFullscreen && - (this.addClass("vjs-ios-native-fs"), - this.tech_.one("webkitendfullscreen", function () { - i.removeClass("vjs-ios-native-fs"); - })), - this.isFullscreen(t.isFullscreen)); - }), - (e.handleTechFullscreenError_ = function (e, t) { - this.trigger("fullscreenerror", t); - }), - (e.togglePictureInPictureClass_ = function () { - this.isInPictureInPicture() - ? this.addClass("vjs-picture-in-picture") - : this.removeClass("vjs-picture-in-picture"); - }), - (e.handleTechEnterPictureInPicture_ = function (e) { - this.isInPictureInPicture(!0); - }), - (e.handleTechLeavePictureInPicture_ = function (e) { - this.isInPictureInPicture(!1); - }), - (e.handleTechError_ = function () { - var e = this.tech_.error(); - this.error(e); - }), - (e.handleTechTextData_ = function () { - this.trigger("textdata", 1 < arguments.length ? arguments[1] : null); - }), - (e.getCache = function () { - return this.cache_; - }), - (e.resetCache_ = function () { - this.cache_ = { - currentTime: 0, - initTime: 0, - inactivityTimeout: this.options_.inactivityTimeout, - duration: NaN, - lastVolume: 1, - lastPlaybackRate: this.defaultPlaybackRate(), - media: null, - src: "", - source: {}, - sources: [], - playbackRates: [], - volume: 1, - }; - }), - (e.techCall_ = function (n, r) { - this.ready(function () { - if (n in Xi) - return ( - (e = this.middleware_), - (t = this.tech_), - (i = r), - t[(t = n)](e.reduce(Yi(t), i)) - ); - if (n in Ki) return Gi(this.middleware_, this.tech_, n, r); - var e, t, i; - try { - this.tech_ && this.tech_[n](r); - } catch (e) { - throw (h(e), e); - } - }, !0); - }), - (e.techGet_ = function (t) { - if (this.tech_ && this.tech_.isReady_) { - if (t in zi) - return ( - (e = this.middleware_), - (i = this.tech_), - (n = t), - e.reduceRight(Yi(n), i[n]()) - ); - if (t in Ki) return Gi(this.middleware_, this.tech_, t); - var e, i, n; - try { - return this.tech_[t](); - } catch (e) { - if (void 0 === this.tech_[t]) - throw ( - (h( - "Video.js: " + - t + - " method not defined for " + - this.techName_ + - " playback technology.", - e, - ), - e) - ); - if ("TypeError" === e.name) - throw ( - (h( - "Video.js: " + - t + - " unavailable on " + - this.techName_ + - " playback technology element.", - e, - ), - (this.tech_.isReady_ = !1), - e) - ); - throw (h(e), e); - } - } - }), - (e.play = function () { - var t = this, - e = this.options_.Promise || window.Promise; - return e - ? new e(function (e) { - t.play_(e); - }) - : this.play_(); - }), - (e.play_ = function (e) { - var t = this; - this.playCallbacks_.push((e = void 0 === e ? Et : e)); - e = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); - if ( - (this.waitToPlay_ && - (this.off(["ready", "loadstart"], this.waitToPlay_), - (this.waitToPlay_ = null)), - !this.isReady_ || !e) - ) - return ( - (this.waitToPlay_ = function (e) { - t.play_(); - }), - this.one(["ready", "loadstart"], this.waitToPlay_), - void (e || (!V && !q) || this.load()) - ); - e = this.techGet_("play"); - null === e - ? this.runPlayTerminatedQueue_() - : this.runPlayCallbacks_(e); - }), - (e.runPlayTerminatedQueue_ = function () { - var e = this.playTerminatedQueue_.slice(0); - (this.playTerminatedQueue_ = []), - e.forEach(function (e) { - e(); - }); - }), - (e.runPlayCallbacks_ = function (t) { - var e = this.playCallbacks_.slice(0); - (this.playCallbacks_ = []), - (this.playTerminatedQueue_ = []), - e.forEach(function (e) { - e(t); - }); - }), - (e.pause = function () { - this.techCall_("pause"); - }), - (e.paused = function () { - return !1 !== this.techGet_("paused"); - }), - (e.played = function () { - return this.techGet_("played") || vt(0, 0); - }), - (e.scrubbing = function (e) { - if ("undefined" == typeof e) return this.scrubbing_; - (this.scrubbing_ = !!e), - this.techCall_("setScrubbing", this.scrubbing_), - e - ? this.addClass("vjs-scrubbing") - : this.removeClass("vjs-scrubbing"); - }), - (e.currentTime = function (e) { - return "undefined" != typeof e - ? (e < 0 && (e = 0), - this.isReady_ && - !this.changingSrc_ && - this.tech_ && - this.tech_.isReady_ - ? (this.techCall_("setCurrentTime", e), - void (this.cache_.initTime = 0)) - : ((this.cache_.initTime = e), - this.off("canplay", this.boundApplyInitTime_), - void this.one("canplay", this.boundApplyInitTime_))) - : ((this.cache_.currentTime = this.techGet_("currentTime") || 0), - this.cache_.currentTime); - }), - (e.applyInitTime_ = function () { - this.currentTime(this.cache_.initTime); - }), - (e.duration = function (e) { - if (void 0 === e) - return void 0 !== this.cache_.duration ? this.cache_.duration : NaN; - (e = (e = parseFloat(e)) < 0 ? 1 / 0 : e) !== this.cache_.duration && - ((this.cache_.duration = e) === 1 / 0 - ? this.addClass("vjs-live") - : this.removeClass("vjs-live"), - isNaN(e) || this.trigger("durationchange")); - }), - (e.remainingTime = function () { - return this.duration() - this.currentTime(); - }), - (e.remainingTimeDisplay = function () { - return Math.floor(this.duration()) - Math.floor(this.currentTime()); - }), - (e.buffered = function () { - var e; - return (e = - !(e = this.techGet_("buffered")) || !e.length ? vt(0, 0) : e); - }), - (e.bufferedPercent = function () { - return _t(this.buffered(), this.duration()); - }), - (e.bufferedEnd = function () { - var e = this.buffered(), - t = this.duration(), - e = e.end(e.length - 1); - return (e = t < e ? t : e); - }), - (e.volume = function (e) { - var t; - return void 0 !== e - ? ((t = Math.max(0, Math.min(1, parseFloat(e)))), - (this.cache_.volume = t), - this.techCall_("setVolume", t), - void (0 < t && this.lastVolume_(t))) - : ((t = parseFloat(this.techGet_("volume"))), isNaN(t) ? 1 : t); - }), - (e.muted = function (e) { - if (void 0 === e) return this.techGet_("muted") || !1; - this.techCall_("setMuted", e); - }), - (e.defaultMuted = function (e) { - return void 0 !== e - ? this.techCall_("setDefaultMuted", e) - : this.techGet_("defaultMuted") || !1; - }), - (e.lastVolume_ = function (e) { - if (void 0 === e || 0 === e) return this.cache_.lastVolume; - this.cache_.lastVolume = e; - }), - (e.supportsFullScreen = function () { - return this.techGet_("supportsFullScreen") || !1; - }), - (e.isFullscreen = function (e) { - if (void 0 === e) return this.isFullscreen_; - var t = this.isFullscreen_; - (this.isFullscreen_ = Boolean(e)), - this.isFullscreen_ !== t && - this.fsApi_.prefixed && - this.trigger("fullscreenchange"), - this.toggleFullscreenClass_(); - }), - (e.requestFullscreen = function (s) { - var e = this.options_.Promise || window.Promise; - if (e) { - var o = this; - return new e(function (e, i) { - function n() { - o.off("fullscreenerror", r), o.off("fullscreenchange", t); - } - function t() { - n(), e(); - } - function r(e, t) { - n(), i(t); - } - o.one("fullscreenchange", t), o.one("fullscreenerror", r); - var a = o.requestFullscreenHelper_(s); - a && (a.then(n, n), a.then(e, i)); - }); - } - return this.requestFullscreenHelper_(); - }), - (e.requestFullscreenHelper_ = function (e) { - var t = this; - if ( - (this.fsApi_.prefixed || - ((i = - (this.options_.fullscreen && - this.options_.fullscreen.options) || - {}), - void 0 !== e && (i = e)), - this.fsApi_.requestFullscreen) - ) { - var i = this.el_[this.fsApi_.requestFullscreen](i); - return ( - i && - i.then( - function () { - return t.isFullscreen(!0); - }, - function () { - return t.isFullscreen(!1); - }, - ), - i - ); - } - this.tech_.supportsFullScreen() && - !0 == !this.options_.preferFullWindow - ? this.techCall_("enterFullScreen") - : this.enterFullWindow(); - }), - (e.exitFullscreen = function () { - var e = this.options_.Promise || window.Promise; - if (e) { - var s = this; - return new e(function (e, i) { - function n() { - s.off("fullscreenerror", r), s.off("fullscreenchange", t); - } - function t() { - n(), e(); - } - function r(e, t) { - n(), i(t); - } - s.one("fullscreenchange", t), s.one("fullscreenerror", r); - var a = s.exitFullscreenHelper_(); - a && (a.then(n, n), a.then(e, i)); - }); - } - return this.exitFullscreenHelper_(); - }), - (e.exitFullscreenHelper_ = function () { - var e = this; - if (this.fsApi_.requestFullscreen) { - var t = document[this.fsApi_.exitFullscreen](); - return ( - t && - Et( - t.then(function () { - return e.isFullscreen(!1); - }), - ), - t - ); - } - this.tech_.supportsFullScreen() && - !0 == !this.options_.preferFullWindow - ? this.techCall_("exitFullScreen") - : this.exitFullWindow(); - }), - (e.enterFullWindow = function () { - this.isFullscreen(!0), - (this.isFullWindow = !0), - (this.docOrigOverflow = document.documentElement.style.overflow), - Be(document, "keydown", this.boundFullWindowOnEscKey_), - (document.documentElement.style.overflow = "hidden"), - te(document.body, "vjs-full-window"), - this.trigger("enterFullWindow"); - }), - (e.fullWindowOnEscKey = function (e) { - ht.isEventKey(e, "Esc") && - !0 === this.isFullscreen() && - (this.isFullWindow ? this.exitFullWindow() : this.exitFullscreen()); - }), - (e.exitFullWindow = function () { - this.isFullscreen(!1), - (this.isFullWindow = !1), - Fe(document, "keydown", this.boundFullWindowOnEscKey_), - (document.documentElement.style.overflow = this.docOrigOverflow), - ie(document.body, "vjs-full-window"), - this.trigger("exitFullWindow"); - }), - (e.disablePictureInPicture = function (e) { - if (void 0 === e) return this.techGet_("disablePictureInPicture"); - this.techCall_("setDisablePictureInPicture", e), - (this.options_.disablePictureInPicture = e), - this.trigger("disablepictureinpicturechanged"); - }), - (e.isInPictureInPicture = function (e) { - return void 0 !== e - ? ((this.isInPictureInPicture_ = !!e), - void this.togglePictureInPictureClass_()) - : !!this.isInPictureInPicture_; - }), - (e.requestPictureInPicture = function () { - if ( - "pictureInPictureEnabled" in document && - !1 === this.disablePictureInPicture() - ) - return this.techGet_("requestPictureInPicture"); - }), - (e.exitPictureInPicture = function () { - if ("pictureInPictureEnabled" in document) - return document.exitPictureInPicture(); - }), - (e.handleKeyDown = function (e) { - var t = this.options_.userActions; - t && - t.hotkeys && - ((function (e) { - var t = e.tagName.toLowerCase(); - if (e.isContentEditable) return !0; - if ("input" === t) - return ( - -1 === - [ - "button", - "checkbox", - "hidden", - "radio", - "reset", - "submit", - ].indexOf(e.type) - ); - return -1 !== ["textarea"].indexOf(t); - })(this.el_.ownerDocument.activeElement) || - ("function" == typeof t.hotkeys - ? t.hotkeys.call(this, e) - : this.handleHotkeys(e))); - }), - (e.handleHotkeys = function (e) { - var t = this.options_.userActions - ? this.options_.userActions.hotkeys - : {}, - i = t.fullscreenKey, - n = t.muteKey, - n = - void 0 === n - ? function (e) { - return ht.isEventKey(e, "m"); - } - : n, - t = t.playPauseKey, - t = - void 0 === t - ? function (e) { - return ht.isEventKey(e, "k") || ht.isEventKey(e, "Space"); - } - : t; - (void 0 === i - ? function (e) { - return ht.isEventKey(e, "f"); - } - : i - ).call(this, e) - ? (e.preventDefault(), - e.stopPropagation(), - (i = pt.getComponent("FullscreenToggle")), - !1 !== document[this.fsApi_.fullscreenEnabled] && - i.prototype.handleClick.call(this, e)) - : n.call(this, e) - ? (e.preventDefault(), - e.stopPropagation(), - pt - .getComponent("MuteToggle") - .prototype.handleClick.call(this, e)) - : t.call(this, e) && - (e.preventDefault(), - e.stopPropagation(), - pt - .getComponent("PlayToggle") - .prototype.handleClick.call(this, e)); - }), - (e.canPlayType = function (e) { - for (var t, i = 0, n = this.options_.techOrder; i < n.length; i++) { - var r = n[i], - a = ji.getTech(r); - if ((a = a || pt.getComponent(r))) { - if (a.isSupported() && (t = a.canPlayType(e))) return t; - } else - h.error( - 'The "' + - r + - '" tech is undefined. Skipped browser support check for that tech.', - ); - } - return ""; - }), - (e.selectSource = function (e) { - function t(e, i, n) { - var r; - return ( - e.some(function (t) { - return i.some(function (e) { - if ((r = n(t, e))) return !0; - }); - }), - r - ); - } - var i, - n = this, - r = this.options_.techOrder - .map(function (e) { - return [e, ji.getTech(e)]; - }) - .filter(function (e) { - var t = e[0], - e = e[1]; - return e - ? e.isSupported() - : (h.error( - 'The "' + - t + - '" tech is undefined. Skipped browser support check for that tech.', - ), - !1); - }), - a = function (e, t) { - var i = e[0]; - if (e[1].canPlaySource(t, n.options_[i.toLowerCase()])) - return { source: t, tech: i }; - }, - a = this.options_.sourceOrder - ? t( - e, - r, - ((i = a), - function (e, t) { - return i(t, e); - }), - ) - : t(r, e, a); - return a || !1; - }), - (e.handleSrc_ = function (e, n) { - var r = this; - if ("undefined" == typeof e) return this.cache_.src || ""; - this.resetRetryOnError_ && this.resetRetryOnError_(); - var t, - i, - a = Ji(e); - a.length - ? ((this.changingSrc_ = !0), - n || (this.cache_.sources = a), - this.updateSourceCaches_(a[0]), - Wi(this, a[0], function (e, t) { - var i; - return ( - (r.middleware_ = t), - n || (r.cache_.sources = a), - r.updateSourceCaches_(e), - r.src_(e) - ? 1 < a.length - ? r.handleSrc_(a.slice(1)) - : ((r.changingSrc_ = !1), - r.setTimeout(function () { - this.error({ - code: 4, - message: this.options_.notSupportedMessage, - }); - }, 0), - void r.triggerReady()) - : ((t = t), - (i = r.tech_), - void t.forEach(function (e) { - return e.setTech && e.setTech(i); - })) - ); - }), - this.options_.retryOnError && - 1 < a.length && - ((i = function () { - r.off("error", t); - }), - this.one( - "error", - (t = function () { - r.error(null), r.handleSrc_(a.slice(1), !0); - }), - ), - this.one("playing", i), - (this.resetRetryOnError_ = function () { - r.off("error", t), r.off("playing", i); - }))) - : this.setTimeout(function () { - this.error({ - code: 4, - message: this.options_.notSupportedMessage, - }); - }, 0); - }), - (e.src = function (e) { - return this.handleSrc_(e, !1); - }), - (e.src_ = function (e) { - var t, - i, - n = this, - r = this.selectSource([e]); - return ( - !r || - ((t = r.tech), - (i = this.techName_), - ut(t) !== ut(i) - ? ((this.changingSrc_ = !0), - this.loadTech_(r.tech, r.source), - this.tech_.ready(function () { - n.changingSrc_ = !1; - })) - : this.ready(function () { - this.tech_.constructor.prototype.hasOwnProperty("setSource") - ? this.techCall_("setSource", e) - : this.techCall_("src", e.src), - (this.changingSrc_ = !1); - }, !0), - !1) - ); - }), - (e.load = function () { - this.techCall_("load"); - }), - (e.reset = function () { - var e = this, - t = this.options_.Promise || window.Promise; - this.paused() || !t - ? this.doReset_() - : Et( - this.play().then(function () { - return e.doReset_(); - }), - ); - }), - (e.doReset_ = function () { - this.tech_ && this.tech_.clearTracks("text"), - this.resetCache_(), - this.poster(""), - this.loadTech_(this.options_.techOrder[0], null), - this.techCall_("reset"), - this.resetControlBarUI_(), - it(this) && this.trigger("playerreset"); - }), - (e.resetControlBarUI_ = function () { - this.resetProgressBar_(), - this.resetPlaybackRate_(), - this.resetVolumeBar_(); - }), - (e.resetProgressBar_ = function () { - this.currentTime(0); - var e = this.controlBar || {}, - t = e.durationDisplay, - e = e.remainingTimeDisplay; - t && t.updateContent(), e && e.updateContent(); - }), - (e.resetPlaybackRate_ = function () { - this.playbackRate(this.defaultPlaybackRate()), - this.handleTechRateChange_(); - }), - (e.resetVolumeBar_ = function () { - this.volume(1), this.trigger("volumechange"); - }), - (e.currentSources = function () { - var e = this.currentSource(), - t = []; - return ( - 0 !== Object.keys(e).length && t.push(e), this.cache_.sources || t - ); - }), - (e.currentSource = function () { - return this.cache_.source || {}; - }), - (e.currentSrc = function () { - return (this.currentSource() && this.currentSource().src) || ""; - }), - (e.currentType = function () { - return (this.currentSource() && this.currentSource().type) || ""; - }), - (e.preload = function (e) { - return void 0 !== e - ? (this.techCall_("setPreload", e), - void (this.options_.preload = e)) - : this.techGet_("preload"); - }), - (e.autoplay = function (e) { - if (void 0 === e) return this.options_.autoplay || !1; - var t; - ("string" == typeof e && /(any|play|muted)/.test(e)) || - (!0 === e && this.options_.normalizeAutoplay) - ? ((this.options_.autoplay = e), - this.manualAutoplay_("string" == typeof e ? e : "play"), - (t = !1)) - : (this.options_.autoplay = !!e), - (t = "undefined" == typeof t ? this.options_.autoplay : t), - this.tech_ && this.techCall_("setAutoplay", t); - }), - (e.playsinline = function (e) { - return void 0 !== e - ? (this.techCall_("setPlaysinline", e), - (this.options_.playsinline = e), - this) - : this.techGet_("playsinline"); - }), - (e.loop = function (e) { - return void 0 !== e - ? (this.techCall_("setLoop", e), void (this.options_.loop = e)) - : this.techGet_("loop"); - }), - (e.poster = function (e) { - if (void 0 === e) return this.poster_; - (e = e || "") !== this.poster_ && - ((this.poster_ = e), - this.techCall_("setPoster", e), - (this.isPosterFromTech_ = !1), - this.trigger("posterchange")); - }), - (e.handleTechPosterChange_ = function () { - var e; - (this.poster_ && !this.options_.techCanOverridePoster) || - !this.tech_ || - !this.tech_.poster || - ((e = this.tech_.poster() || "") !== this.poster_ && - ((this.poster_ = e), - (this.isPosterFromTech_ = !0), - this.trigger("posterchange"))); - }), - (e.controls = function (e) { - if (void 0 === e) return !!this.controls_; - this.controls_ !== (e = !!e) && - ((this.controls_ = e), - this.usingNativeControls() && this.techCall_("setControls", e), - this.controls_ - ? (this.removeClass("vjs-controls-disabled"), - this.addClass("vjs-controls-enabled"), - this.trigger("controlsenabled"), - this.usingNativeControls() || this.addTechControlsListeners_()) - : (this.removeClass("vjs-controls-enabled"), - this.addClass("vjs-controls-disabled"), - this.trigger("controlsdisabled"), - this.usingNativeControls() || - this.removeTechControlsListeners_())); - }), - (e.usingNativeControls = function (e) { - if (void 0 === e) return !!this.usingNativeControls_; - this.usingNativeControls_ !== (e = !!e) && - ((this.usingNativeControls_ = e), - this.usingNativeControls_ - ? (this.addClass("vjs-using-native-controls"), - this.trigger("usingnativecontrols")) - : (this.removeClass("vjs-using-native-controls"), - this.trigger("usingcustomcontrols"))); - }), - (e.error = function (t) { - var i = this; - if (void 0 === t) return this.error_ || null; - if ( - (a("beforeerror").forEach(function (e) { - e = e(i, t); - (T(e) && !Array.isArray(e)) || - "string" == typeof e || - "number" == typeof e || - null === e - ? (t = e) - : i.log.error( - "please return a value that MediaError expects in beforeerror hooks", - ); - }), - this.options_.suppressNotSupportedError && t && 4 === t.code) - ) { - var e = function () { - this.error(t); - }; - return ( - (this.options_.suppressNotSupportedError = !1), - this.any(["click", "touchstart"], e), - void this.one("loadstart", function () { - this.off(["click", "touchstart"], e); - }) - ); - } - if (null === t) - return ( - (this.error_ = t), - this.removeClass("vjs-error"), - void (this.errorDisplay && this.errorDisplay.close()) - ); - (this.error_ = new bt(t)), - this.addClass("vjs-error"), - h.error( - "(CODE:" + - this.error_.code + - " " + - bt.errorTypes[this.error_.code] + - ")", - this.error_.message, - this.error_, - ), - this.trigger("error"), - a("error").forEach(function (e) { - return e(i, i.error_); - }); - }), - (e.reportUserActivity = function (e) { - this.userActivity_ = !0; - }), - (e.userActive = function (e) { - if (void 0 === e) return this.userActive_; - if ((e = !!e) !== this.userActive_) { - if (((this.userActive_ = e), this.userActive_)) - return ( - (this.userActivity_ = !0), - this.removeClass("vjs-user-inactive"), - this.addClass("vjs-user-active"), - void this.trigger("useractive") - ); - this.tech_ && - this.tech_.one("mousemove", function (e) { - e.stopPropagation(), e.preventDefault(); - }), - (this.userActivity_ = !1), - this.removeClass("vjs-user-active"), - this.addClass("vjs-user-inactive"), - this.trigger("userinactive"); - } - }), - (e.listenForUserActivity_ = function () { - var t, - i, - n, - r = Ve(this, this.reportUserActivity), - e = function (e) { - r(), this.clearInterval(t); - }; - this.on("mousedown", function () { - r(), this.clearInterval(t), (t = this.setInterval(r, 250)); - }), - this.on("mousemove", function (e) { - (e.screenX === i && e.screenY === n) || - ((i = e.screenX), (n = e.screenY), r()); - }), - this.on("mouseup", e), - this.on("mouseleave", e); - var a, - e = this.getChild("controlBar"); - !e || - q || - A || - (e.on("mouseenter", function (e) { - 0 !== this.player().options_.inactivityTimeout && - (this.player().cache_.inactivityTimeout = - this.player().options_.inactivityTimeout), - (this.player().options_.inactivityTimeout = 0); - }), - e.on("mouseleave", function (e) { - this.player().options_.inactivityTimeout = - this.player().cache_.inactivityTimeout; - })), - this.on("keydown", r), - this.on("keyup", r), - this.setInterval(function () { - var e; - this.userActivity_ && - ((this.userActivity_ = !1), - this.userActive(!0), - this.clearTimeout(a), - (e = this.options_.inactivityTimeout) <= 0 || - (a = this.setTimeout(function () { - this.userActivity_ || this.userActive(!1); - }, e))); - }, 250); - }), - (e.playbackRate = function (e) { - if (void 0 === e) - return this.tech_ && this.tech_.featuresPlaybackRate - ? this.cache_.lastPlaybackRate || this.techGet_("playbackRate") - : 1; - this.techCall_("setPlaybackRate", e); - }), - (e.defaultPlaybackRate = function (e) { - return void 0 !== e - ? this.techCall_("setDefaultPlaybackRate", e) - : this.tech_ && this.tech_.featuresPlaybackRate - ? this.techGet_("defaultPlaybackRate") - : 1; - }), - (e.isAudio = function (e) { - if (void 0 === e) return !!this.isAudio_; - this.isAudio_ = !!e; - }), - (e.enableAudioOnlyUI_ = function () { - var t = this; - this.addClass("vjs-audio-only-mode"); - var e = this.children(), - i = this.getChild("ControlBar"), - n = i && i.currentHeight(); - e.forEach(function (e) { - e !== i && - e.el_ && - !e.hasClass("vjs-hidden") && - (e.hide(), t.audioOnlyCache_.hiddenChildren.push(e)); - }), - (this.audioOnlyCache_.playerHeight = this.currentHeight()), - this.height(n), - this.trigger("audioonlymodechange"); - }), - (e.disableAudioOnlyUI_ = function () { - this.removeClass("vjs-audio-only-mode"), - this.audioOnlyCache_.hiddenChildren.forEach(function (e) { - return e.show(); - }), - this.height(this.audioOnlyCache_.playerHeight), - this.trigger("audioonlymodechange"); - }), - (e.audioOnlyMode = function (e) { - var t = this; - if ("boolean" != typeof e || e === this.audioOnlyMode_) - return this.audioOnlyMode_; - this.audioOnlyMode_ = e; - var i = this.options_.Promise || window.Promise; - if (i) { - if (e) { - var n = []; - return ( - this.isInPictureInPicture() && - n.push(this.exitPictureInPicture()), - this.isFullscreen() && n.push(this.exitFullscreen()), - this.audioPosterMode() && n.push(this.audioPosterMode(!1)), - i.all(n).then(function () { - return t.enableAudioOnlyUI_(); - }) - ); - } - return i.resolve().then(function () { - return t.disableAudioOnlyUI_(); - }); - } - e - ? (this.isInPictureInPicture() && this.exitPictureInPicture(), - this.isFullscreen() && this.exitFullscreen(), - this.enableAudioOnlyUI_()) - : this.disableAudioOnlyUI_(); - }), - (e.enablePosterModeUI_ = function () { - (this.tech_ && this.tech_).hide(), - this.addClass("vjs-audio-poster-mode"), - this.trigger("audiopostermodechange"); - }), - (e.disablePosterModeUI_ = function () { - (this.tech_ && this.tech_).show(), - this.removeClass("vjs-audio-poster-mode"), - this.trigger("audiopostermodechange"); - }), - (e.audioPosterMode = function (e) { - var t = this; - if ("boolean" != typeof e || e === this.audioPosterMode_) - return this.audioPosterMode_; - this.audioPosterMode_ = e; - var i = this.options_.Promise || window.Promise; - return i - ? e - ? (this.audioOnlyMode() - ? this.audioOnlyMode(!1) - : i.resolve() - ).then(function () { - t.enablePosterModeUI_(); - }) - : i.resolve().then(function () { - t.disablePosterModeUI_(); - }) - : e - ? (this.audioOnlyMode() && this.audioOnlyMode(!1), - void this.enablePosterModeUI_()) - : void this.disablePosterModeUI_(); - }), - (e.addTextTrack = function (e, t, i) { - if (this.tech_) return this.tech_.addTextTrack(e, t, i); - }), - (e.addRemoteTextTrack = function (e, t) { - if (this.tech_) return this.tech_.addRemoteTextTrack(e, t); - }), - (e.removeRemoteTextTrack = function (e) { - var t = (t = (e = void 0 === e ? {} : e).track) || e; - if (this.tech_) return this.tech_.removeRemoteTextTrack(t); - }), - (e.getVideoPlaybackQuality = function () { - return this.techGet_("getVideoPlaybackQuality"); - }), - (e.videoWidth = function () { - return ( - (this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth()) || - 0 - ); - }), - (e.videoHeight = function () { - return ( - (this.tech_ && - this.tech_.videoHeight && - this.tech_.videoHeight()) || - 0 - ); - }), - (e.language = function (e) { - if (void 0 === e) return this.language_; - this.language_ !== String(e).toLowerCase() && - ((this.language_ = String(e).toLowerCase()), - it(this) && this.trigger("languagechange")); - }), - (e.languages = function () { - return lt(o.prototype.options_.languages, this.languages_); - }), - (e.toJSON = function () { - var e = lt(this.options_), - t = e.tracks; - e.tracks = []; - for (var i = 0; i < t.length; i++) { - var n = t[i]; - ((n = lt(n)).player = void 0), (e.tracks[i] = n); - } - return e; - }), - (e.createModal = function (e, t) { - var i = this; - (t = t || {}).content = e || ""; - var n = new At(this, t); - return ( - this.addChild(n), - n.on("dispose", function () { - i.removeChild(n); - }), - n.open(), - n - ); - }), - (e.updateCurrentBreakpoint_ = function () { - if (this.responsive()) - for ( - var e = this.currentBreakpoint(), t = this.currentWidth(), i = 0; - i < Nn.length; - i++ - ) { - var n = Nn[i]; - if (t <= this.breakpoints_[n]) { - if (e === n) return; - e && this.removeClass(Un[e]), - this.addClass(Un[n]), - (this.breakpoint_ = n); - break; - } - } - }), - (e.removeCurrentBreakpoint_ = function () { - var e = this.currentBreakpointClass(); - (this.breakpoint_ = ""), e && this.removeClass(e); - }), - (e.breakpoints = function (e) { - return ( - void 0 === e || - ((this.breakpoint_ = ""), - (this.breakpoints_ = b({}, Bn, e)), - this.updateCurrentBreakpoint_()), - b(this.breakpoints_) - ); - }), - (e.responsive = function (e) { - return void 0 === e - ? this.responsive_ - : (e = Boolean(e)) !== this.responsive_ - ? ((this.responsive_ = e) - ? (this.on( - "playerresize", - this.boundUpdateCurrentBreakpoint_, - ), - this.updateCurrentBreakpoint_()) - : (this.off( - "playerresize", - this.boundUpdateCurrentBreakpoint_, - ), - this.removeCurrentBreakpoint_()), - e) - : void 0; - }), - (e.currentBreakpoint = function () { - return this.breakpoint_; - }), - (e.currentBreakpointClass = function () { - return Un[this.breakpoint_] || ""; - }), - (e.loadMedia = function (e, t) { - var i, - n, - r, - a = this; - e && - "object" == typeof e && - (this.reset(), - (this.cache_.media = lt(e)), - (i = (r = this.cache_.media).artwork), - (n = r.poster), - (e = r.src), - (r = r.textTracks), - !i && n && (this.cache_.media.artwork = [{ src: n, type: $i(n) }]), - e && this.src(e), - n && this.poster(n), - Array.isArray(r) && - r.forEach(function (e) { - return a.addRemoteTextTrack(e, !1); - }), - this.ready(t)); - }), - (e.getMedia = function () { - if (this.cache_.media) return lt(this.cache_.media); - var e = this.poster(), - t = { - src: this.currentSources(), - textTracks: Array.prototype.map.call( - this.remoteTextTracks(), - function (e) { - return { - kind: e.kind, - label: e.label, - language: e.language, - src: e.src, - }; - }, - ), - }; - return ( - e && - ((t.poster = e), - (t.artwork = [{ src: t.poster, type: $i(t.poster) }])), - t - ); - }), - (o.getTagSettings = function (e) { - var t, - i = { sources: [], tracks: [] }, - n = ae(e), - r = n["data-setup"]; - if ( - (ee(e, "vjs-fill") && (n.fill = !0), - ee(e, "vjs-fluid") && (n.fluid = !0), - null !== r && - ((r = (t = St(r || "{}"))[0]), - (t = t[1]), - r && h.error(r), - b(n, t)), - b(i, n), - e.hasChildNodes()) - ) - for (var a = e.childNodes, s = 0, o = a.length; s < o; s++) { - var u = a[s], - l = u.nodeName.toLowerCase(); - "source" === l - ? i.sources.push(ae(u)) - : "track" === l && i.tracks.push(ae(u)); - } - return i; - }), - (e.flexNotSupported_ = function () { - var e = document.createElement("i"); - return !( - "flexBasis" in e.style || - "webkitFlexBasis" in e.style || - "mozFlexBasis" in e.style || - "msFlexBasis" in e.style || - "msFlexOrder" in e.style - ); - }), - (e.debug = function (e) { - if (void 0 === e) return this.debugEnabled_; - e - ? (this.trigger("debugon"), - (this.previousLogLevel_ = this.log.level), - this.log.level("debug"), - (this.debugEnabled_ = !0)) - : (this.trigger("debugoff"), - this.log.level(this.previousLogLevel_), - (this.previousLogLevel_ = void 0), - (this.debugEnabled_ = !1)); - }), - (e.playbackRates = function (e) { - if (void 0 === e) return this.cache_.playbackRates; - Array.isArray(e) && - e.every(function (e) { - return "number" == typeof e; - }) && - ((this.cache_.playbackRates = e), - this.trigger("playbackrateschange")); - }), - o - ); - })(pt); - oi.names.forEach(function (e) { - var t = oi[e]; - Fn.prototype[t.getterName] = function () { - return this.tech_ - ? this.tech_[t.getterName]() - : ((this[t.privateName] = this[t.privateName] || new t.ListClass()), - this[t.privateName]); - }; - }), - (Fn.prototype.crossorigin = Fn.prototype.crossOrigin), - (Fn.players = {}); - k = window.navigator; - (Fn.prototype.options_ = { - techOrder: ji.defaultTechOrder_, - html5: {}, - inactivityTimeout: 2e3, - playbackRates: [], - liveui: !1, - children: [ - "mediaLoader", - "posterImage", - "textTrackDisplay", - "loadingSpinner", - "bigPlayButton", - "liveTracker", - "controlBar", - "errorDisplay", - "textTrackSettings", - "resizeManager", - ], - language: - (k && - ((k.languages && k.languages[0]) || k.userLanguage || k.language)) || - "en", - languages: {}, - notSupportedMessage: "No compatible source was found for this media.", - normalizeAutoplay: !1, - fullscreen: { options: { navigationUI: "hide" } }, - breakpoints: {}, - responsive: !1, - audioOnlyMode: !1, - audioPosterMode: !1, - }), - ["ended", "seeking", "seekable", "networkState", "readyState"].forEach( - function (e) { - Fn.prototype[e] = function () { - return this.techGet_(e); - }; - }, - ), - Mn.forEach(function (e) { - Fn.prototype["handleTech" + ut(e) + "_"] = function () { - return this.trigger(e); - }; - }), - pt.registerComponent("Player", Fn); - var jn = m(function (i) { - function n(e, t) { - return ( - (i.exports = n = - Object.setPrototypeOf || - function (e, t) { - return (e.__proto__ = t), e; - }), - n(e, t) - ); - } - i.exports = n; - }); - function Hn(e) { - return Qn.hasOwnProperty(e); - } - function qn(e) { - return Hn(e) ? Qn[e] : void 0; - } - function Vn(e, t, i) { - (i = (i ? "before" : "") + "pluginsetup"), - e.trigger(i, t), - e.trigger(i + ":" + t.name, t); - } - function Wn(t, i) { - function n() { - Vn(this, { name: t, plugin: i, instance: null }, !0); - var e = i.apply(this, arguments); - return $n(this, t), Vn(this, { name: t, plugin: i, instance: e }), e; - } - return ( - Object.keys(i).forEach(function (e) { - n[e] = i[e]; - }), - n - ); - } - function Gn(r, a) { - return ( - (a.prototype.name = r), - function () { - Vn(this, { name: r, plugin: a, instance: null }, !0); - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - var n = Xn(a, [this].concat(t)); - return ( - (this[r] = function () { - return n; - }), - Vn(this, n.getEventHash()), - n - ); - } - ); - } - var zn = function () { - if ("undefined" == typeof Reflect || !Reflect.construct) return !1; - if (Reflect.construct.sham) return !1; - if ("function" == typeof Proxy) return !0; - try { - return ( - Date.prototype.toString.call( - Reflect.construct(Date, [], function () {}), - ), - !0 - ); - } catch (e) { - return !1; - } - }, - Xn = m(function (n) { - function r(e, t, i) { - return ( - zn() - ? (n.exports = r = Reflect.construct) - : (n.exports = r = - function (e, t, i) { - var n = [null]; - n.push.apply(n, t); - n = new (Function.bind.apply(e, n))(); - return i && jn(n, i.prototype), n; - }), - r.apply(null, arguments) - ); - } - n.exports = r; - }), - Kn = "plugin", - Yn = "activePlugins_", - Qn = {}, - $n = function (e, t) { - (e[Yn] = e[Yn] || {}), (e[Yn][t] = !0); - }, - Jn = (function () { - function i(e) { - if (this.constructor === i) - throw new Error( - "Plugin must be sub-classed; not directly instantiated.", - ); - (this.player = e), - this.log || (this.log = this.player.log.createLogger(this.name)), - rt(this), - delete this.trigger, - st(this, this.constructor.defaultState), - $n(e, this.name), - (this.dispose = this.dispose.bind(this)), - e.on("dispose", this.dispose); - } - var e = i.prototype; - return ( - (e.version = function () { - return this.constructor.VERSION; - }), - (e.getEventHash = function (e) { - return ( - ((e = void 0 === e ? {} : e).name = this.name), - (e.plugin = this.constructor), - (e.instance = this), - e - ); - }), - (e.trigger = function (e, t) { - return je( - this.eventBusEl_, - e, - this.getEventHash((t = void 0 === t ? {} : t)), - ); - }), - (e.handleStateChanged = function (e) {}), - (e.dispose = function () { - var e = this.name, - t = this.player; - this.trigger("dispose"), - this.off(), - t.off("dispose", this.dispose), - (t[Yn][e] = !1), - (this.player = this.state = null), - (t[e] = Gn(e, Qn[e])); - }), - (i.isBasic = function (e) { - e = "string" == typeof e ? qn(e) : e; - return ( - "function" == typeof e && !i.prototype.isPrototypeOf(e.prototype) - ); - }), - (i.registerPlugin = function (e, t) { - if ("string" != typeof e) - throw new Error( - 'Illegal plugin name, "' + - e + - '", must be a string, was ' + - typeof e + - ".", - ); - if (Hn(e)) - h.warn( - 'A plugin named "' + - e + - '" already exists. You may want to avoid re-registering plugins!', - ); - else if (Fn.prototype.hasOwnProperty(e)) - throw new Error( - 'Illegal plugin name, "' + - e + - '", cannot share a name with an existing player method!', - ); - if ("function" != typeof t) - throw new Error( - 'Illegal plugin for "' + - e + - '", must be a function, was ' + - typeof t + - ".", - ); - return ( - (Qn[e] = t), - e !== Kn && - (i.isBasic(t) - ? (Fn.prototype[e] = Wn(e, t)) - : (Fn.prototype[e] = Gn(e, t))), - t - ); - }), - (i.deregisterPlugin = function (e) { - if (e === Kn) throw new Error("Cannot de-register base plugin."); - Hn(e) && (delete Qn[e], delete Fn.prototype[e]); - }), - (i.getPlugins = function (e) { - var i; - return ( - (e = void 0 === e ? Object.keys(Qn) : e).forEach(function (e) { - var t = qn(e); - t && ((i = i || {})[e] = t); - }), - i - ); - }), - (i.getPluginVersion = function (e) { - e = qn(e); - return (e && e.VERSION) || ""; - }), - i - ); - })(); - (Jn.getPlugin = qn), - (Jn.BASE_PLUGIN_NAME = Kn), - Jn.registerPlugin(Kn, Jn), - (Fn.prototype.usingPlugin = function (e) { - return !!this[Yn] && !0 === this[Yn][e]; - }), - (Fn.prototype.hasPlugin = function (e) { - return !!Hn(e); - }); - var Zn = function (e, t) { - if ("function" != typeof t && null !== t) - throw new TypeError( - "Super expression must either be null or a function", - ); - (e.prototype = Object.create(t && t.prototype, { - constructor: { value: e, writable: !0, configurable: !0 }, - })), - t && jn(e, t); - }, - er = function (e) { - return 0 === e.indexOf("#") ? e.slice(1) : e; - }; - function tr(e, t, i) { - if ((r = tr.getPlayer(e))) - return ( - t && - h.warn( - 'Player "' + - e + - '" is already initialised. Options will not be applied.', - ), - i && r.ready(i), - r - ); - var n = "string" == typeof e ? Te("#" + er(e)) : e; - if (!K(n)) - throw new TypeError("The element or ID supplied is not valid. (videojs)"); - (n.ownerDocument.defaultView && n.ownerDocument.body.contains(n)) || - h.warn("The element supplied is not included in the DOM"), - !0 === (t = t || {}).restoreEl && - (t.restoreEl = ( - n.parentNode && n.parentNode.hasAttribute("data-vjs-player") - ? n.parentNode - : n - ).cloneNode(!0)), - a("beforesetup").forEach(function (e) { - e = e(n, lt(t)); - T(e) && !Array.isArray(e) - ? (t = lt(t, e)) - : h.error("please return an object in beforesetup hooks"); - }); - var r = new (pt.getComponent("Player"))(n, t, i); - return ( - a("setup").forEach(function (e) { - return e(r); - }), - r - ); - } - (tr.hooks_ = i), - (tr.hooks = a), - (tr.hook = function (e, t) { - a(e, t); - }), - (tr.hookOnce = function (i, e) { - a( - i, - [].concat(e).map(function (t) { - return function e() { - return n(i, e), t.apply(void 0, arguments); - }; - }), - ); - }), - (tr.removeHook = n), - !0 !== window.VIDEOJS_NO_DYNAMIC_STYLE && - X() && - ((ar = Te(".vjs-styles-defaults")) || - ((ar = xe("vjs-styles-defaults")), - (k = Te("head")) && k.insertBefore(ar, k.firstChild), - Ae( - ar, - "\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: 56.25%\n }\n ", - ))), - Ce(1, tr), - (tr.VERSION = u), - (tr.options = Fn.prototype.options_), - (tr.getPlayers = function () { - return Fn.players; - }), - (tr.getPlayer = function (e) { - var t = Fn.players; - if ("string" == typeof e) { - var i = er(e), - n = t[i]; - if (n) return n; - i = Te("#" + i); - } else i = e; - if (K(i)) { - (e = i.player), (i = i.playerId); - if (e || t[i]) return e || t[i]; - } - }), - (tr.getAllPlayers = function () { - return Object.keys(Fn.players) - .map(function (e) { - return Fn.players[e]; - }) - .filter(Boolean); - }), - (tr.players = Fn.players), - (tr.getComponent = pt.getComponent), - (tr.registerComponent = function (e, t) { - ji.isTech(t) && - h.warn( - "The " + - e + - " tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)", - ), - pt.registerComponent.call(pt, e, t); - }), - (tr.getTech = ji.getTech), - (tr.registerTech = ji.registerTech), - (tr.use = function (e, t) { - (Hi[e] = Hi[e] || []), Hi[e].push(t); - }), - Object.defineProperty(tr, "middleware", { - value: {}, - writeable: !1, - enumerable: !0, - }), - Object.defineProperty(tr.middleware, "TERMINATOR", { - value: Vi, - writeable: !1, - enumerable: !0, - }), - (tr.browser = W), - (tr.TOUCH_ENABLED = F), - (tr.extend = function (e, t) { - var i, - n = function () { - e.apply(this, arguments); - }, - r = {}; - for (i in ("object" == typeof (t = void 0 === t ? {} : t) - ? (t.constructor !== Object.prototype.constructor && - (n = t.constructor), - (r = t)) - : "function" == typeof t && (n = t), - Zn(n, e), - e && (n.super_ = e), - r)) - r.hasOwnProperty(i) && (n.prototype[i] = r[i]); - return n; - }), - (tr.mergeOptions = lt), - (tr.bind = Ve), - (tr.registerPlugin = Jn.registerPlugin), - (tr.deregisterPlugin = Jn.deregisterPlugin), - (tr.plugin = function (e, t) { - return ( - h.warn( - "videojs.plugin() is deprecated; use videojs.registerPlugin() instead", - ), - Jn.registerPlugin(e, t) - ); - }), - (tr.getPlugins = Jn.getPlugins), - (tr.getPlugin = Jn.getPlugin), - (tr.getPluginVersion = Jn.getPluginVersion), - (tr.addLanguage = function (e, t) { - var i; - return ( - (e = ("" + e).toLowerCase()), - (tr.options.languages = lt( - tr.options.languages, - (((i = {})[e] = t), i), - )), - tr.options.languages[e] - ); - }), - (tr.log = h), - (tr.createLogger = p), - (tr.createTimeRange = tr.createTimeRanges = vt), - (tr.formatTime = ln), - (tr.setFormatTime = function (e) { - un = e; - }), - (tr.resetFormatTime = function () { - un = on; - }), - (tr.parseUrl = Mt), - (tr.isCrossOrigin = Ut), - (tr.EventTarget = ze), - (tr.on = Be), - (tr.one = He), - (tr.off = Fe), - (tr.trigger = je), - (tr.xhr = Jt), - (tr.TextTrack = ri), - (tr.AudioTrack = x), - (tr.VideoTrack = U), - [ - "isEl", - "isTextNode", - "createEl", - "hasClass", - "addClass", - "removeClass", - "toggleClass", - "setAttributes", - "getAttributes", - "emptyEl", - "appendContent", - "insertContent", - ].forEach(function (e) { - tr[e] = function () { - return ( - h.warn( - "videojs." + - e + - "() is deprecated; use videojs.dom." + - e + - "() instead", - ), - we[e].apply(null, arguments) - ); - }; - }), - (tr.computedStyle = w), - (tr.dom = we), - (tr.url = zt), - (tr.defineLazyProperty = An), - tr.addLanguage("en", { "Non-Fullscreen": "Exit Fullscreen" }); - function ir(e, t) { - if (/^[a-z]+:/i.test(t)) return t; - /^data:/.test(e) && (e = (window.location && window.location.href) || ""); - var i = "function" == typeof window.URL, - n = /^\/\//.test(e), - r = !window.location && !/\/\//i.test(e); - if ( - (i - ? (e = new window.URL(e, window.location || rr)) - : /\/\//i.test(e) || - (e = nr.buildAbsoluteURL( - (window.location && window.location.href) || "", - e, - )), - i) - ) { - i = new URL(t, e); - return r - ? i.href.slice(rr.length) - : n - ? i.href.slice(i.protocol.length) - : i.href; - } - return nr.buildAbsoluteURL(e, t); - } - var nr = m(function (e, t) { - var i, a, n, r, s; - (i = - /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/?#]*)?((?:[^\/?#]*\/)*[^;?#]*)?(;[^?#]*)?(\?[^#]*)?(#[^]*)?$/), - (a = /^([^\/?#]*)([^]*)$/), - (n = /(?:\/|^)\.(?=\/)/g), - (r = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g), - (s = { - buildAbsoluteURL: function (e, t, i) { - if (((i = i || {}), (e = e.trim()), !(t = t.trim()))) { - if (!i.alwaysNormalize) return e; - var n = s.parseURL(e); - if (!n) throw new Error("Error trying to parse base URL."); - return (n.path = s.normalizePath(n.path)), s.buildURLFromParts(n); - } - n = s.parseURL(t); - if (!n) throw new Error("Error trying to parse relative URL."); - if (n.scheme) - return i.alwaysNormalize - ? ((n.path = s.normalizePath(n.path)), s.buildURLFromParts(n)) - : t; - t = s.parseURL(e); - if (!t) throw new Error("Error trying to parse base URL."); - !t.netLoc && - t.path && - "/" !== t.path[0] && - ((r = a.exec(t.path)), (t.netLoc = r[1]), (t.path = r[2])), - t.netLoc && !t.path && (t.path = "/"); - var r, - e = { - scheme: t.scheme, - netLoc: n.netLoc, - path: null, - params: n.params, - query: n.query, - fragment: n.fragment, - }; - return ( - n.netLoc || - ((e.netLoc = t.netLoc), - "/" !== n.path[0] && - (n.path - ? ((r = - (r = t.path).substring(0, r.lastIndexOf("/") + 1) + - n.path), - (e.path = s.normalizePath(r))) - : ((e.path = t.path), - n.params || - ((e.params = t.params), - n.query || (e.query = t.query))))), - null === e.path && - (e.path = i.alwaysNormalize ? s.normalizePath(n.path) : n.path), - s.buildURLFromParts(e) - ); - }, - parseURL: function (e) { - e = i.exec(e); - return e - ? { - scheme: e[1] || "", - netLoc: e[2] || "", - path: e[3] || "", - params: e[4] || "", - query: e[5] || "", - fragment: e[6] || "", - } - : null; - }, - normalizePath: function (e) { - for ( - e = e.split("").reverse().join("").replace(n, ""); - e.length !== (e = e.replace(r, "")).length; - - ); - return e.split("").reverse().join(""); - }, - buildURLFromParts: function (e) { - return ( - e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment - ); - }, - }), - (e.exports = s); - }), - rr = "http://example.com", - ar = (function () { - function e() { - this.listeners = {}; - } - var t = e.prototype; - return ( - (t.on = function (e, t) { - this.listeners[e] || (this.listeners[e] = []), - this.listeners[e].push(t); - }), - (t.off = function (e, t) { - if (!this.listeners[e]) return !1; - t = this.listeners[e].indexOf(t); - return ( - (this.listeners[e] = this.listeners[e].slice(0)), - this.listeners[e].splice(t, 1), - -1 < t - ); - }), - (t.trigger = function (e) { - var t = this.listeners[e]; - if (t) - if (2 === arguments.length) - for (var i = t.length, n = 0; n < i; ++n) - t[n].call(this, arguments[1]); - else - for ( - var r = Array.prototype.slice.call(arguments, 1), - a = t.length, - s = 0; - s < a; - ++s - ) - t[s].apply(this, r); - }), - (t.dispose = function () { - this.listeners = {}; - }), - (t.pipe = function (t) { - this.on("data", function (e) { - t.push(e); - }); - }), - e - ); - })(), - sr = function (e) { - return window.atob - ? window.atob(e) - : Buffer.from(e, "base64").toString("binary"); - }; - function or(e) { - for (var t = sr(e), i = new Uint8Array(t.length), n = 0; n < t.length; n++) - i[n] = t.charCodeAt(n); - return i; - } - /*! @name m3u8-parser @version 4.7.1 @license Apache-2.0 */ function ur(e) { - var t = /([0-9.]*)?@?([0-9.]*)?/.exec(e || ""), - e = {}; - return ( - t[1] && (e.length = parseInt(t[1], 10)), - t[2] && (e.offset = parseInt(t[2], 10)), - e - ); - } - function lr(e) { - for ( - var t, - i = e.split(new RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')), - n = {}, - r = i.length; - r--; - - ) - "" !== i[r] && - (((t = /([^=]*)=(.*)/.exec(i[r]).slice(1))[0] = t[0].replace( - /^\s+|\s+$/g, - "", - )), - (t[1] = t[1].replace(/^\s+|\s+$/g, "")), - (t[1] = t[1].replace(/^['"](.*)['"]$/g, "$1")), - (n[t[0]] = t[1])); - return n; - } - function cr(t) { - var i = {}; - return ( - Object.keys(t).forEach(function (e) { - i[ - e.toLowerCase().replace(/-(\w)/g, function (e) { - return e[1].toUpperCase(); - }) - ] = t[e]; - }), - i - ); - } - function dr(e) { - var t, - i, - n, - r, - a = e.serverControl, - s = e.targetDuration, - o = e.partTargetDuration; - a && - ((t = "#EXT-X-SERVER-CONTROL"), - (i = "holdBack"), - (n = "partHoldBack"), - (r = s && 3 * s), - (e = o && 2 * o), - s && - !a.hasOwnProperty(i) && - ((a[i] = r), - this.trigger("info", { - message: - t + " defaulting HOLD-BACK to targetDuration * 3 (" + r + ").", - })), - r && - a[i] < r && - (this.trigger("warn", { - message: - t + - " clamping HOLD-BACK (" + - a[i] + - ") to targetDuration * 3 (" + - r + - ")", - }), - (a[i] = r)), - o && - !a.hasOwnProperty(n) && - ((a[n] = 3 * o), - this.trigger("info", { - message: - t + - " defaulting PART-HOLD-BACK to partTargetDuration * 3 (" + - a[n] + - ").", - })), - o && - a[n] < e && - (this.trigger("warn", { - message: - t + - " clamping PART-HOLD-BACK (" + - a[n] + - ") to partTargetDuration * 2 (" + - e + - ").", - }), - (a[n] = e))); - } - function hr(e) { - return ( - e && - e.replace(/avc1\.(\d+)\.(\d+)/i, function (e, t, i) { - return ( - "avc1." + - ("00" + Number(t).toString(16)).slice(-2) + - "00" + - ("00" + Number(i).toString(16)).slice(-2) - ); - }) - ); - } - function pr(e) { - var e = (e = void 0 === e ? "" : e).split(","), - a = []; - return ( - e.forEach(function (n) { - var r; - (n = n.trim()), - Ar.forEach(function (e) { - var t, - i = xr[e].exec(n.toLowerCase()); - !i || - i.length <= 1 || - ((r = e), - (t = n.substring(0, i[1].length)), - (i = n.replace(t, "")), - a.push({ type: t, details: i, mediaType: e })); - }), - r || a.push({ type: n, details: "", mediaType: "unknown" }); - }), - a - ); - } - function fr(e) { - return xr.audio.test((e = void 0 === e ? "" : e).trim().toLowerCase()); - } - function mr(e) { - if (e && "string" == typeof e) { - var t = e - .toLowerCase() - .split(",") - .map(function (e) { - return hr(e.trim()); - }), - i = "video"; - 1 === t.length && fr(t[0]) - ? (i = "audio") - : 1 === t.length && - ((n = t[0]), - xr.text.test((n = void 0 === n ? "" : n).trim().toLowerCase())) && - (i = "application"); - var n = "mp4"; - return ( - t.every(function (e) { - return xr.mp4.test(e); - }) - ? (n = "mp4") - : t.every(function (e) { - return xr.webm.test(e); - }) - ? (n = "webm") - : t.every(function (e) { - return xr.ogg.test(e); - }) && (n = "ogg"), - i + "/" + n + ';codecs="' + e + '"' - ); - } - } - function gr(e) { - return ( - void 0 === e && (e = ""), - (window.MediaSource && - window.MediaSource.isTypeSupported && - window.MediaSource.isTypeSupported(mr(e))) || - !1 - ); - } - function yr(e) { - return (e = void 0 === e ? "" : e) - .toLowerCase() - .split(",") - .every(function (e) { - e = e.trim(); - for (var t = 0; t < Pr.length; t++) - if (xr["muxer" + Pr[t]].test(e)) return !0; - return !1; - }); - } - function vr(e) { - return Dr.test(e) - ? "hls" - : Or.test(e) - ? "dash" - : "application/vnd.videojs.vhs+json" === e - ? "vhs-json" - : null; - } - function _r(e) { - return "function" === ArrayBuffer.isView - ? ArrayBuffer.isView(e) - : e && e.buffer instanceof ArrayBuffer; - } - function br(e) { - return e instanceof Uint8Array - ? e - : (Array.isArray(e) || - Mr(e) || - e instanceof ArrayBuffer || - (e = - "number" != typeof e || ("number" == typeof e && e != e) ? 0 : [e]), - new Uint8Array( - (e && e.buffer) || e, - (e && e.byteOffset) || 0, - (e && e.byteLength) || 0, - )); - } - function Tr(e, t) { - var i = void 0 !== (t = (void 0 === t ? {} : t).le) && t; - e = Rr( - (e = - ("bigint" != typeof e && "number" != typeof e) || - ("number" == typeof e && e != e) - ? 0 - : e), - ); - for ( - var n = ((t = e), Math.ceil(t.toString(2).length / 8)), - r = new Uint8Array(new ArrayBuffer(n)), - a = 0; - a < n; - a++ - ) { - var s = i ? a : Math.abs(a + 1 - r.length); - (r[s] = Number((e / Nr[a]) & Rr(255))), - e < 0 && ((r[s] = Math.abs(~r[s])), (r[s] -= 0 === a ? 1 : 2)); - } - return r; - } - function Sr(e, t) { - if ( - "string" != - typeof (e = - "string" != typeof e && e && "function" == typeof e.toString - ? e.toString() - : e) - ) - return new Uint8Array(); - t || (e = unescape(encodeURIComponent(e))); - for (var i = new Uint8Array(e.length), n = 0; n < e.length; n++) - i[n] = e.charCodeAt(n); - return i; - } - function wr(i, e, t) { - var n = void 0 === t ? {} : t, - r = void 0 === (t = n.offset) ? 0 : t, - a = void 0 === (n = n.mask) ? [] : n; - return ( - (i = br(i)), - (n = (e = br(e)).every || Array.prototype.every), - e.length && - i.length - r >= e.length && - n.call(e, function (e, t) { - return e === (a[t] ? a[t] & i[r + t] : i[r + t]); - }) - ); - } - var Er = (function (t) { - function e() { - var e = t.call(this) || this; - return (e.buffer = ""), e; - } - return ( - mt(e, t), - (e.prototype.push = function (e) { - var t; - for ( - this.buffer += e, t = this.buffer.indexOf("\n"); - -1 < t; - t = this.buffer.indexOf("\n") - ) - this.trigger("data", this.buffer.substring(0, t)), - (this.buffer = this.buffer.substring(t + 1)); - }), - e - ); - })(ar), - kr = String.fromCharCode(9), - Cr = (function (t) { - function e() { - var e = t.call(this) || this; - return (e.customParsers = []), (e.tagMappers = []), e; - } - mt(e, t); - var i = e.prototype; - return ( - (i.push = function (i) { - var r, - a, - s = this; - 0 !== (i = i.trim()).length && - ("#" === i[0] - ? this.tagMappers - .reduce( - function (e, t) { - t = t(i); - return t === i ? e : e.concat([t]); - }, - [i], - ) - .forEach(function (e) { - for (var t, i, n = 0; n < s.customParsers.length; n++) - if (s.customParsers[n].call(s, e)) return; - if (0 === e.indexOf("#EXT")) - if (((e = e.replace("\r", "")), (r = /^#EXTM3U/.exec(e)))) - s.trigger("data", { type: "tag", tagType: "m3u" }); - else { - if ((r = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(e))) - return ( - (a = { type: "tag", tagType: "inf" }), - r[1] && (a.duration = parseFloat(r[1])), - r[2] && (a.title = r[2]), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(e))) - return ( - (a = { type: "tag", tagType: "targetduration" }), - r[1] && (a.duration = parseInt(r[1], 10)), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(e))) - return ( - (a = { type: "tag", tagType: "version" }), - r[1] && (a.version = parseInt(r[1], 10)), - void s.trigger("data", a) - ); - if ( - (r = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) - ) - return ( - (a = { type: "tag", tagType: "media-sequence" }), - r[1] && (a.number = parseInt(r[1], 10)), - void s.trigger("data", a) - ); - if ( - (r = - /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec( - e, - )) - ) - return ( - (a = { - type: "tag", - tagType: "discontinuity-sequence", - }), - r[1] && (a.number = parseInt(r[1], 10)), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(e))) - return ( - (a = { type: "tag", tagType: "playlist-type" }), - r[1] && (a.playlistType = r[1]), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-BYTERANGE:?(.*)?$/.exec(e))) - return ( - (a = g(ur(r[1]), { - type: "tag", - tagType: "byterange", - })), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(e))) - return ( - (a = { type: "tag", tagType: "allow-cache" }), - r[1] && (a.allowed = !/NO/.test(r[1])), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-MAP:?(.*)$/.exec(e))) - return ( - (a = { type: "tag", tagType: "map" }), - r[1] && - ((t = lr(r[1])).URI && (a.uri = t.URI), - t.BYTERANGE && (a.byterange = ur(t.BYTERANGE))), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-STREAM-INF:?(.*)$/.exec(e))) - return ( - (a = { type: "tag", tagType: "stream-inf" }), - r[1] && - ((a.attributes = lr(r[1])), - a.attributes.RESOLUTION && - ((i = {}), - (t = a.attributes.RESOLUTION.split("x"))[0] && - (i.width = parseInt(t[0], 10)), - t[1] && (i.height = parseInt(t[1], 10)), - (a.attributes.RESOLUTION = i)), - a.attributes.BANDWIDTH && - (a.attributes.BANDWIDTH = parseInt( - a.attributes.BANDWIDTH, - 10, - )), - a.attributes["PROGRAM-ID"] && - (a.attributes["PROGRAM-ID"] = parseInt( - a.attributes["PROGRAM-ID"], - 10, - ))), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-MEDIA:?(.*)$/.exec(e))) - return ( - (a = { type: "tag", tagType: "media" }), - r[1] && (a.attributes = lr(r[1])), - void s.trigger("data", a) - ); - if ((r = /^#EXT-X-ENDLIST/.exec(e))) - s.trigger("data", { - type: "tag", - tagType: "endlist", - }); - else { - if (!(r = /^#EXT-X-DISCONTINUITY/.exec(e))) - return (r = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec( - e, - )) - ? ((a = { - type: "tag", - tagType: "program-date-time", - }), - r[1] && - ((a.dateTimeString = r[1]), - (a.dateTimeObject = new Date(r[1]))), - void s.trigger("data", a)) - : (r = /^#EXT-X-KEY:?(.*)$/.exec(e)) - ? ((a = { type: "tag", tagType: "key" }), - r[1] && - ((a.attributes = lr(r[1])), - a.attributes.IV && - ("0x" === - a.attributes.IV.substring( - 0, - 2, - ).toLowerCase() && - (a.attributes.IV = - a.attributes.IV.substring(2)), - (a.attributes.IV = - a.attributes.IV.match(/.{8}/g)), - (a.attributes.IV[0] = parseInt( - a.attributes.IV[0], - 16, - )), - (a.attributes.IV[1] = parseInt( - a.attributes.IV[1], - 16, - )), - (a.attributes.IV[2] = parseInt( - a.attributes.IV[2], - 16, - )), - (a.attributes.IV[3] = parseInt( - a.attributes.IV[3], - 16, - )), - (a.attributes.IV = new Uint32Array( - a.attributes.IV, - )))), - void s.trigger("data", a)) - : (r = /^#EXT-X-START:?(.*)$/.exec(e)) - ? ((a = { type: "tag", tagType: "start" }), - r[1] && - ((a.attributes = lr(r[1])), - (a.attributes["TIME-OFFSET"] = parseFloat( - a.attributes["TIME-OFFSET"], - )), - (a.attributes.PRECISE = /YES/.test( - a.attributes.PRECISE, - ))), - void s.trigger("data", a)) - : (r = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(e)) - ? ((a = { - type: "tag", - tagType: "cue-out-cont", - }), - r[1] ? (a.data = r[1]) : (a.data = ""), - void s.trigger("data", a)) - : (r = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(e)) - ? ((a = { - type: "tag", - tagType: "cue-out", - }), - r[1] ? (a.data = r[1]) : (a.data = ""), - void s.trigger("data", a)) - : (r = /^#EXT-X-CUE-IN:?(.*)?$/.exec(e)) - ? ((a = { - type: "tag", - tagType: "cue-in", - }), - r[1] - ? (a.data = r[1]) - : (a.data = ""), - void s.trigger("data", a)) - : (r = /^#EXT-X-SKIP:(.*)$/.exec(e)) && - r[1] - ? (((a = { - type: "tag", - tagType: "skip", - }).attributes = lr(r[1])), - a.attributes.hasOwnProperty( - "SKIPPED-SEGMENTS", - ) && - (a.attributes[ - "SKIPPED-SEGMENTS" - ] = parseInt( - a.attributes[ - "SKIPPED-SEGMENTS" - ], - 10, - )), - a.attributes.hasOwnProperty( - "RECENTLY-REMOVED-DATERANGES", - ) && - (a.attributes[ - "RECENTLY-REMOVED-DATERANGES" - ] = - a.attributes[ - "RECENTLY-REMOVED-DATERANGES" - ].split(kr)), - void s.trigger("data", a)) - : (r = /^#EXT-X-PART:(.*)$/.exec( - e, - )) && r[1] - ? (((a = { - type: "tag", - tagType: "part", - }).attributes = lr(r[1])), - ["DURATION"].forEach( - function (e) { - a.attributes.hasOwnProperty( - e, - ) && - (a.attributes[e] = - parseFloat( - a.attributes[e], - )); - }, - ), - ["INDEPENDENT", "GAP"].forEach( - function (e) { - a.attributes.hasOwnProperty( - e, - ) && - (a.attributes[e] = - /YES/.test( - a.attributes[e], - )); - }, - ), - a.attributes.hasOwnProperty( - "BYTERANGE", - ) && - (a.attributes.byterange = ur( - a.attributes.BYTERANGE, - )), - void s.trigger("data", a)) - : (r = - /^#EXT-X-SERVER-CONTROL:(.*)$/.exec( - e, - )) && r[1] - ? (((a = { - type: "tag", - tagType: "server-control", - }).attributes = lr(r[1])), - [ - "CAN-SKIP-UNTIL", - "PART-HOLD-BACK", - "HOLD-BACK", - ].forEach(function (e) { - a.attributes.hasOwnProperty( - e, - ) && - (a.attributes[e] = - parseFloat( - a.attributes[e], - )); - }), - [ - "CAN-SKIP-DATERANGES", - "CAN-BLOCK-RELOAD", - ].forEach(function (e) { - a.attributes.hasOwnProperty( - e, - ) && - (a.attributes[e] = - /YES/.test( - a.attributes[e], - )); - }), - void s.trigger("data", a)) - : (r = - /^#EXT-X-PART-INF:(.*)$/.exec( - e, - )) && r[1] - ? (((a = { - type: "tag", - tagType: "part-inf", - }).attributes = lr(r[1])), - ["PART-TARGET"].forEach( - function (e) { - a.attributes.hasOwnProperty( - e, - ) && - (a.attributes[e] = - parseFloat( - a.attributes[e], - )); - }, - ), - void s.trigger("data", a)) - : (r = - /^#EXT-X-PRELOAD-HINT:(.*)$/.exec( - e, - )) && r[1] - ? (((a = { - type: "tag", - tagType: "preload-hint", - }).attributes = lr(r[1])), - [ - "BYTERANGE-START", - "BYTERANGE-LENGTH", - ].forEach(function (e) { - var t; - a.attributes.hasOwnProperty( - e, - ) && - ((a.attributes[e] = - parseInt( - a.attributes[e], - 10, - )), - (t = - "BYTERANGE-LENGTH" === - e - ? "length" - : "offset"), - (a.attributes.byterange = - a.attributes - .byterange || {}), - (a.attributes.byterange[ - t - ] = a.attributes[e]), - delete a.attributes[e]); - }), - void s.trigger("data", a)) - : (r = - /^#EXT-X-RENDITION-REPORT:(.*)$/.exec( - e, - )) && r[1] - ? (((a = { - type: "tag", - tagType: - "rendition-report", - }).attributes = lr(r[1])), - [ - "LAST-MSN", - "LAST-PART", - ].forEach(function (e) { - a.attributes.hasOwnProperty( - e, - ) && - (a.attributes[e] = - parseInt( - a.attributes[e], - 10, - )); - }), - void s.trigger("data", a)) - : void s.trigger("data", { - type: "tag", - data: e.slice(4), - }); - s.trigger("data", { - type: "tag", - tagType: "discontinuity", - }); - } - } - else - s.trigger("data", { type: "comment", text: e.slice(1) }); - }) - : this.trigger("data", { type: "uri", uri: i })); - }), - (i.addParser = function (e) { - var t = this, - i = e.expression, - n = e.customType, - r = e.dataParser, - a = e.segment; - "function" != typeof r && - (r = function (e) { - return e; - }), - this.customParsers.push(function (e) { - if (i.exec(e)) - return ( - t.trigger("data", { - type: "custom", - data: r(e), - customType: n, - segment: a, - }), - !0 - ); - }); - }), - (i.addTagMapper = function (e) { - var t = e.expression, - i = e.map; - this.tagMappers.push(function (e) { - return t.test(e) ? i(e) : e; - }); - }), - e - ); - })(ar), - Ir = (function (t) { - function e() { - var e = t.call(this) || this; - (e.lineStream = new Er()), - (e.parseStream = new Cr()), - e.lineStream.pipe(e.parseStream); - var n, - r, - a = ft(e), - o = [], - u = {}, - l = !1, - c = { AUDIO: {}, VIDEO: {}, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, - d = 0; - e.manifest = { allowCache: !0, discontinuityStarts: [], segments: [] }; - var h = 0, - p = 0; - return ( - e.on("end", function () { - u.uri || - (!u.parts && !u.preloadHints) || - (!u.map && n && (u.map = n), - !u.key && r && (u.key = r), - u.timeline || "number" != typeof d || (u.timeline = d), - (e.manifest.preloadSegment = u)); - }), - e.parseStream.on("data", function (s) { - var t, i; - ({ - tag: function () { - ( - ({ - version: function () { - s.version && (this.manifest.version = s.version); - }, - "allow-cache": function () { - (this.manifest.allowCache = s.allowed), - "allowed" in s || - (this.trigger("info", { - message: "defaulting allowCache to YES", - }), - (this.manifest.allowCache = !0)); - }, - byterange: function () { - var e = {}; - "length" in s && - (((u.byterange = e).length = s.length), - "offset" in s || (s.offset = h)), - "offset" in s && ((u.byterange = e).offset = s.offset), - (h = e.offset + e.length); - }, - endlist: function () { - this.manifest.endList = !0; - }, - inf: function () { - "mediaSequence" in this.manifest || - ((this.manifest.mediaSequence = 0), - this.trigger("info", { - message: "defaulting media sequence to zero", - })), - "discontinuitySequence" in this.manifest || - ((this.manifest.discontinuitySequence = 0), - this.trigger("info", { - message: - "defaulting discontinuity sequence to zero", - })), - 0 < s.duration && (u.duration = s.duration), - 0 === s.duration && - ((u.duration = 0.01), - this.trigger("info", { - message: - "updating zero segment duration to a small value", - })), - (this.manifest.segments = o); - }, - key: function () { - if (s.attributes) - if ("NONE" !== s.attributes.METHOD) - if (s.attributes.URI) { - if ( - "com.apple.streamingkeydelivery" === - s.attributes.KEYFORMAT - ) - return ( - (this.manifest.contentProtection = - this.manifest.contentProtection || {}), - void (this.manifest.contentProtection[ - "com.apple.fps.1_0" - ] = { attributes: s.attributes }) - ); - if ( - "com.microsoft.playready" === - s.attributes.KEYFORMAT - ) - return ( - (this.manifest.contentProtection = - this.manifest.contentProtection || {}), - void (this.manifest.contentProtection[ - "com.microsoft.playready" - ] = { uri: s.attributes.URI }) - ); - if ( - "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" === - s.attributes.KEYFORMAT - ) - return -1 === - [ - "SAMPLE-AES", - "SAMPLE-AES-CTR", - "SAMPLE-AES-CENC", - ].indexOf(s.attributes.METHOD) - ? void this.trigger("warn", { - message: - "invalid key method provided for Widevine", - }) - : ("SAMPLE-AES-CENC" === s.attributes.METHOD && - this.trigger("warn", { - message: - "SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead", - }), - "data:text/plain;base64," !== - s.attributes.URI.substring(0, 23) - ? void this.trigger("warn", { - message: - "invalid key URI provided for Widevine", - }) - : s.attributes.KEYID && - "0x" === - s.attributes.KEYID.substring(0, 2) - ? ((this.manifest.contentProtection = - this.manifest.contentProtection || - {}), - void (this.manifest.contentProtection[ - "com.widevine.alpha" - ] = { - attributes: { - schemeIdUri: s.attributes.KEYFORMAT, - keyId: - s.attributes.KEYID.substring(2), - }, - pssh: or( - s.attributes.URI.split(",")[1], - ), - })) - : void this.trigger("warn", { - message: - "invalid key ID provided for Widevine", - })); - s.attributes.METHOD || - this.trigger("warn", { - message: "defaulting key method to AES-128", - }), - (r = { - method: s.attributes.METHOD || "AES-128", - uri: s.attributes.URI, - }), - "undefined" != typeof s.attributes.IV && - (r.iv = s.attributes.IV); - } else - this.trigger("warn", { - message: "ignoring key declaration without URI", - }); - else r = null; - else - this.trigger("warn", { - message: - "ignoring key declaration without attribute list", - }); - }, - "media-sequence": function () { - isFinite(s.number) - ? (this.manifest.mediaSequence = s.number) - : this.trigger("warn", { - message: - "ignoring invalid media sequence: " + s.number, - }); - }, - "discontinuity-sequence": function () { - isFinite(s.number) - ? ((this.manifest.discontinuitySequence = s.number), - (d = s.number)) - : this.trigger("warn", { - message: - "ignoring invalid discontinuity sequence: " + - s.number, - }); - }, - "playlist-type": function () { - /VOD|EVENT/.test(s.playlistType) - ? (this.manifest.playlistType = s.playlistType) - : this.trigger("warn", { - message: - "ignoring unknown playlist type: " + s.playlist, - }); - }, - map: function () { - (n = {}), - s.uri && (n.uri = s.uri), - s.byterange && (n.byterange = s.byterange), - r && (n.key = r); - }, - "stream-inf": function () { - (this.manifest.playlists = o), - (this.manifest.mediaGroups = - this.manifest.mediaGroups || c), - s.attributes - ? (u.attributes || (u.attributes = {}), - g(u.attributes, s.attributes)) - : this.trigger("warn", { - message: "ignoring empty stream-inf attributes", - }); - }, - media: function () { - var e; - (this.manifest.mediaGroups = - this.manifest.mediaGroups || c), - s.attributes && - s.attributes.TYPE && - s.attributes["GROUP-ID"] && - s.attributes.NAME - ? (((e = - this.manifest.mediaGroups[s.attributes.TYPE])[ - s.attributes["GROUP-ID"] - ] = e[s.attributes["GROUP-ID"]] || {}), - (t = e[s.attributes["GROUP-ID"]]), - (i = { default: /yes/i.test(s.attributes.DEFAULT) }) - .default - ? (i.autoselect = !0) - : (i.autoselect = /yes/i.test( - s.attributes.AUTOSELECT, - )), - s.attributes.LANGUAGE && - (i.language = s.attributes.LANGUAGE), - s.attributes.URI && (i.uri = s.attributes.URI), - s.attributes["INSTREAM-ID"] && - (i.instreamId = s.attributes["INSTREAM-ID"]), - s.attributes.CHARACTERISTICS && - (i.characteristics = - s.attributes.CHARACTERISTICS), - s.attributes.FORCED && - (i.forced = /yes/i.test(s.attributes.FORCED)), - (t[s.attributes.NAME] = i)) - : this.trigger("warn", { - message: - "ignoring incomplete or missing media group", - }); - }, - discontinuity: function () { - (d += 1), - (u.discontinuity = !0), - this.manifest.discontinuityStarts.push(o.length); - }, - "program-date-time": function () { - "undefined" == typeof this.manifest.dateTimeString && - ((this.manifest.dateTimeString = s.dateTimeString), - (this.manifest.dateTimeObject = s.dateTimeObject)), - (u.dateTimeString = s.dateTimeString), - (u.dateTimeObject = s.dateTimeObject); - }, - targetduration: function () { - !isFinite(s.duration) || s.duration < 0 - ? this.trigger("warn", { - message: - "ignoring invalid target duration: " + s.duration, - }) - : ((this.manifest.targetDuration = s.duration), - dr.call(this, this.manifest)); - }, - start: function () { - s.attributes && !isNaN(s.attributes["TIME-OFFSET"]) - ? (this.manifest.start = { - timeOffset: s.attributes["TIME-OFFSET"], - precise: s.attributes.PRECISE, - }) - : this.trigger("warn", { - message: - "ignoring start declaration without appropriate attribute list", - }); - }, - "cue-out": function () { - u.cueOut = s.data; - }, - "cue-out-cont": function () { - u.cueOutCont = s.data; - }, - "cue-in": function () { - u.cueIn = s.data; - }, - skip: function () { - (this.manifest.skip = cr(s.attributes)), - this.warnOnMissingAttributes_( - "#EXT-X-SKIP", - s.attributes, - ["SKIPPED-SEGMENTS"], - ); - }, - part: function () { - var i = this; - l = !0; - var e = this.manifest.segments.length, - t = cr(s.attributes); - (u.parts = u.parts || []), - u.parts.push(t), - t.byterange && - (t.byterange.hasOwnProperty("offset") || - (t.byterange.offset = p), - (p = t.byterange.offset + t.byterange.length)); - var n = u.parts.length - 1; - this.warnOnMissingAttributes_( - "#EXT-X-PART #" + n + " for segment #" + e, - s.attributes, - ["URI", "DURATION"], - ), - this.manifest.renditionReports && - this.manifest.renditionReports.forEach( - function (e, t) { - e.hasOwnProperty("lastPart") || - i.trigger("warn", { - message: - "#EXT-X-RENDITION-REPORT #" + - t + - " lacks required attribute(s): LAST-PART", - }); - }, - ); - }, - "server-control": function () { - var e = (this.manifest.serverControl = cr(s.attributes)); - e.hasOwnProperty("canBlockReload") || - ((e.canBlockReload = !1), - this.trigger("info", { - message: - "#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false", - })), - dr.call(this, this.manifest), - e.canSkipDateranges && - !e.hasOwnProperty("canSkipUntil") && - this.trigger("warn", { - message: - "#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set", - }); - }, - "preload-hint": function () { - var e = this.manifest.segments.length, - t = cr(s.attributes), - i = t.type && "PART" === t.type; - (u.preloadHints = u.preloadHints || []), - u.preloadHints.push(t), - t.byterange && - (t.byterange.hasOwnProperty("offset") || - ((t.byterange.offset = i ? p : 0), - i && - (p = t.byterange.offset + t.byterange.length))); - var n = u.preloadHints.length - 1; - if ( - (this.warnOnMissingAttributes_( - "#EXT-X-PRELOAD-HINT #" + n + " for segment #" + e, - s.attributes, - ["TYPE", "URI"], - ), - t.type) - ) - for (var r = 0; r < u.preloadHints.length - 1; r++) { - var a = u.preloadHints[r]; - a.type && - a.type === t.type && - this.trigger("warn", { - message: - "#EXT-X-PRELOAD-HINT #" + - n + - " for segment #" + - e + - " has the same TYPE " + - t.type + - " as preload hint #" + - r, - }); - } - }, - "rendition-report": function () { - var e = cr(s.attributes); - (this.manifest.renditionReports = - this.manifest.renditionReports || []), - this.manifest.renditionReports.push(e); - var t = this.manifest.renditionReports.length - 1, - e = ["LAST-MSN", "URI"]; - l && e.push("LAST-PART"), - this.warnOnMissingAttributes_( - "#EXT-X-RENDITION-REPORT #" + t, - s.attributes, - e, - ); - }, - "part-inf": function () { - (this.manifest.partInf = cr(s.attributes)), - this.warnOnMissingAttributes_( - "#EXT-X-PART-INF", - s.attributes, - ["PART-TARGET"], - ), - this.manifest.partInf.partTarget && - (this.manifest.partTargetDuration = - this.manifest.partInf.partTarget), - dr.call(this, this.manifest); - }, - })[s.tagType] || function () {} - ).call(a); - }, - uri: function () { - (u.uri = s.uri), - o.push(u), - !this.manifest.targetDuration || - "duration" in u || - (this.trigger("warn", { - message: - "defaulting segment duration to the target duration", - }), - (u.duration = this.manifest.targetDuration)), - r && (u.key = r), - (u.timeline = d), - n && (u.map = n), - (p = 0), - (u = {}); - }, - comment: function () {}, - custom: function () { - s.segment - ? ((u.custom = u.custom || {}), - (u.custom[s.customType] = s.data)) - : ((this.manifest.custom = this.manifest.custom || {}), - (this.manifest.custom[s.customType] = s.data)); - }, - })[s.type].call(a); - }), - e - ); - } - mt(e, t); - var i = e.prototype; - return ( - (i.warnOnMissingAttributes_ = function (e, t, i) { - var n = []; - i.forEach(function (e) { - t.hasOwnProperty(e) || n.push(e); - }), - n.length && - this.trigger("warn", { - message: e + " lacks required attribute(s): " + n.join(", "), - }); - }), - (i.push = function (e) { - this.lineStream.push(e); - }), - (i.end = function () { - this.lineStream.push("\n"), this.trigger("end"); - }), - (i.addParser = function (e) { - this.parseStream.addParser(e); - }), - (i.addTagMapper = function (e) { - this.parseStream.addTagMapper(e); - }), - e - ); - })(ar), - xr = { - mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/, - webm: /^(vp0?[89]|av0?1|opus|vorbis)/, - ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/, - video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/, - audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/, - text: /^(stpp.ttml.im1t)/, - muxerVideo: /^(avc0?1)/, - muxerAudio: /^(mp4a)/, - muxerText: /a^/, - }, - Ar = ["video", "audio", "text"], - Pr = ["Video", "Audio", "Text"], - Lr = "mp4a.40.2", - Dr = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i, - Or = /^application\/dash\+xml/i, - Mr = _r, - Rr = window.BigInt || Number, - Nr = [ - Rr("0x1"), - Rr("0x100"), - Rr("0x10000"), - Rr("0x1000000"), - Rr("0x100000000"), - Rr("0x10000000000"), - Rr("0x1000000000000"), - Rr("0x100000000000000"), - Rr("0x10000000000000000"), - ]; - function Ur(e, t) { - return (t = void 0 === t ? Object : t) && "function" == typeof t.freeze - ? t.freeze(e) - : e; - } - var Br = Ur({ - HTML: "text/html", - isHTML: function (e) { - return e === Br.HTML; - }, - XML_APPLICATION: "application/xml", - XML_TEXT: "text/xml", - XML_XHTML_APPLICATION: "application/xhtml+xml", - XML_SVG_IMAGE: "image/svg+xml", - }), - Fr = Ur({ - HTML: "http://www.w3.org/1999/xhtml", - isHTML: function (e) { - return e === Fr.HTML; - }, - SVG: "http://www.w3.org/2000/svg", - XML: "http://www.w3.org/XML/1998/namespace", - XMLNS: "http://www.w3.org/2000/xmlns/", - }), - jr = { freeze: Ur, MIME_TYPE: Br, NAMESPACE: Fr }, - Hr = jr.NAMESPACE; - function qr(e) { - return "" !== e; - } - function Vr(e, t) { - return e.hasOwnProperty(t) || (e[t] = !0), e; - } - function Wr(e) { - if (!e) return []; - e = (e = e) ? e.split(/[\t\n\f\r ]+/).filter(qr) : []; - return Object.keys(e.reduce(Vr, {})); - } - function Gr(e, t) { - for (var i in e) t[i] = e[i]; - } - function zr(e, t) { - var i, - n = e.prototype; - n instanceof t || - (((i = function () {}).prototype = t.prototype), - Gr(n, (i = new i())), - (e.prototype = n = i)), - n.constructor != e && (n.constructor = e); - } - var W = {}, - Xr = (W.ELEMENT_NODE = 1), - Kr = (W.ATTRIBUTE_NODE = 2), - Yr = (W.TEXT_NODE = 3), - Qr = (W.CDATA_SECTION_NODE = 4), - $r = (W.ENTITY_REFERENCE_NODE = 5), - Jr = ((W.ENTITY_NODE = 6), (W.PROCESSING_INSTRUCTION_NODE = 7)), - Zr = (W.COMMENT_NODE = 8), - ea = (W.DOCUMENT_NODE = 9), - ta = (W.DOCUMENT_TYPE_NODE = 10), - ia = (W.DOCUMENT_FRAGMENT_NODE = 11), - x = ((W.NOTATION_NODE = 12), {}), - na = {}; - (x.INDEX_SIZE_ERR = ((na[1] = "Index size error"), 1)), - (x.DOMSTRING_SIZE_ERR = ((na[2] = "DOMString size error"), 2)); - x.HIERARCHY_REQUEST_ERR = ((na[3] = "Hierarchy request error"), 3); - (x.WRONG_DOCUMENT_ERR = ((na[4] = "Wrong document"), 4)), - (x.INVALID_CHARACTER_ERR = ((na[5] = "Invalid character"), 5)), - (x.NO_DATA_ALLOWED_ERR = ((na[6] = "No data allowed"), 6)), - (x.NO_MODIFICATION_ALLOWED_ERR = ((na[7] = "No modification allowed"), 7)); - x.NOT_FOUND_ERR = ((na[8] = "Not found"), 8); - x.NOT_SUPPORTED_ERR = ((na[9] = "Not supported"), 9); - var ra; - x.INUSE_ATTRIBUTE_ERR = ((na[10] = "Attribute in use"), 10); - function aa(e, t) { - var i; - return ( - t instanceof Error - ? (i = t) - : ((i = this), - Error.call(this, na[e]), - (this.message = na[e]), - Error.captureStackTrace && Error.captureStackTrace(this, aa)), - (i.code = e), - t && (this.message = this.message + ": " + t), - i - ); - } - function sa() {} - function oa(e, t) { - (this._node = e), (this._refresh = t), ua(this); - } - function ua(e) { - var t, - i = e._node._inc || e._node.ownerDocument._inc; - e._inc != i && - ((t = e._refresh(e._node)), - Fa(e, "length", t.length), - Gr(t, e), - (e._inc = i)); - } - function la() {} - function ca(e, t) { - for (var i = e.length; i--; ) if (e[i] === t) return i; - } - function da(e, t, i, n) { - n ? (t[ca(t, n)] = i) : (t[t.length++] = i), - !e || - ((t = (i.ownerElement = e).ownerDocument) && - (n && va(t, e, n), - (e = e), - (i = i), - (t = t) && t._inc++, - i.namespaceURI === Hr.XMLNS && - (e._nsMap[i.prefix ? i.localName : ""] = i.value))); - } - function ha(e, t, i) { - var n = ca(t, i); - if (!(0 <= n)) throw aa(8, new Error(e.tagName + "@" + i)); - for (var r, a = t.length - 1; n < a; ) t[n] = t[++n]; - (t.length = a), - !e || ((r = e.ownerDocument) && (va(r, e, i), (i.ownerElement = null))); - } - function pa() {} - function fa() {} - function ma(e) { - return ( - ("<" == e ? "<" : ">" == e && ">") || - ("&" == e && "&") || - ('"' == e && """) || - "&#" + e.charCodeAt() + ";" - ); - } - function ga(e, t) { - if (t(e)) return 1; - if ((e = e.firstChild)) - do { - if (ga(e, t)) return 1; - } while ((e = e.nextSibling)); - } - function ya() {} - function va(e, t, i) { - e && e._inc++, - i.namespaceURI === Hr.XMLNS && - delete t._nsMap[i.prefix ? i.localName : ""]; - } - function _a(e, t, i) { - if (e && e._inc) { - e._inc++; - var n = t.childNodes; - if (i) n[n.length++] = i; - else { - for (var r = t.firstChild, a = 0; r; ) r = (n[a++] = r).nextSibling; - n.length = a; - } - } - } - function ba(e, t) { - var i = t.previousSibling, - n = t.nextSibling; - return ( - i ? (i.nextSibling = n) : (e.firstChild = n), - n ? (n.previousSibling = i) : (e.lastChild = i), - _a(e.ownerDocument, e), - t - ); - } - function Ta(e, t, i) { - var n = t.parentNode; - if ((n && n.removeChild(t), t.nodeType === ia)) { - var r = t.firstChild; - if (null == r) return t; - var a = t.lastChild; - } else r = a = t; - n = i ? i.previousSibling : e.lastChild; - for ( - r.previousSibling = n, - a.nextSibling = i, - n ? (n.nextSibling = r) : (e.firstChild = r), - null == i ? (e.lastChild = a) : (i.previousSibling = a); - (r.parentNode = e), r !== a && (r = r.nextSibling); - - ); - return ( - _a(e.ownerDocument || e, e), - t.nodeType == ia && (t.firstChild = t.lastChild = null), - t - ); - } - function Sa() { - this._nsMap = {}; - } - function wa() {} - function Ea() {} - function ka() {} - function Ca() {} - function Ia() {} - function xa() {} - function Aa() {} - function Pa() {} - function La() {} - function Da() {} - function Oa() {} - function Ma() {} - function Ra(e, t) { - var i, - n = [], - r = (9 == this.nodeType && this.documentElement) || this, - a = r.prefix, - s = r.namespaceURI; - return ( - Ba( - this, - n, - e, - t, - (i = - s && null == a && null == (a = r.lookupPrefix(s)) - ? [{ namespace: s, prefix: null }] - : i), - ), - n.join("") - ); - } - function Na(e, t, i) { - var n = e.prefix || "", - r = e.namespaceURI; - if (r && ("xml" !== n || r !== Hr.XML) && r !== Hr.XMLNS) { - for (var a = i.length; a--; ) { - var s = i[a]; - if (s.prefix === n) return s.namespace !== r; - } - return 1; - } - } - function Ua(e, t, i) { - e.push(" ", t, '="', i.replace(/[<&"]/g, ma), '"'); - } - function Ba(e, t, i, n, r) { - if (((r = r || []), n)) { - if (!(e = n(e))) return; - if ("string" == typeof e) return void t.push(e); - } - switch (e.nodeType) { - case Xr: - var a = e.attributes, - s = a.length, - o = e.firstChild, - u = e.tagName, - l = u; - if ( - !(i = Hr.isHTML(e.namespaceURI) || i) && - !e.prefix && - e.namespaceURI - ) { - for (var c, d = 0; d < a.length; d++) - if ("xmlns" === a.item(d).name) { - c = a.item(d).value; - break; - } - if (!c) - for (var h = r.length - 1; 0 <= h; h--) - if ("" === (p = r[h]).prefix && p.namespace === e.namespaceURI) { - c = p.namespace; - break; - } - if (c !== e.namespaceURI) - for (var p, h = r.length - 1; 0 <= h; h--) - if ((p = r[h]).namespace === e.namespaceURI) { - p.prefix && (l = p.prefix + ":" + u); - break; - } - } - t.push("<", l); - for (var f = 0; f < s; f++) - "xmlns" == (m = a.item(f)).prefix - ? r.push({ prefix: m.localName, namespace: m.value }) - : "xmlns" == m.nodeName && - r.push({ prefix: "", namespace: m.value }); - for (var m, g, y, f = 0; f < s; f++) - Na((m = a.item(f)), 0, r) && - (Ua( - t, - (g = m.prefix || "") ? "xmlns:" + g : "xmlns", - (y = m.namespaceURI), - ), - r.push({ prefix: g, namespace: y })), - Ba(m, t, i, n, r); - if ( - (u === l && - Na(e, 0, r) && - (Ua( - t, - (g = e.prefix || "") ? "xmlns:" + g : "xmlns", - (y = e.namespaceURI), - ), - r.push({ prefix: g, namespace: y })), - o || (i && !/^(?:meta|link|img|br|hr|input)$/i.test(u))) - ) { - if ((t.push(">"), i && /^script$/i.test(u))) - for (; o; ) - o.data ? t.push(o.data) : Ba(o, t, i, n, r.slice()), - (o = o.nextSibling); - else for (; o; ) Ba(o, t, i, n, r.slice()), (o = o.nextSibling); - t.push(""); - } else t.push("/>"); - return; - case ea: - case ia: - for (o = e.firstChild; o; ) - Ba(o, t, i, n, r.slice()), (o = o.nextSibling); - return; - case Kr: - return Ua(t, e.name, e.value), 0; - case Yr: - return t.push(e.data.replace(/[<&]/g, ma).replace(/]]>/g, "]]>")); - case Qr: - return t.push(""); - case Zr: - return t.push("\x3c!--", e.data, "--\x3e"); - case ta: - var v = e.publicId, - _ = e.systemId; - return ( - t.push("")) - : _ && "." != _ - ? t.push(" SYSTEM ", _, ">") - : ((_ = e.internalSubset) && t.push(" [", _, "]"), t.push(">"))) - ); - case Jr: - return t.push(""); - case $r: - return t.push("&", e.nodeName, ";"); - default: - t.push("??", e.nodeName); - } - } - function Fa(e, t, i) { - e[t] = i; - } - (x.INVALID_STATE_ERR = ((na[11] = "Invalid state"), 11)), - (x.SYNTAX_ERR = ((na[12] = "Syntax error"), 12)), - (x.INVALID_MODIFICATION_ERR = ((na[13] = "Invalid modification"), 13)), - (x.NAMESPACE_ERR = ((na[14] = "Invalid namespace"), 14)), - (x.INVALID_ACCESS_ERR = ((na[15] = "Invalid access"), 15)), - (aa.prototype = Error.prototype), - Gr(x, aa), - (sa.prototype = { - length: 0, - item: function (e) { - return this[e] || null; - }, - toString: function (e, t) { - for (var i = [], n = 0; n < this.length; n++) Ba(this[n], i, e, t); - return i.join(""); - }, - }), - (oa.prototype.item = function (e) { - return ua(this), this[e]; - }), - zr(oa, sa), - (la.prototype = { - length: 0, - item: sa.prototype.item, - getNamedItem: function (e) { - for (var t = this.length; t--; ) { - var i = this[t]; - if (i.nodeName == e) return i; - } - }, - setNamedItem: function (e) { - var t = e.ownerElement; - if (t && t != this._ownerElement) throw new aa(10); - t = this.getNamedItem(e.nodeName); - return da(this._ownerElement, this, e, t), t; - }, - setNamedItemNS: function (e) { - var t = e.ownerElement; - if (t && t != this._ownerElement) throw new aa(10); - return ( - (t = this.getNamedItemNS(e.namespaceURI, e.localName)), - da(this._ownerElement, this, e, t), - t - ); - }, - removeNamedItem: function (e) { - e = this.getNamedItem(e); - return ha(this._ownerElement, this, e), e; - }, - removeNamedItemNS: function (e, t) { - t = this.getNamedItemNS(e, t); - return ha(this._ownerElement, this, t), t; - }, - getNamedItemNS: function (e, t) { - for (var i = this.length; i--; ) { - var n = this[i]; - if (n.localName == t && n.namespaceURI == e) return n; - } - return null; - }, - }), - (pa.prototype = { - hasFeature: function (e, t) { - return !0; - }, - createDocument: function (e, t, i) { - var n = new ya(); - return ( - (n.implementation = this), - (n.childNodes = new sa()), - (n.doctype = i || null), - i && n.appendChild(i), - t && ((t = n.createElementNS(e, t)), n.appendChild(t)), - n - ); - }, - createDocumentType: function (e, t, i) { - var n = new xa(); - return ( - (n.name = e), - (n.nodeName = e), - (n.publicId = t || ""), - (n.systemId = i || ""), - n - ); - }, - }), - (fa.prototype = { - firstChild: null, - lastChild: null, - previousSibling: null, - nextSibling: null, - attributes: null, - parentNode: null, - childNodes: null, - ownerDocument: null, - nodeValue: null, - namespaceURI: null, - prefix: null, - localName: null, - insertBefore: function (e, t) { - return Ta(this, e, t); - }, - replaceChild: function (e, t) { - this.insertBefore(e, t), t && this.removeChild(t); - }, - removeChild: function (e) { - return ba(this, e); - }, - appendChild: function (e) { - return this.insertBefore(e, null); - }, - hasChildNodes: function () { - return null != this.firstChild; - }, - cloneNode: function (e) { - return (function e(t, i, n) { - var r = new i.constructor(); - for (var a in i) { - var s = i[a]; - "object" != typeof s && s != r[a] && (r[a] = s); - } - i.childNodes && (r.childNodes = new sa()); - r.ownerDocument = t; - switch (r.nodeType) { - case Xr: - var o = i.attributes, - u = (r.attributes = new la()), - l = o.length; - u._ownerElement = r; - for (var c = 0; c < l; c++) - r.setAttributeNode(e(t, o.item(c), !0)); - break; - case Kr: - n = !0; - } - if (n) - for (var d = i.firstChild; d; ) - r.appendChild(e(t, d, n)), (d = d.nextSibling); - return r; - })(this.ownerDocument || this, this, e); - }, - normalize: function () { - for (var e = this.firstChild; e; ) { - var t = e.nextSibling; - t && t.nodeType == Yr && e.nodeType == Yr - ? (this.removeChild(t), e.appendData(t.data)) - : (e.normalize(), (e = t)); - } - }, - isSupported: function (e, t) { - return this.ownerDocument.implementation.hasFeature(e, t); - }, - hasAttributes: function () { - return 0 < this.attributes.length; - }, - lookupPrefix: function (e) { - for (var t = this; t; ) { - var i = t._nsMap; - if (i) for (var n in i) if (i[n] == e) return n; - t = t.nodeType == Kr ? t.ownerDocument : t.parentNode; - } - return null; - }, - lookupNamespaceURI: function (e) { - for (var t = this; t; ) { - var i = t._nsMap; - if (i && e in i) return i[e]; - t = t.nodeType == Kr ? t.ownerDocument : t.parentNode; - } - return null; - }, - isDefaultNamespace: function (e) { - return null == this.lookupPrefix(e); - }, - }), - Gr(W, fa), - Gr(W, fa.prototype), - (ya.prototype = { - nodeName: "#document", - nodeType: ea, - doctype: null, - documentElement: null, - _inc: 1, - insertBefore: function (e, t) { - if (e.nodeType != ia) - return ( - null == this.documentElement && - e.nodeType == Xr && - (this.documentElement = e), - Ta(this, e, t), - (e.ownerDocument = this), - e - ); - for (var i = e.firstChild; i; ) { - var n = i.nextSibling; - this.insertBefore(i, t), (i = n); - } - return e; - }, - removeChild: function (e) { - return ( - this.documentElement == e && (this.documentElement = null), - ba(this, e) - ); - }, - importNode: function (e, t) { - return (function e(t, i, n) { - var r; - switch (i.nodeType) { - case Xr: - (r = i.cloneNode(!1)).ownerDocument = t; - case ia: - break; - case Kr: - n = !0; - } - r = r || i.cloneNode(!1); - r.ownerDocument = t; - r.parentNode = null; - if (n) - for (var a = i.firstChild; a; ) - r.appendChild(e(t, a, n)), (a = a.nextSibling); - return r; - })(this, e, t); - }, - getElementById: function (t) { - var i = null; - return ( - ga(this.documentElement, function (e) { - if (e.nodeType == Xr && e.getAttribute("id") == t) - return (i = e), !0; - }), - i - ); - }, - getElementsByClassName: function (s) { - var o = Wr(s); - return new oa(this, function (r) { - var a = []; - return ( - 0 < o.length && - ga(r.documentElement, function (e) { - var t, i, n; - e === r || - e.nodeType !== Xr || - ((t = e.getAttribute("class")) && - ((i = s === t) || - ((t = Wr(t)), - (i = o.every( - ((n = t), - function (e) { - return n && -1 !== n.indexOf(e); - }), - ))), - i && a.push(e))); - }), - a - ); - }); - }, - createElement: function (e) { - var t = new Sa(); - return ( - (t.ownerDocument = this), - (t.nodeName = e), - (t.tagName = e), - (t.localName = e), - (t.childNodes = new sa()), - ((t.attributes = new la())._ownerElement = t) - ); - }, - createDocumentFragment: function () { - var e = new Da(); - return (e.ownerDocument = this), (e.childNodes = new sa()), e; - }, - createTextNode: function (e) { - var t = new ka(); - return (t.ownerDocument = this), t.appendData(e), t; - }, - createComment: function (e) { - var t = new Ca(); - return (t.ownerDocument = this), t.appendData(e), t; - }, - createCDATASection: function (e) { - var t = new Ia(); - return (t.ownerDocument = this), t.appendData(e), t; - }, - createProcessingInstruction: function (e, t) { - var i = new Oa(); - return ( - (i.ownerDocument = this), - (i.tagName = i.target = e), - (i.nodeValue = i.data = t), - i - ); - }, - createAttribute: function (e) { - var t = new wa(); - return ( - (t.ownerDocument = this), - (t.name = e), - (t.nodeName = e), - (t.localName = e), - (t.specified = !0), - t - ); - }, - createEntityReference: function (e) { - var t = new La(); - return (t.ownerDocument = this), (t.nodeName = e), t; - }, - createElementNS: function (e, t) { - var i = new Sa(), - n = t.split(":"), - r = (i.attributes = new la()); - return ( - (i.childNodes = new sa()), - (i.ownerDocument = this), - (i.nodeName = t), - (i.tagName = t), - (i.namespaceURI = e), - 2 == n.length - ? ((i.prefix = n[0]), (i.localName = n[1])) - : (i.localName = t), - (r._ownerElement = i) - ); - }, - createAttributeNS: function (e, t) { - var i = new wa(), - n = t.split(":"); - return ( - (i.ownerDocument = this), - (i.nodeName = t), - (i.name = t), - (i.namespaceURI = e), - (i.specified = !0), - 2 == n.length - ? ((i.prefix = n[0]), (i.localName = n[1])) - : (i.localName = t), - i - ); - }, - }), - zr(ya, fa), - (ya.prototype.getElementsByTagName = (Sa.prototype = { - nodeType: Xr, - hasAttribute: function (e) { - return null != this.getAttributeNode(e); - }, - getAttribute: function (e) { - e = this.getAttributeNode(e); - return (e && e.value) || ""; - }, - getAttributeNode: function (e) { - return this.attributes.getNamedItem(e); - }, - setAttribute: function (e, t) { - e = this.ownerDocument.createAttribute(e); - (e.value = e.nodeValue = "" + t), this.setAttributeNode(e); - }, - removeAttribute: function (e) { - e = this.getAttributeNode(e); - e && this.removeAttributeNode(e); - }, - appendChild: function (e) { - return e.nodeType === ia - ? this.insertBefore(e, null) - : (function (e, t) { - var i = t.parentNode; - i && ((n = e.lastChild), i.removeChild(t), (n = e.lastChild)); - var n = e.lastChild; - return ( - (t.parentNode = e), - (t.previousSibling = n), - (t.nextSibling = null), - n ? (n.nextSibling = t) : (e.firstChild = t), - (e.lastChild = t), - _a(e.ownerDocument, e, t), - t - ); - })(this, e); - }, - setAttributeNode: function (e) { - return this.attributes.setNamedItem(e); - }, - setAttributeNodeNS: function (e) { - return this.attributes.setNamedItemNS(e); - }, - removeAttributeNode: function (e) { - return this.attributes.removeNamedItem(e.nodeName); - }, - removeAttributeNS: function (e, t) { - t = this.getAttributeNodeNS(e, t); - t && this.removeAttributeNode(t); - }, - hasAttributeNS: function (e, t) { - return null != this.getAttributeNodeNS(e, t); - }, - getAttributeNS: function (e, t) { - t = this.getAttributeNodeNS(e, t); - return (t && t.value) || ""; - }, - setAttributeNS: function (e, t, i) { - t = this.ownerDocument.createAttributeNS(e, t); - (t.value = t.nodeValue = "" + i), this.setAttributeNode(t); - }, - getAttributeNodeNS: function (e, t) { - return this.attributes.getNamedItemNS(e, t); - }, - getElementsByTagName: function (n) { - return new oa(this, function (t) { - var i = []; - return ( - ga(t, function (e) { - e === t || - e.nodeType != Xr || - ("*" !== n && e.tagName != n) || - i.push(e); - }), - i - ); - }); - }, - getElementsByTagNameNS: function (n, r) { - return new oa(this, function (t) { - var i = []; - return ( - ga(t, function (e) { - e === t || - e.nodeType !== Xr || - ("*" !== n && e.namespaceURI !== n) || - ("*" !== r && e.localName != r) || - i.push(e); - }), - i - ); - }); - }, - }).getElementsByTagName), - (ya.prototype.getElementsByTagNameNS = Sa.prototype.getElementsByTagNameNS), - zr(Sa, fa), - (wa.prototype.nodeType = Kr), - zr(wa, fa), - (Ea.prototype = { - data: "", - substringData: function (e, t) { - return this.data.substring(e, e + t); - }, - appendData: function (e) { - (e = this.data + e), - (this.nodeValue = this.data = e), - (this.length = e.length); - }, - insertData: function (e, t) { - this.replaceData(e, 0, t); - }, - appendChild: function (e) { - throw new Error(na[3]); - }, - deleteData: function (e, t) { - this.replaceData(e, t, ""); - }, - replaceData: function (e, t, i) { - var n = this.data.substring(0, e), - t = this.data.substring(e + t); - (this.nodeValue = this.data = i = n + i + t), (this.length = i.length); - }, - }), - zr(Ea, fa), - (ka.prototype = { - nodeName: "#text", - nodeType: Yr, - splitText: function (e) { - var t = (i = this.data).substring(e), - i = i.substring(0, e); - (this.data = this.nodeValue = i), (this.length = i.length); - t = this.ownerDocument.createTextNode(t); - return ( - this.parentNode && this.parentNode.insertBefore(t, this.nextSibling), - t - ); - }, - }), - zr(ka, Ea), - (Ca.prototype = { nodeName: "#comment", nodeType: Zr }), - zr(Ca, Ea), - (Ia.prototype = { nodeName: "#cdata-section", nodeType: Qr }), - zr(Ia, Ea), - (xa.prototype.nodeType = ta), - zr(xa, fa), - (Aa.prototype.nodeType = 12), - zr(Aa, fa), - (Pa.prototype.nodeType = 6), - zr(Pa, fa), - (La.prototype.nodeType = $r), - zr(La, fa), - (Da.prototype.nodeName = "#document-fragment"), - (Da.prototype.nodeType = ia), - zr(Da, fa), - (Oa.prototype.nodeType = Jr), - zr(Oa, fa), - (Ma.prototype.serializeToString = function (e, t, i) { - return Ra.call(e, t, i); - }), - (fa.prototype.toString = Ra); - try { - Object.defineProperty && - ((ra = function e(t) { - switch (t.nodeType) { - case Xr: - case ia: - var i = []; - for (t = t.firstChild; t; ) - 7 !== t.nodeType && 8 !== t.nodeType && i.push(e(t)), - (t = t.nextSibling); - return i.join(""); - default: - return t.nodeValue; - } - }), - Object.defineProperty(oa.prototype, "length", { - get: function () { - return ua(this), this.$$length; - }, - }), - Object.defineProperty(fa.prototype, "textContent", { - get: function () { - return ra(this); - }, - set: function (e) { - switch (this.nodeType) { - case Xr: - case ia: - for (; this.firstChild; ) this.removeChild(this.firstChild); - (e || String(e)) && - this.appendChild(this.ownerDocument.createTextNode(e)); - break; - default: - (this.data = e), (this.value = e), (this.nodeValue = e); - } - }, - }), - (Fa = function (e, t, i) { - e["$$" + t] = i; - })); - } catch (e) {} - var U = { - DocumentType: xa, - DOMException: aa, - DOMImplementation: pa, - Element: Sa, - Node: fa, - NodeList: sa, - XMLSerializer: Ma, - }, - ja = m(function (e, t) { - var i = jr.freeze; - (t.XML_ENTITIES = i({ - amp: "&", - apos: "'", - gt: ">", - lt: "<", - quot: '"', - })), - (t.HTML_ENTITIES = i({ - lt: "<", - gt: ">", - amp: "&", - quot: '"', - apos: "'", - Agrave: "À", - Aacute: "Á", - Acirc: "Â", - Atilde: "Ã", - Auml: "Ä", - Aring: "Å", - AElig: "Æ", - Ccedil: "Ç", - Egrave: "È", - Eacute: "É", - Ecirc: "Ê", - Euml: "Ë", - Igrave: "Ì", - Iacute: "Í", - Icirc: "Î", - Iuml: "Ï", - ETH: "Ð", - Ntilde: "Ñ", - Ograve: "Ò", - Oacute: "Ó", - Ocirc: "Ô", - Otilde: "Õ", - Ouml: "Ö", - Oslash: "Ø", - Ugrave: "Ù", - Uacute: "Ú", - Ucirc: "Û", - Uuml: "Ü", - Yacute: "Ý", - THORN: "Þ", - szlig: "ß", - agrave: "à", - aacute: "á", - acirc: "â", - atilde: "ã", - auml: "ä", - aring: "å", - aelig: "æ", - ccedil: "ç", - egrave: "è", - eacute: "é", - ecirc: "ê", - euml: "ë", - igrave: "ì", - iacute: "í", - icirc: "î", - iuml: "ï", - eth: "ð", - ntilde: "ñ", - ograve: "ò", - oacute: "ó", - ocirc: "ô", - otilde: "õ", - ouml: "ö", - oslash: "ø", - ugrave: "ù", - uacute: "ú", - ucirc: "û", - uuml: "ü", - yacute: "ý", - thorn: "þ", - yuml: "ÿ", - nbsp: " ", - iexcl: "¡", - cent: "¢", - pound: "£", - curren: "¤", - yen: "¥", - brvbar: "¦", - sect: "§", - uml: "¨", - copy: "©", - ordf: "ª", - laquo: "«", - not: "¬", - shy: "­­", - reg: "®", - macr: "¯", - deg: "°", - plusmn: "±", - sup2: "²", - sup3: "³", - acute: "´", - micro: "µ", - para: "¶", - middot: "·", - cedil: "¸", - sup1: "¹", - ordm: "º", - raquo: "»", - frac14: "¼", - frac12: "½", - frac34: "¾", - iquest: "¿", - times: "×", - divide: "÷", - forall: "∀", - part: "∂", - exist: "∃", - empty: "∅", - nabla: "∇", - isin: "∈", - notin: "∉", - ni: "∋", - prod: "∏", - sum: "∑", - minus: "−", - lowast: "∗", - radic: "√", - prop: "∝", - infin: "∞", - ang: "∠", - and: "∧", - or: "∨", - cap: "∩", - cup: "∪", - int: "∫", - there4: "∴", - sim: "∼", - cong: "≅", - asymp: "≈", - ne: "≠", - equiv: "≡", - le: "≤", - ge: "≥", - sub: "⊂", - sup: "⊃", - nsub: "⊄", - sube: "⊆", - supe: "⊇", - oplus: "⊕", - otimes: "⊗", - perp: "⊥", - sdot: "⋅", - Alpha: "Α", - Beta: "Β", - Gamma: "Γ", - Delta: "Δ", - Epsilon: "Ε", - Zeta: "Ζ", - Eta: "Η", - Theta: "Θ", - Iota: "Ι", - Kappa: "Κ", - Lambda: "Λ", - Mu: "Μ", - Nu: "Ν", - Xi: "Ξ", - Omicron: "Ο", - Pi: "Π", - Rho: "Ρ", - Sigma: "Σ", - Tau: "Τ", - Upsilon: "Υ", - Phi: "Φ", - Chi: "Χ", - Psi: "Ψ", - Omega: "Ω", - alpha: "α", - beta: "β", - gamma: "γ", - delta: "δ", - epsilon: "ε", - zeta: "ζ", - eta: "η", - theta: "θ", - iota: "ι", - kappa: "κ", - lambda: "λ", - mu: "μ", - nu: "ν", - xi: "ξ", - omicron: "ο", - pi: "π", - rho: "ρ", - sigmaf: "ς", - sigma: "σ", - tau: "τ", - upsilon: "υ", - phi: "φ", - chi: "χ", - psi: "ψ", - omega: "ω", - thetasym: "ϑ", - upsih: "ϒ", - piv: "ϖ", - OElig: "Œ", - oelig: "œ", - Scaron: "Š", - scaron: "š", - Yuml: "Ÿ", - fnof: "ƒ", - circ: "ˆ", - tilde: "˜", - ensp: " ", - emsp: " ", - thinsp: " ", - zwnj: "‌", - zwj: "‍", - lrm: "‎", - rlm: "‏", - ndash: "–", - mdash: "—", - lsquo: "‘", - rsquo: "’", - sbquo: "‚", - ldquo: "“", - rdquo: "”", - bdquo: "„", - dagger: "†", - Dagger: "‡", - bull: "•", - hellip: "…", - permil: "‰", - prime: "′", - Prime: "″", - lsaquo: "‹", - rsaquo: "›", - oline: "‾", - euro: "€", - trade: "™", - larr: "←", - uarr: "↑", - rarr: "→", - darr: "↓", - harr: "↔", - crarr: "↵", - lceil: "⌈", - rceil: "⌉", - lfloor: "⌊", - rfloor: "⌋", - loz: "◊", - spades: "♠", - clubs: "♣", - hearts: "♥", - diams: "♦", - })), - (t.entityMap = t.HTML_ENTITIES); - }); - ja.XML_ENTITIES, ja.HTML_ENTITIES, ja.entityMap; - var Ha = jr.NAMESPACE, - zt = - /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, - ar = new RegExp( - "[\\-\\.0-9" + - zt.source.slice(1, -1) + - "\\u00B7\\u0300-\\u036F\\u203F-\\u2040]", - ), - qa = new RegExp( - "^" + zt.source + ar.source + "*(?::" + zt.source + ar.source + "*)?$", - ), - Va = 0, - Wa = 1, - Ga = 2, - za = 3, - Xa = 4, - Ka = 5, - Ya = 6, - Qa = 7; - function $a(e, t) { - (this.message = e), - (this.locator = t), - Error.captureStackTrace && Error.captureStackTrace(this, $a); - } - function Ja() {} - function Za(e, t) { - return (t.lineNumber = e.lineNumber), (t.columnNumber = e.columnNumber), t; - } - function es(e, t, i) { - for (var n = e.tagName, r = null, a = e.length; a--; ) { - var s = e[a], - o = s.qName, - u = s.value, - o = - 0 < (c = o.indexOf(":")) - ? ((l = s.prefix = o.slice(0, c)), - (d = o.slice(c + 1)), - "xmlns" === l && d) - : ((l = null), "xmlns" === (d = o) && ""); - (s.localName = d), - !1 !== o && - (null == r && ((r = {}), ts(i, (i = {}))), - (i[o] = r[o] = u), - (s.uri = Ha.XMLNS), - t.startPrefixMapping(o, u)); - } - for (var l, a = e.length; a--; ) - (l = (s = e[a]).prefix) && - ("xml" === l && (s.uri = Ha.XML), - "xmlns" !== l && (s.uri = i[l || ""])); - var c, - d = - 0 < (c = n.indexOf(":")) - ? ((l = e.prefix = n.slice(0, c)), (e.localName = n.slice(c + 1))) - : ((l = null), (e.localName = n)), - h = (e.uri = i[l || ""]); - if ((t.startElement(h, d, n, e), !e.closed)) - return (e.currentNSMap = i), (e.localNSMap = r), 1; - if ((t.endElement(h, d, n), r)) for (l in r) t.endPrefixMapping(l); - } - function ts(e, t) { - for (var i in e) t[i] = e[i]; - } - function is() { - this.attributeNames = {}; - } - (($a.prototype = new Error()).name = $a.name), - (Ja.prototype = { - parse: function (e, t, i) { - var n = this.domBuilder; - n.startDocument(), - ts(t, (t = {})), - (function (i, e, n, r, a) { - function s(e) { - var t = e.slice(1, -1); - return t in n - ? n[t] - : "#" === t.charAt(0) - ? 65535 < (t = parseInt(t.substr(1).replace("x", "0x"))) - ? ((t -= 65536), - String.fromCharCode( - 55296 + (t >> 10), - 56320 + (1023 & t), - )) - : String.fromCharCode(t) - : (a.error("entity not found:" + e), e); - } - function t(e) { - var t; - f < e && - ((t = i.substring(f, e).replace(/&#?\w+;/g, s)), - d && o(f), - r.characters(t, 0, e - f), - (f = e)); - } - function o(e, t) { - for (; l <= e && (t = c.exec(i)); ) - (u = t.index), (l = u + t[0].length), d.lineNumber++; - d.columnNumber = e - u + 1; - } - var u = 0, - l = 0, - c = /.*(?:\r\n?|\n)|.*$/g, - d = r.locator, - h = [{ currentNSMap: e }], - p = {}, - f = 0; - for (;;) { - try { - var m, - g, - y = i.indexOf("<", f); - if (y < 0) - return ( - i.substr(f).match(/^\s*$/) || - ((m = r.doc), - (g = m.createTextNode(i.substr(f))), - m.appendChild(g), - (r.currentElement = g)) - ); - switch ((f < y && t(y), i.charAt(y + 1))) { - case "/": - var v = i.indexOf(">", y + 3), - _ = i.substring(y + 2, v).replace(/[ \t\n\r]+$/g, ""), - b = h.pop(); - v < 0 - ? ((_ = i.substring(y + 2).replace(/[\s<].*/, "")), - a.error( - "end tag name: " + - _ + - " is not complete:" + - b.tagName, - ), - (v = y + 1 + _.length)) - : _.match(/\s", t); - if (n) { - t = e - .substring(t, n) - .match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); - return t - ? (t[0].length, - i.processingInstruction(t[1], t[2]), - n + 2) - : -1; - } - return -1; - })(i, y, r)); - break; - case "!": - d && o(y), - (v = (function (e, t, i, n) { - { - if ("-" === e.charAt(t + 2)) { - if ("-" !== e.charAt(t + 3)) return -1; - var r = e.indexOf("--\x3e", t + 4); - return t < r - ? (i.comment(e, t + 4, r - t - 4), r + 3) - : (n.error("Unclosed comment"), -1); - } - if ("CDATA[" == e.substr(t + 3, 6)) { - r = e.indexOf("]]>", t + 9); - return ( - i.startCDATA(), - i.characters(e, t + 9, r - t - 9), - i.endCDATA(), - r + 3 - ); - } - var a = (function (e, t) { - var i, - n = [], - r = - /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; - (r.lastIndex = t), r.exec(e); - for (; (i = r.exec(e)); ) - if ((n.push(i), i[1])) return n; - })(e, t), - n = a.length; - if (1 < n && /!doctype/i.test(a[0][0])) { - (r = a[1][0]), (e = !1), (t = !1); - 3 < n && - (/^public$/i.test(a[2][0]) - ? ((e = a[3][0]), (t = 4 < n && a[4][0])) - : /^system$/i.test(a[2][0]) && (t = a[3][0])); - n = a[n - 1]; - return ( - i.startDTD(r, e, t), - i.endDTD(), - n.index + n[0].length - ); - } - } - return -1; - })(i, y, r, a)); - break; - default: - d && o(y); - var E = new is(), - k = h[h.length - 1].currentNSMap, - v = (function (e, t, n, i, r, a) { - function s(e, t, i) { - n.attributeNames.hasOwnProperty(e) && - a.fatalError("Attribute " + e + " redefined"), - n.addValue(e, t, i); - } - var o, - u = ++t, - l = Va; - for (;;) { - var c = e.charAt(u); - switch (c) { - case "=": - if (l === Wa) (o = e.slice(t, u)), (l = za); - else { - if (l !== Ga) - throw new Error( - "attribute equal must after attrName", - ); - l = za; - } - break; - case "'": - case '"': - if (l === za || l === Wa) { - if ( - (l === Wa && - (a.warning( - 'attribute value must after "="', - ), - (o = e.slice(t, u))), - (t = u + 1), - !(0 < (u = e.indexOf(c, t)))) - ) - throw new Error( - "attribute value no end '" + c + "' match", - ); - (d = e.slice(t, u).replace(/&#?\w+;/g, r)), - s(o, d, t - 1), - (l = Ka); - } else { - if (l != Xa) - throw new Error( - 'attribute value must after "="', - ); - (d = e.slice(t, u).replace(/&#?\w+;/g, r)), - s(o, d, t), - a.warning( - 'attribute "' + - o + - '" missed start quot(' + - c + - ")!!", - ), - (t = u + 1), - (l = Ka); - } - break; - case "/": - switch (l) { - case Va: - n.setTagName(e.slice(t, u)); - case Ka: - case Ya: - case Qa: - (l = Qa), (n.closed = !0); - case Xa: - case Wa: - case Ga: - break; - default: - throw new Error( - "attribute invalid close char('/')", - ); - } - break; - case "": - return ( - a.error("unexpected end of input"), - l == Va && n.setTagName(e.slice(t, u)), - u - ); - case ">": - switch (l) { - case Va: - n.setTagName(e.slice(t, u)); - case Ka: - case Ya: - case Qa: - break; - case Xa: - case Wa: - "/" === (d = e.slice(t, u)).slice(-1) && - ((n.closed = !0), (d = d.slice(0, -1))); - case Ga: - l === Ga && (d = o), - l == Xa - ? (a.warning( - 'attribute "' + - d + - '" missed quot(")!', - ), - s(o, d.replace(/&#?\w+;/g, r), t)) - : ((Ha.isHTML(i[""]) && - d.match( - /^(?:disabled|checked|selected)$/i, - )) || - a.warning( - 'attribute "' + - d + - '" missed value!! "' + - d + - '" instead!!', - ), - s(d, d, t)); - break; - case za: - throw new Error("attribute value missed!!"); - } - return u; - case "€": - c = " "; - default: - if (c <= " ") - switch (l) { - case Va: - n.setTagName(e.slice(t, u)), (l = Ya); - break; - case Wa: - (o = e.slice(t, u)), (l = Ga); - break; - case Xa: - var d = e - .slice(t, u) - .replace(/&#?\w+;/g, r); - a.warning( - 'attribute "' + d + '" missed quot(")!!', - ), - s(o, d, t); - case Ka: - l = Ya; - } - else - switch (l) { - case Ga: - n.tagName, - (Ha.isHTML(i[""]) && - o.match( - /^(?:disabled|checked|selected)$/i, - )) || - a.warning( - 'attribute "' + - o + - '" missed value!! "' + - o + - '" instead2!!', - ), - s(o, o, t), - (t = u), - (l = Wa); - break; - case Ka: - a.warning( - 'attribute space is required"' + - o + - '"!!', - ); - case Ya: - (l = Wa), (t = u); - break; - case za: - (l = Xa), (t = u); - break; - case Qa: - throw new Error( - "elements closed character '/' and '>' must be connected to", - ); - } - } - u++; - } - })(i, y, E, k, s, a), - C = E.length; - if ( - (!E.closed && - (function (e, t, i, n) { - var r = n[i]; - null == r && - ((r = e.lastIndexOf("")) < t && - (r = e.lastIndexOf("", t), - e = e.substring(t + 1, a); - if (/[&<]/.test(e)) - return ( - /^script$/i.test(i) || - (e = e.replace(/&#?\w+;/g, n)), - r.characters(e, 0, e.length), - a - ); - } - return t + 1; - })(i, v, E.tagName, s, r)) - : v++; - } - } catch (e) { - if (e instanceof $a) throw e; - a.error("element parse error: " + e), (v = -1); - } - f < v ? (f = v) : t(Math.max(y, f) + 1); - } - })(e, t, i, n, this.errorHandler), - n.endDocument(); - }, - }), - (is.prototype = { - setTagName: function (e) { - if (!qa.test(e)) throw new Error("invalid tagName:" + e); - this.tagName = e; - }, - addValue: function (e, t, i) { - if (!qa.test(e)) throw new Error("invalid attribute:" + e); - (this.attributeNames[e] = this.length), - (this[this.length++] = { qName: e, value: t, offset: i }); - }, - length: 0, - getLocalName: function (e) { - return this[e].localName; - }, - getLocator: function (e) { - return this[e].locator; - }, - getQName: function (e) { - return this[e].qName; - }, - getURI: function (e) { - return this[e].uri; - }, - getValue: function (e) { - return this[e].value; - }, - }); - var x = { XMLReader: Ja, ParseError: $a }, - ns = U.DOMImplementation, - rs = jr.NAMESPACE, - as = x.ParseError, - ss = x.XMLReader; - function os(e) { - this.options = e || { locator: {} }; - } - function us() { - this.cdata = !1; - } - function ls(e, t) { - (t.lineNumber = e.lineNumber), (t.columnNumber = e.columnNumber); - } - function cs(e) { - if (e) - return ( - "\n@" + - (e.systemId || "") + - "#[line:" + - e.lineNumber + - ",col:" + - e.columnNumber + - "]" - ); - } - function ds(e, t, i) { - return "string" == typeof e - ? e.substr(t, i) - : e.length >= t + i || t - ? new java.lang.String(e, t, i) + "" - : e; - } - function hs(e, t) { - (e.currentElement || e.doc).appendChild(t); - } - (os.prototype.parseFromString = function (e, t) { - var i = this.options, - n = new ss(), - r = i.domBuilder || new us(), - a = i.errorHandler, - s = i.locator, - o = i.xmlns || {}, - u = /\/x?html?$/.test(t), - t = u ? ja.HTML_ENTITIES : ja.XML_ENTITIES; - return ( - s && r.setDocumentLocator(s), - (n.errorHandler = (function (n, e, r) { - if (!n) { - if (e instanceof us) return e; - n = e; - } - var a = {}, - s = n instanceof Function; - function t(t) { - var i = n[t]; - !i && - s && - (i = - 2 == n.length - ? function (e) { - n(t, e); - } - : n), - (a[t] = i - ? function (e) { - i("[xmldom " + t + "]\t" + e + cs(r)); - } - : function () {}); - } - return (r = r || {}), t("warning"), t("error"), t("fatalError"), a; - })(a, r, s)), - (n.domBuilder = i.domBuilder || r), - u && (o[""] = rs.HTML), - (o.xml = o.xml || rs.XML), - e && "string" == typeof e - ? n.parse(e, o, t) - : n.errorHandler.error("invalid doc source"), - r.doc - ); - }), - (us.prototype = { - startDocument: function () { - (this.doc = new ns().createDocument(null, null, null)), - this.locator && (this.doc.documentURI = this.locator.systemId); - }, - startElement: function (e, t, i, n) { - var r = this.doc, - a = r.createElementNS(e, i || t), - s = n.length; - hs(this, a), - (this.currentElement = a), - this.locator && ls(this.locator, a); - for (var o = 0; o < s; o++) { - var e = n.getURI(o), - u = n.getValue(o), - i = n.getQName(o), - l = r.createAttributeNS(e, i); - this.locator && ls(n.getLocator(o), l), - (l.value = l.nodeValue = u), - a.setAttributeNode(l); - } - }, - endElement: function (e, t, i) { - var n = this.currentElement; - n.tagName, (this.currentElement = n.parentNode); - }, - startPrefixMapping: function (e, t) {}, - endPrefixMapping: function (e) {}, - processingInstruction: function (e, t) { - t = this.doc.createProcessingInstruction(e, t); - this.locator && ls(this.locator, t), hs(this, t); - }, - ignorableWhitespace: function (e, t, i) {}, - characters: function (e, t, i) { - var n; - (e = ds.apply(this, arguments)) && - ((n = this.cdata - ? this.doc.createCDATASection(e) - : this.doc.createTextNode(e)), - this.currentElement - ? this.currentElement.appendChild(n) - : /^\s*$/.test(e) && this.doc.appendChild(n), - this.locator && ls(this.locator, n)); - }, - skippedEntity: function (e) {}, - endDocument: function () { - this.doc.normalize(); - }, - setDocumentLocator: function (e) { - (this.locator = e) && (e.lineNumber = 0); - }, - comment: function (e, t, i) { - e = ds.apply(this, arguments); - e = this.doc.createComment(e); - this.locator && ls(this.locator, e), hs(this, e); - }, - startCDATA: function () { - this.cdata = !0; - }, - endCDATA: function () { - this.cdata = !1; - }, - startDTD: function (e, t, i) { - var n = this.doc.implementation; - n && - n.createDocumentType && - ((i = n.createDocumentType(e, t, i)), - this.locator && ls(this.locator, i), - hs(this, i), - (this.doc.doctype = i)); - }, - warning: function (e) {}, - error: function (e) {}, - fatalError: function (e) { - throw new as(e, this.locator); - }, - }), - "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace( - /\w+/g, - function (e) { - us.prototype[e] = function () { - return null; - }; - }, - ); - function ps(e) { - return !!e && "object" == typeof e; - } - function fs() { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - return t.reduce(function (t, i) { - return ( - "object" != typeof i || - Object.keys(i).forEach(function (e) { - Array.isArray(t[e]) && Array.isArray(i[e]) - ? (t[e] = t[e].concat(i[e])) - : ps(t[e]) && ps(i[e]) - ? (t[e] = fs(t[e], i[e])) - : (t[e] = i[e]); - }), - t - ); - }, {}); - } - function ms(t) { - return Object.keys(t).map(function (e) { - return t[e]; - }); - } - function gs(e) { - return e.reduce(function (e, t) { - return e.concat(t); - }, []); - } - function ys(e) { - if (!e.length) return []; - for (var t = [], i = 0; i < e.length; i++) t.push(e[i]); - return t; - } - function vs(e, t) { - for (var i = 0; i < e.length; i++) if (t(e[i])) return i; - return -1; - } - function _s(e) { - var t = e.baseUrl, - i = void 0 === (n = e.source) ? "" : n, - n = void 0 === (n = e.range) ? "" : n, - e = void 0 === (e = e.indexRange) ? "" : e, - i = { uri: i, resolvedUri: ir((void 0 === t ? "" : t) || "", i) }; - return ( - (n || e) && - ((n = (n || e).split("-")), - (e = window.BigInt ? window.BigInt(n[0]) : parseInt(n[0], 10)), - (n = window.BigInt ? window.BigInt(n[1]) : parseInt(n[1], 10)), - e < Number.MAX_SAFE_INTEGER && "bigint" == typeof e && (e = Number(e)), - "bigint" == - typeof (n = - "bigint" == - typeof (n = - n < Number.MAX_SAFE_INTEGER && "bigint" == typeof n - ? Number(n) - : n) || "bigint" == typeof e - ? window.BigInt(n) - window.BigInt(e) + window.BigInt(1) - : n - e + 1) && - n < Number.MAX_SAFE_INTEGER && - (n = Number(n)), - (i.byterange = { length: n, offset: e })), - i - ); - } - function bs(e) { - return ( - e && "number" != typeof e && (e = parseInt(e, 10)), isNaN(e) ? null : e - ); - } - function Ts(e) { - var a, - t = e.type, - i = e.duration, - n = e.timescale, - r = void 0 === n ? 1 : n, - s = e.periodDuration, - o = e.sourceDuration, - e = (function (e, t) { - for (var i = [], n = e; n < t; n++) i.push(n); - return i; - })((n = go[t](e)).start, n.end).map( - ((a = e), - function (e) { - var t = a.duration, - i = a.timescale, - n = a.periodStart, - r = a.startNumber; - return { - number: (void 0 === r ? 1 : r) + e, - duration: t / (void 0 === i ? 1 : i), - timeline: n, - time: e * t, - }; - }), - ); - return ( - "static" === t && - (e[(t = e.length - 1)].duration = - ("number" == typeof s ? s : o) - (i / r) * t), - e - ); - } - function Ss(e) { - var t = e.baseUrl, - i = void 0 === (u = e.initialization) ? {} : u, - n = e.sourceDuration, - r = void 0 === (o = e.indexRange) ? "" : o, - a = e.periodStart, - s = e.presentationTime, - o = void 0 === (u = e.number) ? 0 : u, - u = e.duration; - if (!t) throw new Error(po); - return ( - (i = _s({ baseUrl: t, source: i.sourceURL, range: i.range })), - ((r = _s({ baseUrl: t, source: t, indexRange: r })).map = i), - u - ? (e = Ts(e)).length && - ((r.duration = e[0].duration), (r.timeline = e[0].timeline)) - : n && ((r.duration = n), (r.timeline = a)), - (r.presentationTime = s || a), - (r.number = o), - [r] - ); - } - function ws(e, t, i) { - for ( - var n = e.sidx.map || null, - r = e.sidx.duration, - a = e.timeline || 0, - s = (s = e.sidx.byterange).offset + s.length, - o = t.timescale, - u = t.references.filter(function (e) { - return 1 !== e.referenceType; - }), - l = [], - c = e.endList ? "static" : "dynamic", - d = e.sidx.timeline, - h = d, - p = e.mediaSequence || 0, - f = - "bigint" == typeof t.firstOffset - ? window.BigInt(s) + t.firstOffset - : s + t.firstOffset, - m = 0; - m < u.length; - m++ - ) { - var g = t.references[m], - y = g.referencedSize, - v = g.subsegmentDuration, - g = void 0, - g = - "bigint" == typeof f - ? f + window.BigInt(y) - window.BigInt(1) - : f + y - 1, - g = Ss({ - baseUrl: i, - timescale: o, - timeline: a, - periodStart: d, - presentationTime: h, - number: p, - duration: v, - sourceDuration: r, - indexRange: f + "-" + g, - type: c, - })[0]; - n && (g.map = n), - l.push(g), - (f += "bigint" == typeof f ? window.BigInt(y) : y), - (h += v / o), - p++; - } - return (e.segments = l), e; - } - function Es(e) { - return ( - (i = function (e) { - return e.timeline; - }), - ms( - e.reduce(function (t, e) { - return ( - e.forEach(function (e) { - t[i(e)] = e; - }), - t - ); - }, {}), - ).sort(function (e, t) { - return e.timeline > t.timeline ? 1 : -1; - }) - ); - var i; - } - function ks(e) { - var r, - a, - s = []; - return ( - (r = e), - (a = function (e, t, i, n) { - s = s.concat(e.playlists || []); - }), - yo.forEach(function (e) { - for (var t in r.mediaGroups[e]) - for (var i in r.mediaGroups[e][t]) { - var n = r.mediaGroups[e][t][i]; - a(n, e, t, i); - } - }), - s - ); - } - function Cs(e) { - var i = e.playlist, - e = e.mediaSequence; - (i.mediaSequence = e), - i.segments.forEach(function (e, t) { - e.number = i.mediaSequence + t; - }); - } - function Is(e) { - var r, - a, - t = e.oldManifest, - i = e.newManifest, - n = t.playlists.concat(ks(t)), - e = i.playlists.concat(ks(i)); - return ( - (i.timelineStarts = Es([t.timelineStarts, i.timelineStarts])), - (n = { - oldPlaylists: n, - newPlaylists: e, - timelineStarts: i.timelineStarts, - }), - (r = n.oldPlaylists), - (e = n.newPlaylists), - (a = n.timelineStarts), - e.forEach(function (t) { - t.discontinuitySequence = vs(a, function (e) { - return e.timeline === t.timeline; - }); - var e = (function (e, t) { - for (var i = 0; i < e.length; i++) - if (e[i].attributes.NAME === t) return e[i]; - return null; - })(r, t.attributes.NAME); - if (e && !t.sidx) { - var i = t.segments[0], - n = vs(e.segments, function (e) { - return Math.abs(e.presentationTime - i.presentationTime) < 1 / 60; - }); - if (-1 === n) - return ( - Cs({ - playlist: t, - mediaSequence: e.mediaSequence + e.segments.length, - }), - (t.segments[0].discontinuity = !0), - t.discontinuityStarts.unshift(0), - void ( - ((!e.segments.length && t.timeline > e.timeline) || - (e.segments.length && - t.timeline > e.segments[e.segments.length - 1].timeline)) && - t.discontinuitySequence-- - ) - ); - e.segments[n].discontinuity && - !i.discontinuity && - ((i.discontinuity = !0), - t.discontinuityStarts.unshift(0), - t.discontinuitySequence--), - Cs({ playlist: t, mediaSequence: e.segments[n].number }); - } - }), - i - ); - } - function xs(e) { - return ( - e && - e.uri + - "-" + - ((t = e.byterange), - (e = - "bigint" == typeof t.offset || "bigint" == typeof t.length - ? window.BigInt(t.offset) + - window.BigInt(t.length) - - window.BigInt(1) - : t.offset + t.length - 1), - t.offset + "-" + e) - ); - var t; - } - function As(e) { - return ms( - e.reduce(function (e, t) { - var i, - n = t.attributes.id + (t.attributes.lang || ""); - return ( - e[n] - ? (t.segments && - (t.segments[0] && (t.segments[0].discontinuity = !0), - (i = e[n].segments).push.apply(i, t.segments)), - t.attributes.contentProtection && - (e[n].attributes.contentProtection = - t.attributes.contentProtection)) - : ((e[n] = t), (e[n].attributes.timelineStarts = [])), - e[n].attributes.timelineStarts.push({ - start: t.attributes.periodStart, - timeline: t.attributes.periodStart, - }), - e - ); - }, {}), - ).map(function (e) { - var t, n; - return ( - (e.discontinuityStarts = - ((t = e.segments || []), - (n = "discontinuity"), - t.reduce(function (e, t, i) { - return t[n] && e.push(i), e; - }, []))), - e - ); - }); - } - function Ps(e, t) { - var i = xs(e.sidx); - return (i = i && t[i] && t[i].sidx) && ws(e, i, e.sidx.resolvedUri), e; - } - function Ls(e, h, p) { - var f; - return ( - void 0 === h && (h = {}), - void 0 === p && (p = !1), - (e = e.reduce(function (e, t) { - var i = (t.attributes.role && t.attributes.role.value) || "", - n = t.attributes.lang || "", - r = t.attributes.label || "main"; - e[ - (r = - n && !t.attributes.label - ? t.attributes.lang + (i ? " (" + i + ")" : "") - : r) - ] || - (e[r] = { - language: n, - autoselect: !0, - default: "main" === i, - playlists: [], - uri: "", - }); - var a, - s, - o, - u, - l, - c, - d, - u = Ps( - ((s = p), - (o = (a = t).attributes), - (u = a.segments), - (l = a.sidx), - (c = a.mediaSequence), - (d = a.discontinuitySequence), - (n = a.discontinuityStarts), - (u = { - attributes: - (((a = { - NAME: o.id, - BANDWIDTH: o.bandwidth, - CODECS: o.codecs, - })["PROGRAM-ID"] = 1), - a), - uri: "", - endList: "static" === o.type, - timeline: o.periodStart, - resolvedUri: "", - targetDuration: o.duration, - discontinuitySequence: d, - discontinuityStarts: n, - timelineStarts: o.timelineStarts, - mediaSequence: c, - segments: u, - }), - o.contentProtection && (u.contentProtection = o.contentProtection), - l && (u.sidx = l), - s && - ((u.attributes.AUDIO = "audio"), - (u.attributes.SUBTITLES = "subs")), - u), - h, - ); - return ( - e[r].playlists.push(u), - "undefined" == typeof f && "main" === i && ((f = t).default = !0), - e - ); - }, {})), - f || (e[Object.keys(e)[0]].default = !0), - e - ); - } - function Ds(e) { - var t = e.attributes, - i = e.segments, - n = e.sidx, - r = e.discontinuityStarts, - i = { - attributes: - (((e = { - NAME: t.id, - AUDIO: "audio", - SUBTITLES: "subs", - RESOLUTION: { width: t.width, height: t.height }, - CODECS: t.codecs, - BANDWIDTH: t.bandwidth, - })["PROGRAM-ID"] = 1), - e), - uri: "", - endList: "static" === t.type, - timeline: t.periodStart, - resolvedUri: "", - targetDuration: t.duration, - discontinuityStarts: r, - timelineStarts: t.timelineStarts, - segments: i, - }; - return ( - t.contentProtection && (i.contentProtection = t.contentProtection), - n && (i.sidx = n), - i - ); - } - function Os(e) { - return ( - "video/mp4" === (e = e.attributes).mimeType || - "video/webm" === e.mimeType || - "video" === e.contentType - ); - } - function Ms(e) { - return ( - "audio/mp4" === (e = e.attributes).mimeType || - "audio/webm" === e.mimeType || - "audio" === e.contentType - ); - } - function Rs(e) { - return ( - "text/vtt" === (e = e.attributes).mimeType || "text" === e.contentType - ); - } - function Ns(i) { - return i - ? Object.keys(i).reduce(function (e, t) { - t = i[t]; - return e.concat(t.playlists); - }, []) - : []; - } - function Us(e) { - var t = e.dashPlaylists, - i = e.locations, - n = void 0 === (c = e.sidxMapping) ? {} : c, - r = e.previousManifest; - if (!t.length) return {}; - var a = (d = t[0].attributes).sourceDuration, - s = d.type, - o = d.suggestedPresentationDelay, - u = d.minimumUpdatePeriod, - l = As(t.filter(Os)).map(Ds), - c = As(t.filter(Ms)), - e = As(t.filter(Rs)), - d = t - .map(function (e) { - return e.attributes.captionServices; - }) - .filter(Boolean), - a = { - allowCache: !0, - discontinuityStarts: [], - segments: [], - endList: !0, - mediaGroups: - (((t = { AUDIO: {}, VIDEO: {} })["CLOSED-CAPTIONS"] = {}), - (t.SUBTITLES = {}), - t), - uri: "", - duration: a, - playlists: (function (e, t) { - if ((void 0 === t && (t = {}), !Object.keys(t).length)) return e; - for (var i in e) e[i] = Ps(e[i], t); - return e; - })(l, n), - }; - 0 <= u && (a.minimumUpdatePeriod = 1e3 * u), - i && (a.locations = i), - "dynamic" === s && (a.suggestedPresentationDelay = o); - var h, - p, - o = 0 === a.playlists.length, - o = c.length ? Ls(c, n, o) : null, - n = e.length - ? (void 0 === (h = n) && (h = {}), - e.reduce(function (e, t) { - var i = t.attributes.lang || "text"; - return ( - e[i] || - (e[i] = { - language: i, - default: !1, - autoselect: !1, - playlists: [], - uri: "", - }), - e[i].playlists.push( - Ps( - (function (e) { - var t = e.attributes, - i = e.segments, - n = e.mediaSequence, - r = e.discontinuityStarts, - a = e.discontinuitySequence; - "undefined" == typeof i && - ((i = [ - { - uri: t.baseUrl, - timeline: t.periodStart, - resolvedUri: t.baseUrl || "", - duration: t.sourceDuration, - number: 0, - }, - ]), - (t.duration = t.sourceDuration)); - (e = { NAME: t.id, BANDWIDTH: t.bandwidth })["PROGRAM-ID"] = - 1; - return ( - t.codecs && (e.CODECS = t.codecs), - { - attributes: e, - uri: "", - endList: "static" === t.type, - timeline: t.periodStart, - resolvedUri: t.baseUrl || "", - targetDuration: t.duration, - timelineStarts: t.timelineStarts, - discontinuityStarts: r, - discontinuitySequence: a, - mediaSequence: n, - segments: i, - } - ); - })(t), - h, - ), - ), - e - ); - }, {})) - : null, - l = (e = l.concat(Ns(o), Ns(n))).map(function (e) { - return e.timelineStarts; - }); - return ( - (a.timelineStarts = Es(l)), - (e = e), - (p = a.timelineStarts), - e.forEach(function (t) { - (t.mediaSequence = 0), - (t.discontinuitySequence = vs(p, function (e) { - return e.timeline === t.timeline; - })), - t.segments && - t.segments.forEach(function (e, t) { - e.number = t; - }); - }), - o && (a.mediaGroups.AUDIO.audio = o), - n && (a.mediaGroups.SUBTITLES.subs = n), - d.length && - (a.mediaGroups["CLOSED-CAPTIONS"].cc = d.reduce(function (n, e) { - return ( - e && - e.forEach(function (e) { - var t = e.channel, - i = e.language; - (n[i] = { - autoselect: !1, - default: !1, - instreamId: t, - language: i, - }), - e.hasOwnProperty("aspectRatio") && - (n[i].aspectRatio = e.aspectRatio), - e.hasOwnProperty("easyReader") && - (n[i].easyReader = e.easyReader), - e.hasOwnProperty("3D") && (n[i]["3D"] = e["3D"]); - }), - n - ); - }, {})), - r ? Is({ oldManifest: r, newManifest: a }) : a - ); - } - function Bs(e, t) { - for ( - var i, - n, - r, - a, - s, - o, - u = e.type, - l = e.minimumUpdatePeriod, - c = void 0 === l ? 0 : l, - d = void 0 === (l = e.media) ? "" : l, - h = e.sourceDuration, - p = void 0 === (l = e.timescale) ? 1 : l, - f = void 0 === (l = e.startNumber) ? 1 : l, - m = e.periodStart, - g = [], - y = -1, - v = 0; - v < t.length; - v++ - ) { - var _ = t[v], - b = _.d, - T = _.r || 0, - S = _.t || 0; - y < 0 && (y = S), S && y < S && (y = S); - var w, - E = void 0; - E = - T < 0 - ? (w = v + 1) === t.length - ? "dynamic" === u && 0 < c && 0 < d.indexOf("$Number$") - ? ((i = y), - (n = b), - (_ = o = s = a = r = void 0), - (r = (S = e).NOW), - (a = S.clientOffset), - (s = S.availabilityStartTime), - (o = S.timescale), - (_ = S.periodStart), - (S = S.minimumUpdatePeriod), - Math.ceil( - (((r + a) / 1e3 + - (void 0 === S ? 0 : S) - - (s + (void 0 === _ ? 0 : _))) * - (void 0 === o ? 1 : o) - - i) / - n, - )) - : (h * p - y) / b - : (t[w].t - y) / b - : T + 1; - for (var k = f + g.length + E, C = f + g.length; C < k; ) - g.push({ number: C, duration: b / p, time: y, timeline: m }), - (y += b), - C++; - } - return g; - } - function Fs(e, t) { - return e.replace( - vo, - ((r = t), - function (e, t, i, n) { - if ("$$" === e) return "$"; - if ("undefined" == typeof r[t]) return e; - e = "" + r[t]; - return "RepresentationID" === t || - (n = i ? parseInt(n, 10) : 1) <= e.length - ? e - : new Array(n - e.length + 1).join("0") + e; - }), - ); - var r; - } - function js(r, e) { - var a = { RepresentationID: r.id, Bandwidth: r.bandwidth || 0 }, - t = void 0 === (t = r.initialization) ? { sourceURL: "", range: "" } : t, - s = _s({ - baseUrl: r.baseUrl, - source: Fs(t.sourceURL, a), - range: t.range, - }); - return ((t = e), - (e = r).duration || t - ? e.duration - ? Ts(e) - : Bs(e, t) - : [ - { - number: e.startNumber || 1, - duration: e.sourceDuration, - time: 0, - timeline: e.periodStart, - }, - ]).map(function (e) { - (a.Number = e.number), (a.Time = e.time); - var t = Fs(r.media || "", a), - i = r.timescale || 1, - n = r.presentationTimeOffset || 0, - i = r.periodStart + (e.time - n) / i; - return { - uri: t, - timeline: e.timeline, - duration: e.duration, - resolvedUri: ir(r.baseUrl || "", t), - map: s, - number: e.number, - presentationTime: i, - }; - }); - } - function Hs(r, e) { - var t = r.duration, - i = void 0 === (i = r.segmentUrls) ? [] : i, - a = r.periodStart; - if ((!t && !e) || (t && e)) throw new Error(fo); - var n, - s = i.map(function (e) { - return ( - (i = e), - (e = (t = r).baseUrl), - (t = t.initialization), - (t = _s({ - baseUrl: e, - source: (t = void 0 === t ? {} : t).sourceURL, - range: t.range, - })), - ((i = _s({ baseUrl: e, source: i.media, range: i.mediaRange })).map = - t), - i - ); - var t, i; - }); - return ( - t && (n = Ts(r)), - (n = e ? Bs(r, e) : n) - .map(function (e, t) { - if (s[t]) { - var i = s[t], - n = r.timescale || 1, - t = r.presentationTimeOffset || 0; - return ( - (i.timeline = e.timeline), - (i.duration = e.duration), - (i.number = e.number), - (i.presentationTime = a + (e.time - t) / n), - i - ); - } - }) - .filter(function (e) { - return e; - }) - ); - } - function qs(e) { - var t, - i = e.attributes, - n = e.segmentInfo; - n.template - ? ((a = js), (t = fs(i, n.template))) - : n.base - ? ((a = Ss), (t = fs(i, n.base))) - : n.list && ((a = Hs), (t = fs(i, n.list))); - var r = { attributes: i }; - if (!a) return r; - var a, - e = a(t, n.segmentTimeline); - return ( - t.duration - ? ((i = t.duration), - (a = t.timescale), - (t.duration = i / (void 0 === a ? 1 : a))) - : e.length - ? (t.duration = e.reduce(function (e, t) { - return Math.max(e, Math.ceil(t.duration)); - }, 0)) - : (t.duration = 0), - (r.attributes = t), - (r.segments = e), - n.base && t.indexRange && ((r.sidx = e[0]), (r.segments = [])), - r - ); - } - function Vs(e, t) { - return ys(e.childNodes).filter(function (e) { - return e.tagName === t; - }); - } - function Ws(e) { - return e.textContent.trim(); - } - function Gs(e) { - if ( - !(r = - /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/.exec( - e, - )) - ) - return 0; - var t = (a = r.slice(1))[0], - i = a[1], - n = a[2], - e = a[3], - r = a[4], - a = a[5]; - return ( - 31536e3 * parseFloat(t || 0) + - 2592e3 * parseFloat(i || 0) + - 86400 * parseFloat(n || 0) + - 3600 * parseFloat(e || 0) + - 60 * parseFloat(r || 0) + - parseFloat(a || 0) - ); - } - function zs(e) { - return e && e.attributes - ? ys(e.attributes).reduce(function (e, t) { - var i = _o[t.name] || _o.DEFAULT; - return (e[t.name] = i(t.value)), e; - }, {}) - : {}; - } - function Xs(e, i) { - return i.length - ? gs( - e.map(function (t) { - return i.map(function (e) { - return ir(t, Ws(e)); - }); - }), - ) - : e; - } - function Ks(e) { - var t = Vs(e, "SegmentTemplate")[0], - i = Vs(e, "SegmentList")[0], - n = - i && - Vs(i, "SegmentURL").map(function (e) { - return fs({ tag: "SegmentURL" }, zs(e)); - }), - r = Vs(e, "SegmentBase")[0], - e = (a = i || t) && Vs(a, "SegmentTimeline")[0], - a = (a = i || r || t) && Vs(a, "Initialization")[0]; - (t = t && zs(t)) && a - ? (t.initialization = a && zs(a)) - : t && - t.initialization && - (t.initialization = { sourceURL: t.initialization }); - var s = { - template: t, - segmentTimeline: e && Vs(e, "S").map(zs), - list: i && fs(zs(i), { segmentUrls: n, initialization: zs(a) }), - base: r && fs(zs(r), { initialization: zs(a) }), - }; - return ( - Object.keys(s).forEach(function (e) { - s[e] || delete s[e]; - }), - s - ); - } - function Ys(u, l, c) { - return function (e) { - var t = zs(e), - i = Xs(l, Vs(e, "BaseURL")), - n = Vs(e, "Role")[0], - n = { role: zs(n) }, - t = fs(u, t, n), - n = Vs(e, "Accessibility")[0], - n = - "urn:scte:dash:cc:cea-608:2015" === (n = zs(n)).schemeIdUri - ? ("string" != typeof n.value ? [] : n.value.split(";")).map( - function (e) { - var t, i, n; - return ( - /^CC\d=/.test((n = e)) - ? ((i = (t = e.split("="))[0]), (n = t[1])) - : /^CC\d$/.test(e) && (i = e), - { channel: i, language: n } - ); - }, - ) - : "urn:scte:dash:cc:cea-708:2015" === n.schemeIdUri - ? ("string" != typeof n.value ? [] : n.value.split(";")).map( - function (e) { - var t, - i, - n = { - channel: void 0, - language: void 0, - aspectRatio: 1, - easyReader: 0, - "3D": 0, - }; - return ( - /=/.test(e) - ? ((t = (i = e.split("="))[0]), - (i = void 0 === (i = i[1]) ? "" : i), - (n.channel = t), - (n.language = e), - i.split(",").forEach(function (e) { - var t = e.split(":"), - e = t[0], - t = t[1]; - "lang" === e - ? (n.language = t) - : "er" === e - ? (n.easyReader = Number(t)) - : "war" === e - ? (n.aspectRatio = Number(t)) - : "3D" === e && (n["3D"] = Number(t)); - })) - : (n.language = e), - n.channel && (n.channel = "SERVICE" + n.channel), - n - ); - }, - ) - : void 0; - n && (t = fs(t, { captionServices: n })); - n = Vs(e, "Label")[0]; - n && - n.childNodes.length && - ((r = n.childNodes[0].nodeValue.trim()), (t = fs(t, { label: r }))); - var r = Vs(e, "ContentProtection").reduce(function (e, t) { - var i = zs(t); - i.schemeIdUri && (i.schemeIdUri = i.schemeIdUri.toLowerCase()); - var n = bo[i.schemeIdUri]; - return ( - n && - ((e[n] = { attributes: i }), - (t = Vs(t, "cenc:pssh")[0]) && - ((t = Ws(t)), (e[n].pssh = t && or(t)))), - e - ); - }, {}); - Object.keys(r).length && (t = fs(t, { contentProtection: r })); - var a, - s, - o, - r = Ks(e), - e = Vs(e, "Representation"), - r = fs(c, r); - return gs( - e.map( - ((a = t), - (s = i), - (o = r), - function (e) { - var t = Vs(e, "BaseURL"), - t = Xs(s, t), - i = fs(a, zs(e)), - n = Ks(e); - return t.map(function (e) { - return { - segmentInfo: fs(o, n), - attributes: fs(i, { baseUrl: e }), - }; - }); - }), - ), - ); - }; - } - function Qs(e, t) { - var i = (t = void 0 === t ? {} : t), - n = void 0 === (a = i.manifestUri) ? "" : a, - t = void 0 === (r = i.NOW) ? Date.now() : r, - r = void 0 === (a = i.clientOffset) ? 0 : a; - if (!(i = Vs(e, "Period")).length) throw new Error(lo); - var a = Vs(e, "Location"), - s = zs(e), - e = Xs([n], Vs(e, "BaseURL")); - (s.type = s.type || "static"), - (s.sourceDuration = s.mediaPresentationDuration || 0), - (s.NOW = t), - (s.clientOffset = r), - a.length && (s.locations = a.map(Ws)); - var o, - u, - l = []; - return ( - i.forEach(function (e, t) { - var i, - n = zs(e), - r = l[t - 1]; - (n.start = - ((i = { - attributes: n, - priorPeriodAttributes: r ? r.attributes : null, - mpdType: s.type, - }), - (t = i.attributes), - (r = i.priorPeriodAttributes), - (i = i.mpdType), - "number" == typeof t.start - ? t.start - : r && "number" == typeof r.start && "number" == typeof r.duration - ? r.start + r.duration - : r || "static" !== i - ? null - : 0)), - l.push({ node: e, attributes: n }); - }), - { - locations: s.locations, - representationInfo: gs( - l.map( - ((o = s), - (u = e), - function (e, t) { - var i = Xs(u, Vs(e.node, "BaseURL")), - n = fs(o, { periodStart: e.attributes.start }); - "number" == typeof e.attributes.duration && - (n.periodDuration = e.attributes.duration); - var r = Vs(e.node, "AdaptationSet"), - e = Ks(e.node); - return gs(r.map(Ys(n, i, e))); - }), - ), - ), - } - ); - } - function $s(e) { - if ("" === e) throw new Error(co); - var t, - i, - n = new uo(); - try { - i = - (t = n.parseFromString(e, "application/xml")) && - "MPD" === t.documentElement.tagName - ? t.documentElement - : null; - } catch (e) {} - if (!i || (i && 0 < i.getElementsByTagName("parsererror").length)) - throw new Error(ho); - return i; - } - function Js(e, t) { - void 0 === t && (t = {}); - var i = Qs($s(e), t), - e = i.representationInfo.map(qs); - return Us({ - dashPlaylists: e, - locations: i.locations, - sidxMapping: t.sidxMapping, - previousManifest: t.previousManifest, - }); - } - function Zs(e) { - return (function (e) { - e = Vs(e, "UTCTiming")[0]; - if (!e) return null; - var t = zs(e); - switch (t.schemeIdUri) { - case "urn:mpeg:dash:utc:http-head:2014": - case "urn:mpeg:dash:utc:http-head:2012": - t.method = "HEAD"; - break; - case "urn:mpeg:dash:utc:http-xsdate:2014": - case "urn:mpeg:dash:utc:http-iso:2014": - case "urn:mpeg:dash:utc:http-xsdate:2012": - case "urn:mpeg:dash:utc:http-iso:2012": - t.method = "GET"; - break; - case "urn:mpeg:dash:utc:direct:2014": - case "urn:mpeg:dash:utc:direct:2012": - (t.method = "DIRECT"), (t.value = Date.parse(t.value)); - break; - case "urn:mpeg:dash:utc:http-ntp:2014": - case "urn:mpeg:dash:utc:ntp:2014": - case "urn:mpeg:dash:utc:sntp:2014": - default: - throw new Error(mo); - } - return t; - })($s(e)); - } - function eo(e, t) { - return ( - void 0 === t && (t = 0), - (e = br(e)).length - t < 10 || !wr(e, Eo, { offset: t }) - ? t - : eo( - e, - (t += (function (e, t) { - void 0 === t && (t = 0); - var i = (e = br(e))[t + 5], - t = - (e[t + 6] << 21) | - (e[t + 7] << 14) | - (e[t + 8] << 7) | - e[t + 9]; - return (16 & i) >> 4 ? 20 + t : 10 + t; - })(e, t)), - ) - ); - } - function to(e) { - return "string" == typeof e ? Sr(e) : e; - } - function io(e, t, i) { - var n; - void 0 === i && (i = !1), - (n = t), - (t = Array.isArray(n) ? n.map(to) : [to(n)]), - (e = br(e)); - var r = []; - if (!t.length) return r; - for (var a = 0; a < e.length; ) { - var s = - ((e[a] << 24) | (e[a + 1] << 16) | (e[a + 2] << 8) | e[a + 3]) >>> 0, - o = e.subarray(a + 4, a + 8); - if (0 == s) break; - var u = a + s; - if (u > e.length) { - if (i) break; - u = e.length; - } - s = e.subarray(a + 8, u); - wr(o, t[0]) && - (1 === t.length ? r.push(s) : r.push.apply(r, io(s, t.slice(1), i))), - (a = u); - } - return r; - } - function no(e, t, i, n) { - void 0 === i && (i = !0), void 0 === n && (n = !1); - var r = (function (e) { - for (var t = 1, i = 0; i < Co.length && !(e & Co[i]); i++) t++; - return t; - })(e[t]), - a = e.subarray(t, t + r); - return ( - i && ((a = Array.prototype.slice.call(e, t, t + r))[0] ^= Co[r - 1]), - { - length: r, - value: (function (n, e) { - var t = void 0 === e ? {} : e, - e = t.signed, - e = void 0 !== e && e, - t = t.le, - r = void 0 !== t && t; - n = br(n); - (t = r ? "reduce" : "reduceRight"), - (t = (n[t] || Array.prototype[t]).call( - n, - function (e, t, i) { - i = r ? i : Math.abs(i + 1 - n.length); - return e + Rr(t) * Nr[i]; - }, - Rr(0), - )); - return ( - !e || - ((e = Nr[n.length] / Rr(2) - Rr(1)) < (t = Rr(t)) && - ((t -= e), (t -= e), (t -= Rr(2)))), - Number(t) - ); - })(a, { signed: n }), - bytes: a, - } - ); - } - function ro(e) { - return "string" == typeof e - ? e.match(/.{1,2}/g).map(ro) - : "number" == typeof e - ? Tr(e) - : e; - } - function ao(e, t, i) { - if (i >= t.length) return t.length; - var n = no(t, i, !1); - if (wr(e.bytes, n.bytes)) return i; - var r = no(t, i + n.length); - return ao(e, t, i + r.length + r.value + n.length); - } - function so(e, t) { - var i; - (i = t), (t = Array.isArray(i) ? i.map(ro) : [ro(i)]), (e = br(e)); - var n = []; - if (!t.length) return n; - for (var r = 0; r < e.length; ) { - var a = no(e, r, !1), - s = no(e, r + a.length), - o = r + a.length + s.length; - 127 === s.value && - ((s.value = ao(a, e, o)), s.value !== e.length && (s.value -= o)); - var u = o + s.value > e.length ? e.length : o + s.value, - u = e.subarray(o, u); - wr(t[0], a.bytes) && - (1 === t.length ? n.push(u) : (n = n.concat(so(u, t.slice(1))))), - (r += a.length + s.length + u.length); - } - return n; - } - function oo(e, t, i, n) { - void 0 === n && (n = 1 / 0), (e = br(e)), (i = [].concat(i)); - for (var r, a = 0, s = 0; a < e.length && (s < n || r); ) { - var o = void 0; - if ( - (wr(e.subarray(a), Io) ? (o = 4) : wr(e.subarray(a), xo) && (o = 3), o) - ) { - if ((s++, r)) - return (function (e) { - for (var t = [], i = 1; i < e.length - 2; ) - wr(e.subarray(i, i + 3), Ao) && (t.push(i + 2), i++), i++; - if (0 === t.length) return e; - for ( - var n = e.length - t.length, r = new Uint8Array(n), a = 0, i = 0; - i < n; - a++, i++ - ) - a === t[0] && (a++, t.shift()), (r[i] = e[a]); - return r; - })(e.subarray(r, a)); - var u = void 0; - "h264" === t - ? (u = 31 & e[a + o]) - : "h265" === t && (u = (e[a + o] >> 1) & 63), - -1 !== i.indexOf(u) && (r = a + o), - (a += o + ("h264" === t ? 1 : 2)); - } else a++; - } - return e.subarray(0, 0); - } - var uo = { - __DOMHandler: us, - DOMParser: os, - DOMImplementation: U.DOMImplementation, - XMLSerializer: U.XMLSerializer, - }.DOMParser, - lo = "INVALID_NUMBER_OF_PERIOD", - co = "DASH_EMPTY_MANIFEST", - ho = "DASH_INVALID_XML", - po = "NO_BASE_URL", - fo = "SEGMENT_TIME_UNSPECIFIED", - mo = "UNSUPPORTED_UTC_TIMING_SCHEME", - go = { - static: function (e) { - var t = e.duration, - i = e.timescale, - n = void 0 === i ? 1 : i, - r = e.sourceDuration, - i = e.periodDuration, - e = bs(e.endNumber), - n = t / n; - return "number" == typeof e - ? { start: 0, end: e } - : "number" == typeof i - ? { start: 0, end: i / n } - : { start: 0, end: r / n }; - }, - dynamic: function (e) { - var t = e.NOW, - i = e.clientOffset, - n = e.availabilityStartTime, - r = e.timescale, - a = void 0 === r ? 1 : r, - s = e.duration, - o = e.periodStart, - u = void 0 === o ? 0 : o, - r = e.minimumUpdatePeriod, - o = void 0 === r ? 0 : r, - r = e.timeShiftBufferDepth, - r = void 0 === r ? 1 / 0 : r, - e = bs(e.endNumber), - i = (t + i) / 1e3, - u = n + u, - o = Math.ceil(((i + o - u) * a) / s), - r = Math.floor(((i - u - r) * a) / s), - s = Math.floor(((i - u) * a) / s); - return { - start: Math.max(0, r), - end: "number" == typeof e ? e : Math.min(o, s), - }; - }, - }, - yo = ["AUDIO", "SUBTITLES"], - vo = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g, - _o = { - mediaPresentationDuration: Gs, - availabilityStartTime: function (e) { - return ( - /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test((e = e)) && (e += "Z"), - Date.parse(e) / 1e3 - ); - }, - minimumUpdatePeriod: Gs, - suggestedPresentationDelay: Gs, - type: function (e) { - return e; - }, - timeShiftBufferDepth: Gs, - start: Gs, - width: function (e) { - return parseInt(e, 10); - }, - height: function (e) { - return parseInt(e, 10); - }, - bandwidth: function (e) { - return parseInt(e, 10); - }, - startNumber: function (e) { - return parseInt(e, 10); - }, - timescale: function (e) { - return parseInt(e, 10); - }, - presentationTimeOffset: function (e) { - return parseInt(e, 10); - }, - duration: function (e) { - var t = parseInt(e, 10); - return isNaN(t) ? Gs(e) : t; - }, - d: function (e) { - return parseInt(e, 10); - }, - t: function (e) { - return parseInt(e, 10); - }, - r: function (e) { - return parseInt(e, 10); - }, - DEFAULT: function (e) { - return e; - }, - }, - bo = { - "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b": "org.w3.clearkey", - "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed": "com.widevine.alpha", - "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95": - "com.microsoft.playready", - "urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb": "com.adobe.primetime", - }, - To = Math.pow(2, 32), - So = function (e) { - var t = new DataView(e.buffer, e.byteOffset, e.byteLength); - return t.getBigUint64 - ? (e = t.getBigUint64(0)) < Number.MAX_SAFE_INTEGER - ? Number(e) - : e - : t.getUint32(0) * To + t.getUint32(4); - }, - wo = function (e) { - var t = new DataView(e.buffer, e.byteOffset, e.byteLength), - i = { - version: e[0], - flags: new Uint8Array(e.subarray(1, 4)), - references: [], - referenceId: t.getUint32(4), - timescale: t.getUint32(8), - }, - n = 12; - 0 === i.version - ? ((i.earliestPresentationTime = t.getUint32(n)), - (i.firstOffset = t.getUint32(n + 4)), - (n += 8)) - : ((i.earliestPresentationTime = So(e.subarray(n))), - (i.firstOffset = So(e.subarray(n + 8))), - (n += 16)); - var r = t.getUint16((n += 2)); - for (n += 2; 0 < r; n += 12, r--) - i.references.push({ - referenceType: (128 & e[n]) >>> 7, - referencedSize: 2147483647 & t.getUint32(n), - subsegmentDuration: t.getUint32(n + 4), - startsWithSap: !!(128 & e[n + 8]), - sapType: (112 & e[n + 8]) >>> 4, - sapDeltaTime: 268435455 & t.getUint32(n + 8), - }); - return i; - }, - Eo = br([73, 68, 51]), - ko = { - EBML: br([26, 69, 223, 163]), - DocType: br([66, 130]), - Segment: br([24, 83, 128, 103]), - SegmentInfo: br([21, 73, 169, 102]), - Tracks: br([22, 84, 174, 107]), - Track: br([174]), - TrackNumber: br([215]), - DefaultDuration: br([35, 227, 131]), - TrackEntry: br([174]), - TrackType: br([131]), - FlagDefault: br([136]), - CodecID: br([134]), - CodecPrivate: br([99, 162]), - VideoTrack: br([224]), - AudioTrack: br([225]), - Cluster: br([31, 67, 182, 117]), - Timestamp: br([231]), - TimestampScale: br([42, 215, 177]), - BlockGroup: br([160]), - BlockDuration: br([155]), - Block: br([161]), - SimpleBlock: br([163]), - }, - Co = [128, 64, 32, 16, 8, 4, 2, 1], - Io = br([0, 0, 0, 1]), - xo = br([0, 0, 1]), - Ao = br([0, 0, 3]), - Po = { - webm: br([119, 101, 98, 109]), - matroska: br([109, 97, 116, 114, 111, 115, 107, 97]), - flac: br([102, 76, 97, 67]), - ogg: br([79, 103, 103, 83]), - ac3: br([11, 119]), - riff: br([82, 73, 70, 70]), - avi: br([65, 86, 73]), - wav: br([87, 65, 86, 69]), - "3gp": br([102, 116, 121, 112, 51, 103]), - mp4: br([102, 116, 121, 112]), - fmp4: br([115, 116, 121, 112]), - mov: br([102, 116, 121, 112, 113, 116]), - moov: br([109, 111, 111, 118]), - moof: br([109, 111, 111, 102]), - }, - Lo = { - aac: function (e) { - var t = eo(e); - return wr(e, [255, 16], { offset: t, mask: [255, 22] }); - }, - mp3: function (e) { - var t = eo(e); - return wr(e, [255, 2], { offset: t, mask: [255, 6] }); - }, - webm: function (e) { - e = so(e, [ko.EBML, ko.DocType])[0]; - return wr(e, Po.webm); - }, - mkv: function (e) { - e = so(e, [ko.EBML, ko.DocType])[0]; - return wr(e, Po.matroska); - }, - mp4: function (e) { - return ( - !Lo["3gp"](e) && - !Lo.mov(e) && - (!(!wr(e, Po.mp4, { offset: 4 }) && !wr(e, Po.fmp4, { offset: 4 })) || - !( - !wr(e, Po.moof, { offset: 4 }) && !wr(e, Po.moov, { offset: 4 }) - ) || - void 0) - ); - }, - mov: function (e) { - return wr(e, Po.mov, { offset: 4 }); - }, - "3gp": function (e) { - return wr(e, Po["3gp"], { offset: 4 }); - }, - ac3: function (e) { - var t = eo(e); - return wr(e, Po.ac3, { offset: t }); - }, - ts: function (e) { - if (e.length < 189 && 1 <= e.length) return 71 === e[0]; - for (var t = 0; t + 188 < e.length && t < 188; ) { - if (71 === e[t] && 71 === e[t + 188]) return !0; - t += 1; - } - return !1; - }, - flac: function (e) { - var t = eo(e); - return wr(e, Po.flac, { offset: t }); - }, - ogg: function (e) { - return wr(e, Po.ogg); - }, - avi: function (e) { - return wr(e, Po.riff) && wr(e, Po.avi, { offset: 8 }); - }, - wav: function (e) { - return wr(e, Po.riff) && wr(e, Po.wav, { offset: 8 }); - }, - h264: function (e) { - return oo(e, "h264", 7, 3).length; - }, - h265: function (e) { - return oo(e, "h265", [32, 33], 3).length; - }, - }, - Do = Object.keys(Lo) - .filter(function (e) { - return "ts" !== e && "h264" !== e && "h265" !== e; - }) - .concat(["ts", "h264", "h265"]); - Do.forEach(function (e) { - var t = Lo[e]; - Lo[e] = function (e) { - return t(br(e)); - }; - }); - function Oo(e) { - e = br(e); - for (var t = 0; t < Do.length; t++) { - var i = Do[t]; - if (dl[i](e)) return i; - } - return ""; - } - function Mo(e, t, i) { - return e && i && i.responseURL && t !== i.responseURL ? i.responseURL : t; - } - function Ro(e) { - return tr.log.debug - ? tr.log.debug.bind(tr, "VHS:", e + " >") - : function () {}; - } - function No(e, t) { - var i, - n = []; - if (e && e.length) - for (i = 0; i < e.length; i++) - t(e.start(i), e.end(i)) && n.push([e.start(i), e.end(i)]); - return tr.createTimeRanges(n); - } - function Uo(e, i) { - return No(e, function (e, t) { - return e - 0.1 <= i && i <= t + 0.1; - }); - } - function Bo(e, t) { - return No(e, function (e) { - return t <= e - fl; - }); - } - function Fo(e) { - var t = []; - if (!e || !e.length) return ""; - for (var i = 0; i < e.length; i++) t.push(e.start(i) + " => " + e.end(i)); - return t.join(", "); - } - function jo(e) { - for (var t = [], i = 0; i < e.length; i++) - t.push({ start: e.start(i), end: e.end(i) }); - return t; - } - function Ho(e) { - if (e && e.length && e.end) return e.end(e.length - 1); - } - function qo(e, t) { - var i = 0; - if (!e || !e.length) return i; - for (var n = 0; n < e.length; n++) { - var r = e.start(n), - a = e.end(n); - a < t || (i += r < t && t <= a ? a - t : a - r); - } - return i; - } - function Vo(t, e) { - if (!e.preload) return e.duration; - var i = 0; - return ( - (e.parts || []).forEach(function (e) { - i += e.duration; - }), - (e.preloadHints || []).forEach(function (e) { - "PART" === e.type && (i += t.partTargetDuration); - }), - i - ); - } - function Wo(e) { - return (e.segments || []).reduce(function (i, n, r) { - return ( - n.parts - ? n.parts.forEach(function (e, t) { - i.push({ - duration: e.duration, - segmentIndex: r, - partIndex: t, - part: e, - segment: n, - }); - }) - : i.push({ - duration: n.duration, - segmentIndex: r, - partIndex: null, - segment: n, - part: null, - }), - i - ); - }, []); - } - function Go(e) { - return ( - ((e = - e.segments && e.segments.length && e.segments[e.segments.length - 1]) && - e.parts) || - [] - ); - } - function zo(e) { - var t = e.preloadSegment; - if (t) { - (e = t.parts), - (t = (t.preloadHints || []).reduce(function (e, t) { - return e + ("PART" === t.type ? 1 : 0); - }, 0)); - return (t += e && e.length ? e.length : 0); - } - } - function Xo(e, t) { - return t.endList - ? 0 - : e && e.suggestedPresentationDelay - ? e.suggestedPresentationDelay - : (e = 0 < Go(t).length) && - t.serverControl && - t.serverControl.partHoldBack - ? t.serverControl.partHoldBack - : e && t.partTargetDuration - ? 3 * t.partTargetDuration - : t.serverControl && t.serverControl.holdBack - ? t.serverControl.holdBack - : t.targetDuration - ? 3 * t.targetDuration - : 0; - } - function Ko(e, t, i) { - if ( - (t = "undefined" == typeof t ? e.mediaSequence + e.segments.length : t) < - e.mediaSequence - ) - return 0; - var n = (function (e, t) { - var i = 0, - n = t - e.mediaSequence, - r = e.segments[n]; - if (r) { - if ("undefined" != typeof r.start) - return { result: r.start, precise: !0 }; - if ("undefined" != typeof r.end) - return { result: r.end - r.duration, precise: !0 }; - } - for (; n--; ) { - if ("undefined" != typeof (r = e.segments[n]).end) - return { result: i + r.end, precise: !0 }; - if (((i += Vo(e, r)), "undefined" != typeof r.start)) - return { result: i + r.start, precise: !0 }; - } - return { result: i, precise: !1 }; - })(e, t); - return n.precise - ? n.result - : (t = (function (e, t) { - for ( - var i, n = 0, r = t - e.mediaSequence; - r < e.segments.length; - r++ - ) { - if ("undefined" != typeof (i = e.segments[r]).start) - return { result: i.start - n, precise: !0 }; - if (((n += Vo(e, i)), "undefined" != typeof i.end)) - return { result: i.end - n, precise: !0 }; - } - return { result: -1, precise: !1 }; - })(e, t)).precise - ? t.result - : n.result + i; - } - function Yo(e, t, i) { - if (!e) return 0; - if (("number" != typeof i && (i = 0), "undefined" == typeof t)) { - if (e.totalDuration) return e.totalDuration; - if (!e.endList) return window.Infinity; - } - return Ko(e, t, i); - } - function Qo(e) { - var t = e.defaultDuration, - i = e.durationList, - n = e.startIndex, - r = e.endIndex, - a = 0; - if ((r < n && ((n = (e = [r, n])[0]), (r = e[1])), n < 0)) { - for (var s = n; s < Math.min(0, r); s++) a += t; - n = 0; - } - for (var o = n; o < r; o++) a += i[o].duration; - return a; - } - function $o(e, t, i, n) { - return e && e.segments - ? e.endList - ? Yo(e) - : null === t - ? null - : ((t = Ko(e, e.mediaSequence + e.segments.length, (t = t || 0))), - i && (t -= n = "number" == typeof n ? n : Xo(null, e)), - Math.max(0, t)) - : null; - } - function Jo(e) { - return e.excludeUntil && e.excludeUntil > Date.now(); - } - function Zo(e) { - return e.excludeUntil && e.excludeUntil === 1 / 0; - } - function eu(e) { - var t = Jo(e); - return !e.disabled && !t; - } - function tu(e, t) { - return t.attributes && t.attributes[e]; - } - function iu(e, t) { - if (1 === e.playlists.length) return !0; - var i = t.attributes.BANDWIDTH || Number.MAX_VALUE; - return ( - 0 === - e.playlists.filter(function (e) { - return !!eu(e) && (e.attributes.BANDWIDTH || 0) < i; - }).length - ); - } - function nu(e, t) { - return ( - !((!e && !t) || (!e && t) || (e && !t)) && - (e === t || - !(!e.id || !t.id || e.id !== t.id) || - !( - !e.resolvedUri || - !t.resolvedUri || - e.resolvedUri !== t.resolvedUri - ) || - !(!e.uri || !t.uri || e.uri !== t.uri)) - ); - } - function ru(e, t) { - var i, - n = (e && e.mediaGroups && e.mediaGroups.AUDIO) || {}, - r = !1; - for (i in n) { - for (var a in n[i]) if ((r = t(n[i][a]))) break; - if (r) break; - } - return !!r; - } - function au(i) { - if (!i || !i.playlists || !i.playlists.length) - return ru(i, function (e) { - return (e.playlists && e.playlists.length) || e.uri; - }); - for (var e = 0; e < i.playlists.length; e++) { - var t = (function (e) { - var t = i.playlists[e], - e = t.attributes && t.attributes.CODECS; - return (e && e.split(",").every(fr)) || - ru(i, function (e) { - return nu(t, e); - }) - ? "continue" - : { v: !1 }; - })(e); - if ("continue" !== t && "object" == typeof t) return t.v; - } - return !0; - } - function su(e, t) { - return e + "-" + t; - } - function ou(r, a) { - r.mediaGroups && - ["AUDIO", "SUBTITLES"].forEach(function (e) { - if (r.mediaGroups[e]) - for (var t in r.mediaGroups[e]) - for (var i in r.mediaGroups[e][t]) { - var n = r.mediaGroups[e][t][i]; - a(n, e, t, i); - } - }); - } - function uu(e) { - var t = e.playlist, - i = e.uri, - e = e.id; - (t.id = e), - (t.playlistErrors_ = 0), - i && (t.uri = i), - (t.attributes = t.attributes || {}); - } - function lu(o, e) { - o.uri = e; - for (var t = 0; t < o.playlists.length; t++) - o.playlists[t].uri || (o.playlists[t].uri = "placeholder-uri-" + t); - var i, - u = au(o); - ou(o, function (e, t, i, n) { - var r = "placeholder-uri-" + t + "-" + i + "-" + n; - if (!e.playlists || !e.playlists.length) { - if (u && "AUDIO" === t && !e.uri) - for (var a = 0; a < o.playlists.length; a++) { - var s = o.playlists[a]; - if (s.attributes && s.attributes.AUDIO && s.attributes.AUDIO === i) - return; - } - e.playlists = [g({}, e)]; - } - e.playlists.forEach(function (e, t) { - var i = su(t, r); - e.uri - ? (e.resolvedUri = e.resolvedUri || pl(o.uri, e.uri)) - : ((e.uri = 0 === t ? r : i), (e.resolvedUri = e.uri)), - (e.id = e.id || i), - (e.attributes = e.attributes || {}), - (o.playlists[e.id] = e), - (o.playlists[e.uri] = e); - }); - }), - (function (e) { - for (var t = e.playlists.length; t--; ) { - var i = e.playlists[t]; - uu({ playlist: i, id: su(t, i.uri) }), - (i.resolvedUri = pl(e.uri, i.uri)), - (e.playlists[i.id] = i), - (e.playlists[i.uri] = i).attributes.BANDWIDTH || - yl.warn( - "Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.", - ); - } - })(o), - ou((i = o), function (e) { - e.uri && (e.resolvedUri = pl(i.uri, e.uri)); - }); - } - function cu(e, t, i) { - var n = e.slice(), - r = t.slice(); - i = i || 0; - for (var a, s = [], o = 0; o < r.length; o++) { - var u = n[o + i], - l = r[o]; - u - ? ((a = u.map || a), - s.push( - (function (e, t) { - if (!e) return t; - var i = vl(e, t); - if ( - (e.preloadHints && !t.preloadHints && delete i.preloadHints, - e.parts && !t.parts) - ) - delete i.parts; - else if (e.parts && t.parts) - for (var n = 0; n < t.parts.length; n++) - e.parts && - e.parts[n] && - (i.parts[n] = vl(e.parts[n], t.parts[n])); - return ( - !e.skipped && t.skipped && (i.skipped = !1), - e.preload && !t.preload && (i.preload = !1), - i - ); - })(u, l), - )) - : (a && !l.map && (l.map = a), s.push(l)); - } - return s; - } - function du(e, t) { - !e.resolvedUri && e.uri && (e.resolvedUri = pl(t, e.uri)), - e.key && !e.key.resolvedUri && (e.key.resolvedUri = pl(t, e.key.uri)), - e.map && !e.map.resolvedUri && (e.map.resolvedUri = pl(t, e.map.uri)), - e.map && - e.map.key && - !e.map.key.resolvedUri && - (e.map.key.resolvedUri = pl(t, e.map.key.uri)), - e.parts && - e.parts.length && - e.parts.forEach(function (e) { - e.resolvedUri || (e.resolvedUri = pl(t, e.uri)); - }), - e.preloadHints && - e.preloadHints.length && - e.preloadHints.forEach(function (e) { - e.resolvedUri || (e.resolvedUri = pl(t, e.uri)); - }); - } - function hu(e) { - var t = e.segments || [], - i = e.preloadSegment; - if (i && i.parts && i.parts.length) { - if (i.preloadHints) - for (var n = 0; n < i.preloadHints.length; n++) - if ("MAP" === i.preloadHints[n].type) return t; - (i.duration = e.targetDuration), (i.preload = !0), t.push(i); - } - return t; - } - function pu(e, t) { - return ( - e === t || - (e.segments && - t.segments && - e.segments.length === t.segments.length && - e.endList === t.endList && - e.mediaSequence === t.mediaSequence && - e.preloadSegment === t.preloadSegment) - ); - } - function fu(e, a, t) { - void 0 === t && (t = pu); - var i = vl(e, {}), - n = i.playlists[a.id]; - if (!n) return null; - if (t(n, a)) return null; - a.segments = hu(a); - var s = vl(n, a); - if ( - (s.preloadSegment && !a.preloadSegment && delete s.preloadSegment, - n.segments) - ) { - if (a.skip) { - a.segments = a.segments || []; - for (var r = 0; r < a.skip.skippedSegments; r++) - a.segments.unshift({ skipped: !0 }); - } - s.segments = cu( - n.segments, - a.segments, - a.mediaSequence - n.mediaSequence, - ); - } - s.segments.forEach(function (e) { - du(e, s.resolvedUri); - }); - for (var o = 0; o < i.playlists.length; o++) - i.playlists[o].id === a.id && (i.playlists[o] = s); - return ( - (i.playlists[a.id] = s), - (i.playlists[a.uri] = s), - ou(e, function (e, t, i, n) { - if (e.playlists) - for (var r = 0; r < e.playlists.length; r++) - a.id === e.playlists[r].id && (e.playlists[r] = s); - }), - i - ); - } - function mu(e, t) { - var i = e.segments || [], - n = i[i.length - 1], - n = - ((i = n && n.parts && n.parts[n.parts.length - 1]) && i.duration) || - (n && n.duration); - return t && n - ? 1e3 * n - : 500 * (e.partTargetDuration || e.targetDuration || 10); - } - function gu(e, t, i, n) { - var r = "arraybuffer" === e.responseType ? e.response : e.responseText; - !t && - r && - ((e.responseTime = Date.now()), - (e.roundTripTime = e.responseTime - e.requestTime), - (e.bytesReceived = r.byteLength || r.length), - e.bandwidth || - (e.bandwidth = Math.floor( - (e.bytesReceived / e.roundTripTime) * 8 * 1e3, - ))), - i.headers && (e.responseHeaders = i.headers), - t && "ETIMEDOUT" === t.code && (e.timedout = !0), - n( - (t = - !t && - !e.aborted && - 200 !== i.statusCode && - 206 !== i.statusCode && - 0 !== i.statusCode - ? new Error( - "XHR Failed with a response of: " + - (e && (r || e.responseText)), - ) - : t), - e, - ); - } - function yu() { - function a(e, i) { - e = Tl({ timeout: 45e3 }, e); - var t = a.beforeRequest || tr.Vhs.xhr.beforeRequest; - !t || "function" != typeof t || ((t = t(e)) && (e = t)); - var n = (!0 === tr.Vhs.xhr.original ? bl : tr.Vhs.xhr)( - e, - function (e, t) { - return gu(n, e, t, i); - }, - ), - r = n.abort; - return ( - (n.abort = function () { - return (n.aborted = !0), r.apply(n, arguments); - }), - (n.uri = e.uri), - (n.requestTime = Date.now()), - n - ); - } - return (a.original = !0), a; - } - function vu(e) { - var t, - i = {}; - return ( - e.byterange && - (i.Range = - ((t = e.byterange), - (e = t.offset), - (t = - "bigint" == typeof t.offset || "bigint" == typeof t.length - ? window.BigInt(t.offset) + - window.BigInt(t.length) - - window.BigInt(1) - : t.offset + t.length - 1), - "bytes=" + e + "-" + t)), - i - ); - } - function _u(e, t) { - return ( - (e = e.toString(16)), - "00".substring(0, 2 - e.length) + e + (t % 2 ? " " : "") - ); - } - function bu(e) { - return 32 <= e && e < 126 ? String.fromCharCode(e) : "."; - } - function Tu(i) { - var n = {}; - return ( - Object.keys(i).forEach(function (e) { - var t = i[e]; - _r(t) - ? (n[e] = { - bytes: t.buffer, - byteOffset: t.byteOffset, - byteLength: t.byteLength, - }) - : (n[e] = t); - }), - n - ); - } - function Su(e) { - var t = e.byterange || { length: 1 / 0, offset: 0 }; - return [t.length, t.offset, e.resolvedUri].join(","); - } - function wu(e) { - return e.resolvedUri; - } - function Eu(e) { - for ( - var t = Array.prototype.slice.call(e), i = "", n = 0; - n < t.length / 16; - n++ - ) - i += - t - .slice(16 * n, 16 * n + 16) - .map(_u) - .join("") + - " " + - t - .slice(16 * n, 16 * n + 16) - .map(bu) - .join("") + - "\n"; - return i; - } - function ku(e) { - var t = e.playlist, - i = e.time, - n = void 0 === i ? void 0 : i; - if (!(i = e.callback)) - throw new Error("getProgramTime: callback must be provided"); - return t && void 0 !== n - ? (e = (function (e, t) { - if (!t || !t.segments || 0 === t.segments.length) return null; - for ( - var i, n = 0, r = 0; - r < t.segments.length && - !( - e <= - (n = (i = t.segments[r]).videoTimingInfo - ? i.videoTimingInfo.transmuxedPresentationEnd - : n + i.duration) - ); - r++ - ); - var a = t.segments[t.segments.length - 1]; - if ( - a.videoTimingInfo && - a.videoTimingInfo.transmuxedPresentationEnd < e - ) - return null; - if (n < e) { - if (e > n + 0.25 * a.duration) return null; - i = a; - } - return { - segment: i, - estimatedStart: i.videoTimingInfo - ? i.videoTimingInfo.transmuxedPresentationStart - : n - i.duration, - type: i.videoTimingInfo ? "accurate" : "estimate", - }; - })(n, t)) - ? "estimate" === e.type - ? i({ - message: - "Accurate programTime could not be determined. Please seek to e.seekTime and try again", - seekTime: e.estimatedStart, - }) - : ((t = { mediaSeconds: n }), - (e = (function (e, t) { - if (!t.dateTimeObject) return null; - var i = t.videoTimingInfo.transmuxerPrependedSeconds, - i = e - (t.videoTimingInfo.transmuxedPresentationStart + i); - return new Date(t.dateTimeObject.getTime() + 1e3 * i); - })(n, e.segment)) && (t.programDateTime = e.toISOString()), - i(null, t)) - : i({ message: "valid programTime was not found" }) - : i({ message: "getProgramTime: playlist and time must be provided" }); - } - function Cu(e) { - var t = e.programTime, - i = e.playlist, - n = e.retryCount, - r = void 0 === n ? 2 : n, - a = e.seekTo, - s = e.pauseAfterSeek, - o = void 0 === s || s, - u = e.tech, - l = e.callback; - if (!l) throw new Error("seekToProgramTime: callback must be provided"); - return "undefined" != typeof t && i && a - ? i.endList || u.hasStarted_ - ? (function (e) { - if (!e.segments || 0 === e.segments.length) return !1; - for (var t = 0; t < e.segments.length; t++) - if (!e.segments[t].dateTimeObject) return !1; - return !0; - })(i) - ? (n = (function (e, t) { - var i; - try { - i = new Date(e); - } catch (e) { - return null; - } - if (!t || !t.segments || 0 === t.segments.length) return null; - if (i < (r = t.segments[0]).dateTimeObject) return null; - for (var n = 0; n < t.segments.length - 1; n++) { - var r = t.segments[n]; - if (i < t.segments[n + 1].dateTimeObject) break; - } - var a, - s = t.segments[t.segments.length - 1], - e = s.dateTimeObject, - a = s.videoTimingInfo - ? (a = s.videoTimingInfo).transmuxedPresentationEnd - - a.transmuxedPresentationStart - - a.transmuxerPrependedSeconds - : s.duration + 0.25 * s.duration; - return new Date(e.getTime() + 1e3 * a) < i - ? null - : { - segment: (r = e < i ? s : r), - estimatedStart: r.videoTimingInfo - ? r.videoTimingInfo.transmuxedPresentationStart - : gl.duration(t, t.mediaSequence + t.segments.indexOf(r)), - type: r.videoTimingInfo ? "accurate" : "estimate", - }; - })(t, i)) - ? ((s = n.segment), - (e = (function (e, t) { - var i; - try { - (n = new Date(e)), (i = new Date(t)); - } catch (e) {} - var n = n.getTime(); - return (i.getTime() - n) / 1e3; - })(s.dateTimeObject, t)), - "estimate" === n.type - ? 0 === r - ? l({ message: t + " is not buffered yet. Try again" }) - : (a(n.estimatedStart + e), - void u.one("seeked", function () { - Cu({ - programTime: t, - playlist: i, - retryCount: r - 1, - seekTo: a, - pauseAfterSeek: o, - tech: u, - callback: l, - }); - })) - : ((e = s.start + e), - u.one("seeked", function () { - return l(null, u.currentTime()); - }), - o && u.pause(), - void a(e))) - : l({ message: t + " was not found in the stream" }) - : l({ - message: - "programDateTime tags must be provided in the manifest " + - i.resolvedUri, - }) - : l({ - message: "player must be playing a live stream to start buffering", - }) - : l({ - message: - "seekToProgramTime: programTime, seekTo and playlist must be provided", - }); - } - function Iu(e, t) { - if (4 === e.readyState) return t(); - } - function xu(e, t, r) { - function n(e, t, i, n) { - return t.abort(), (o = !0), r(e, t, i, n); - } - function i(e, t) { - if (!o) { - if (e) return n(e, t, "", s); - var i = t.responseText.substring( - (s && s.byteLength) || 0, - t.responseText.length, - ); - if ( - ((s = (function () { - for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) - t[i] = arguments[i]; - if ( - (t = t.filter(function (e) { - return e && (e.byteLength || e.length) && "string" != typeof e; - })).length <= 1 - ) - return br(t[0]); - var n = t.reduce(function (e, t, i) { - return e + (t.byteLength || t.length); - }, 0), - r = new Uint8Array(n), - a = 0; - return ( - t.forEach(function (e) { - (e = br(e)), r.set(e, a), (a += e.byteLength); - }), - r - ); - })(s, Sr(i, !0))), - (a = a || eo(s)), - s.length < 10 || (a && s.length < a + 2)) - ) - return Iu(t, function () { - return n(e, t, "", s); - }); - i = Oo(s); - return ("ts" === i && s.length < 188) || (!i && s.length < 376) - ? Iu(t, function () { - return n(e, t, "", s); - }) - : n(null, t, i, s); - } - } - var a, - s = [], - o = !1, - u = t( - { - uri: e, - beforeSend: function (t) { - t.overrideMimeType("text/plain; charset=x-user-defined"), - t.addEventListener("progress", function (e) { - return ( - e.total, e.loaded, gu(t, null, { statusCode: t.status }, i) - ); - }); - }, - }, - function (e, t) { - return gu(u, e, t, i); - }, - ); - return u; - } - function Au(e, t) { - if (!pu(e, t)) return !1; - if ( - e.sidx && - t.sidx && - (e.sidx.offset !== t.sidx.offset || e.sidx.length !== t.sidx.length) - ) - return !1; - if ((!e.sidx && t.sidx) || (e.sidx && !t.sidx)) return !1; - if ((e.segments && !t.segments) || (!e.segments && t.segments)) return !1; - if (!e.segments && !t.segments) return !0; - for (var i = 0; i < e.segments.length; i++) { - var n = e.segments[i], - r = t.segments[i]; - if (n.uri !== r.uri) return !1; - if (n.byterange || r.byterange) { - (n = n.byterange), (r = r.byterange); - if ((n && !r) || (!n && r)) return !1; - if (n.offset !== r.offset || n.length !== r.length) return !1; - } - } - return !0; - } - function Pu(e, t) { - var i, - n = {}; - for (i in e) { - var r = e[i].sidx; - if (r) { - var a = xs(r); - if (!t[a]) break; - var s = t[a].sidxInfo; - (s = s), - (r = r), - (Boolean(!s.map && !r.map) || - Boolean( - s.map && - r.map && - s.map.byterange.offset === r.map.byterange.offset && - s.map.byterange.length === r.map.byterange.length, - )) && - s.uri === r.uri && - s.byterange.offset === r.byterange.offset && - s.byterange.length === r.byterange.length && - (n[a] = t[a]); - } - } - return n; - } - function Lu(e) { - return (e.on = e.addEventListener), (e.off = e.removeEventListener), e; - } - function Du(i) { - var n = i.transmuxer, - e = i.bytes, - t = i.audioAppendStart, - r = i.gopsToAlignWith, - a = i.remux, - s = i.onData, - o = i.onTrackInfo, - u = i.onAudioTimingInfo, - l = i.onVideoTimingInfo, - c = i.onVideoSegmentTimingInfo, - d = i.onAudioSegmentTimingInfo, - h = i.onId3, - p = i.onCaptions, - f = i.onDone, - m = i.onEndedTimeline, - g = i.onTransmuxerLog, - y = i.isEndOfTimeline, - v = { buffer: [] }, - _ = y; - (n.onmessage = function (e) { - var t; - n.currentTransmux === i && - ("data" === e.data.action && - (function (e, t, i) { - var n = e.data.segment, - r = n.type, - a = n.initSegment, - s = n.captions, - o = n.captionStreams, - u = n.metadata, - l = n.videoFrameDtsTime, - n = n.videoFramePtsTime; - t.buffer.push({ captions: s, captionStreams: o, metadata: u }); - (e = e.data.segment.boxes || { data: e.data.segment.data }), - (a = { - type: r, - data: new Uint8Array( - e.data, - e.data.byteOffset, - e.data.byteLength, - ), - initSegment: new Uint8Array(a.data, a.byteOffset, a.byteLength), - }); - "undefined" != typeof l && (a.videoFrameDtsTime = l), - "undefined" != typeof n && (a.videoFramePtsTime = n), - i(a); - })(e, v, s), - "trackinfo" === e.data.action && o(e.data.trackInfo), - "gopInfo" === e.data.action && (v.gopInfo = e.data.gopInfo), - "audioTimingInfo" === e.data.action && u(e.data.audioTimingInfo), - "videoTimingInfo" === e.data.action && l(e.data.videoTimingInfo), - "videoSegmentTimingInfo" === e.data.action && - c(e.data.videoSegmentTimingInfo), - "audioSegmentTimingInfo" === e.data.action && - d(e.data.audioSegmentTimingInfo), - "id3Frame" === e.data.action && - h([e.data.id3Frame], e.data.id3Frame.dispatchType), - "caption" === e.data.action && p(e.data.caption), - "endedtimeline" === e.data.action && ((_ = !1), m()), - "log" === e.data.action && g(e.data.log), - "transmuxed" === e.data.type && - (_ || - ((n.onmessage = null), - (e = (t = { transmuxedData: v, callback: f }).transmuxedData), - (t = t.callback), - (e.buffer = []), - t(e), - Cl(n)))); - }), - t && n.postMessage({ action: "setAudioAppendStart", appendStart: t }), - Array.isArray(r) && - n.postMessage({ action: "alignGopsWith", gopsToAlignWith: r }), - "undefined" != typeof a && - n.postMessage({ action: "setRemux", remux: a }), - e.byteLength && - ((r = e instanceof ArrayBuffer ? e : e.buffer), - (a = e instanceof ArrayBuffer ? 0 : e.byteOffset), - n.postMessage( - { action: "push", data: r, byteOffset: a, byteLength: e.byteLength }, - [r], - )), - y && n.postMessage({ action: "endTimeline" }), - n.postMessage({ action: "flush" }); - } - function Ou(e, t) { - e.postMessage({ action: t }), Cl(e); - } - function Mu(e, t) { - if (!t.currentTransmux) return (t.currentTransmux = e), Ou(t, e), 0; - t.transmuxQueue.push(Ou.bind(null, t, e)); - } - function Ru(e) { - if (!e.transmuxer.currentTransmux) - return (e.transmuxer.currentTransmux = e), void Du(e); - e.transmuxer.transmuxQueue.push(e); - } - function Nu(i) { - var n = i.transmuxer, - r = i.endAction || i.action, - a = i.callback, - e = g({}, i, { endAction: null, transmuxer: null, callback: null }), - t = function e(t) { - t.data.action === r && - (n.removeEventListener("message", e), - t.data.data && - ((t.data.data = new Uint8Array( - t.data.data, - i.byteOffset || 0, - i.byteLength || t.data.data.byteLength, - )), - i.data && (i.data = t.data.data)), - a(t.data)); - }; - n.addEventListener("message", t), - i.data - ? ((t = i.data instanceof ArrayBuffer), - (e.byteOffset = t ? 0 : i.data.byteOffset), - (e.byteLength = i.data.byteLength), - (t = [t ? i.data : i.data.buffer]), - n.postMessage(e, t)) - : n.postMessage(e); - } - function Uu(e) { - e.forEach(function (e) { - e.abort(); - }); - } - function Bu(e, t) { - return t.timedout - ? { - status: t.status, - message: "HLS request timed-out at URL: " + t.uri, - code: Pl, - xhr: t, - } - : t.aborted - ? { - status: t.status, - message: "HLS request aborted at URL: " + t.uri, - code: Ll, - xhr: t, - } - : e - ? { - status: t.status, - message: "HLS request errored at URL: " + t.uri, - code: Al, - xhr: t, - } - : "arraybuffer" === t.responseType && 0 === t.response.byteLength - ? { - status: t.status, - message: "Empty HLS response at URL: " + t.uri, - code: Al, - xhr: t, - } - : null; - } - function Fu(a, s, o) { - return function (e, t) { - var i = t.response, - e = Bu(e, t); - if (e) return o(e, a); - if (16 !== i.byteLength) - return o( - { - status: t.status, - message: "Invalid HLS key at URL: " + t.uri, - code: Al, - xhr: t, - }, - a, - ); - for ( - var i = new DataView(i), - n = new Uint32Array([ - i.getUint32(0), - i.getUint32(4), - i.getUint32(8), - i.getUint32(12), - ]), - r = 0; - r < s.length; - r++ - ) - s[r].bytes = n; - return o(null, a); - }; - } - function ju(i, n) { - var e = Oo(i.map.bytes); - if ("mp4" !== e) { - var t = i.map.resolvedUri || i.map.uri; - return n({ - internal: !0, - message: - "Found unsupported " + - (e || "unknown") + - " container for initialization segment at URL: " + - t, - code: Al, - }); - } - Nu({ - action: "probeMp4Tracks", - data: i.map.bytes, - transmuxer: i.transmuxer, - callback: function (e) { - var t = e.tracks, - e = e.data; - return ( - (i.map.bytes = e), - t.forEach(function (e) { - (i.map.tracks = i.map.tracks || {}), - i.map.tracks[e.type] || - ("number" == typeof (i.map.tracks[e.type] = e).id && - e.timescale && - ((i.map.timescales = i.map.timescales || {}), - (i.map.timescales[e.id] = e.timescale))); - }), - n(null) - ); - }, - }); - } - function Hu(e) { - var i = e.segment, - n = e.finishProcessingFn, - r = e.responseType; - return function (e, t) { - e = Bu(e, t); - if (e) return n(e, i); - e = - "arraybuffer" !== r && t.responseText - ? (function (e) { - for ( - var t = new Uint8Array(new ArrayBuffer(e.length)), i = 0; - i < e.length; - i++ - ) - t[i] = e.charCodeAt(i); - return t.buffer; - })(t.responseText.substring(i.lastReachedChar || 0)) - : t.response; - return ( - (i.stats = { - bandwidth: (t = t).bandwidth, - bytesReceived: t.bytesReceived || 0, - roundTripTime: t.roundTripTime || 0, - }), - i.key - ? (i.encryptedBytes = new Uint8Array(e)) - : (i.bytes = new Uint8Array(e)), - n(null, i) - ); - }; - } - function qu(e) { - var i = e.segment, - t = e.bytes, - n = e.trackInfoFn, - r = e.timingInfoFn, - a = e.videoSegmentTimingInfoFn, - s = e.audioSegmentTimingInfoFn, - o = e.id3Fn, - u = e.captionsFn, - l = e.isEndOfTimeline, - c = e.endedTimelineFn, - d = e.dataFn, - h = e.doneFn, - p = e.onTransmuxerLog, - e = (i.map && i.map.tracks) || {}, - f = Boolean(e.audio && e.video), - m = r.bind(null, i, "audio", "start"), - g = r.bind(null, i, "audio", "end"), - y = r.bind(null, i, "video", "start"), - v = r.bind(null, i, "video", "end"); - Nu({ - action: "probeTs", - transmuxer: i.transmuxer, - data: t, - baseStartTime: i.baseStartTime, - callback: function (e) { - i.bytes = t = e.data; - e = e.result; - e && - (n(i, { hasAudio: e.hasAudio, hasVideo: e.hasVideo, isMuxed: f }), - (n = null), - e.hasAudio && !f && m(e.audioStart), - e.hasVideo && y(e.videoStart), - (y = m = null)), - Ru({ - bytes: t, - transmuxer: i.transmuxer, - audioAppendStart: i.audioAppendStart, - gopsToAlignWith: i.gopsToAlignWith, - remux: f, - onData: function (e) { - (e.type = "combined" === e.type ? "video" : e.type), d(i, e); - }, - onTrackInfo: function (e) { - n && (f && (e.isMuxed = !0), n(i, e)); - }, - onAudioTimingInfo: function (e) { - m && "undefined" != typeof e.start && (m(e.start), (m = null)), - g && "undefined" != typeof e.end && g(e.end); - }, - onVideoTimingInfo: function (e) { - y && "undefined" != typeof e.start && (y(e.start), (y = null)), - v && "undefined" != typeof e.end && v(e.end); - }, - onVideoSegmentTimingInfo: function (e) { - a(e); - }, - onAudioSegmentTimingInfo: function (e) { - s(e); - }, - onId3: function (e, t) { - o(i, e, t); - }, - onCaptions: function (e) { - u(i, [e]); - }, - isEndOfTimeline: l, - onEndedTimeline: function () { - c(); - }, - onTransmuxerLog: p, - onDone: function (e) { - h && - ((e.type = "combined" === e.type ? "video" : e.type), - h(null, i, e)); - }, - }); - }, - }); - } - function Vu(e) { - var i = e.segment, - n = e.bytes, - t = e.trackInfoFn, - r = e.timingInfoFn, - a = e.videoSegmentTimingInfoFn, - s = e.audioSegmentTimingInfoFn, - o = e.id3Fn, - u = e.captionsFn, - l = e.isEndOfTimeline, - c = e.endedTimelineFn, - d = e.dataFn, - h = e.doneFn, - p = e.onTransmuxerLog, - f = new Uint8Array(n); - if (0 < io(f, ["moof"]).length) { - i.isFmp4 = !0; - var m = i.map.tracks, - g = { isFmp4: !0, hasVideo: !!m.video, hasAudio: !!m.audio }; - m.audio && - m.audio.codec && - "enca" !== m.audio.codec && - (g.audioCodec = m.audio.codec), - m.video && - m.video.codec && - "encv" !== m.video.codec && - (g.videoCodec = m.video.codec), - m.video && m.audio && (g.isMuxed = !0), - t(i, g); - var y = function (e) { - d(i, { data: f, type: g.hasAudio && !g.isMuxed ? "audio" : "video" }), - e && e.length && u(i, e), - h(null, i, {}); - }; - Nu({ - action: "probeMp4StartTime", - timescales: i.map.timescales, - data: f, - transmuxer: i.transmuxer, - callback: function (e) { - var t = e.data, - e = e.startTime; - (n = t.buffer), - (i.bytes = f = t), - g.hasAudio && !g.isMuxed && r(i, "audio", "start", e), - g.hasVideo && r(i, "video", "start", e), - m.video && t.byteLength && i.transmuxer - ? Nu({ - action: "pushMp4Captions", - endAction: "mp4Captions", - transmuxer: i.transmuxer, - data: f, - timescales: i.map.timescales, - trackIds: [m.video.id], - callback: function (e) { - (n = e.data.buffer), - (i.bytes = f = e.data), - e.logs.forEach(function (e) { - p(tr.mergeOptions(e, { stream: "mp4CaptionParser" })); - }), - y(e.captions); - }, - }) - : y(); - }, - }); - } else if (i.transmuxer) { - if ( - ("undefined" == typeof i.container && (i.container = Oo(f)), - "ts" !== i.container && "aac" !== i.container) - ) - return t(i, { hasAudio: !1, hasVideo: !1 }), h(null, i, {}), 0; - qu({ - segment: i, - bytes: n, - trackInfoFn: t, - timingInfoFn: r, - videoSegmentTimingInfoFn: a, - audioSegmentTimingInfoFn: s, - id3Fn: o, - captionsFn: u, - isEndOfTimeline: l, - endedTimelineFn: c, - dataFn: d, - doneFn: h, - onTransmuxerLog: p, - }); - } else h(null, i, {}); - } - function Wu(e, i) { - var n = e.id, - t = e.key, - r = e.encryptedBytes, - a = e.decryptionWorker, - e = function e(t) { - t.data.source === n && - (a.removeEventListener("message", e), - (t = t.data.decrypted), - i(new Uint8Array(t.bytes, t.byteOffset, t.byteLength))); - }; - a.addEventListener("message", e), - (e = t.bytes.slice - ? t.bytes.slice() - : new Uint32Array(Array.prototype.slice.call(t.bytes))), - a.postMessage(Tu({ source: n, encrypted: r, key: e, iv: t.iv }), [ - r.buffer, - e.buffer, - ]); - } - function Gu(e) { - var i = e.activeXhrs, - m = e.decryptionWorker, - g = e.trackInfoFn, - y = e.timingInfoFn, - v = e.videoSegmentTimingInfoFn, - _ = e.audioSegmentTimingInfoFn, - b = e.id3Fn, - T = e.captionsFn, - S = e.isEndOfTimeline, - w = e.endedTimelineFn, - E = e.dataFn, - k = e.doneFn, - C = e.onTransmuxerLog, - n = 0, - r = !1; - return function (e, f) { - if (!r) { - if (e) return (r = !0), Uu(i), k(e, f); - if ((n += 1) === i.length) { - var t = function () { - if (f.encryptedBytes) - return ( - (t = (e = { - decryptionWorker: m, - segment: f, - trackInfoFn: g, - timingInfoFn: y, - videoSegmentTimingInfoFn: v, - audioSegmentTimingInfoFn: _, - id3Fn: b, - captionsFn: T, - isEndOfTimeline: S, - endedTimelineFn: w, - dataFn: E, - doneFn: k, - onTransmuxerLog: C, - }).decryptionWorker), - (i = e.segment), - (n = e.trackInfoFn), - (r = e.timingInfoFn), - (a = e.videoSegmentTimingInfoFn), - (s = e.audioSegmentTimingInfoFn), - (o = e.id3Fn), - (u = e.captionsFn), - (l = e.isEndOfTimeline), - (c = e.endedTimelineFn), - (d = e.dataFn), - (h = e.doneFn), - (p = e.onTransmuxerLog), - void Wu( - { - id: i.requestId, - key: i.key, - encryptedBytes: i.encryptedBytes, - decryptionWorker: t, - }, - function (e) { - (i.bytes = e), - Vu({ - segment: i, - bytes: i.bytes, - trackInfoFn: n, - timingInfoFn: r, - videoSegmentTimingInfoFn: a, - audioSegmentTimingInfoFn: s, - id3Fn: o, - captionsFn: u, - isEndOfTimeline: l, - endedTimelineFn: c, - dataFn: d, - doneFn: h, - onTransmuxerLog: p, - }); - }, - ) - ); - var e, t, i, n, r, a, s, o, u, l, c, d, h, p; - Vu({ - segment: f, - bytes: f.bytes, - trackInfoFn: g, - timingInfoFn: y, - videoSegmentTimingInfoFn: v, - audioSegmentTimingInfoFn: _, - id3Fn: b, - captionsFn: T, - isEndOfTimeline: S, - endedTimelineFn: w, - dataFn: E, - doneFn: k, - onTransmuxerLog: C, - }); - }; - if ( - ((f.endOfAllRequests = Date.now()), - f.map && f.map.encryptedBytes && !f.map.bytes) - ) - return Wu( - { - decryptionWorker: m, - id: f.requestId + "-init", - encryptedBytes: f.map.encryptedBytes, - key: f.map.key, - }, - function (e) { - (f.map.bytes = e), - ju(f, function (e) { - return e ? (Uu(i), k(e, f)) : void t(); - }); - }, - ); - t(); - } - } - }; - } - function zu(e) { - var n = e.segment, - r = e.progressFn; - return ( - e.trackInfoFn, - e.timingInfoFn, - e.videoSegmentTimingInfoFn, - e.audioSegmentTimingInfoFn, - e.id3Fn, - e.captionsFn, - e.isEndOfTimeline, - e.endedTimelineFn, - e.dataFn, - function (e) { - var t, - i = e.target; - if (!i.aborted) - return ( - (n.stats = tr.mergeOptions( - n.stats, - ((i = (t = e).target), - ((i = { - bandwidth: 1 / 0, - bytesReceived: 0, - roundTripTime: Date.now() - i.requestTime || 0, - }).bytesReceived = t.loaded), - (i.bandwidth = Math.floor( - (i.bytesReceived / i.roundTripTime) * 8 * 1e3, - )), - i), - )), - !n.stats.firstBytesReceivedAt && - n.stats.bytesReceived && - (n.stats.firstBytesReceivedAt = Date.now()), - r(e, n) - ); - } - ); - } - function Xu(e) { - var t, - i, - n, - r = e.xhr, - a = e.xhrOptions, - s = e.decryptionWorker, - o = e.segment, - u = e.abortFn, - l = e.progressFn, - c = e.trackInfoFn, - d = e.timingInfoFn, - h = e.videoSegmentTimingInfoFn, - p = e.audioSegmentTimingInfoFn, - f = e.id3Fn, - m = e.captionsFn, - g = e.isEndOfTimeline, - y = e.endedTimelineFn, - v = e.dataFn, - _ = e.doneFn, - e = e.onTransmuxerLog, - b = [], - _ = Gu({ - activeXhrs: b, - decryptionWorker: s, - trackInfoFn: c, - timingInfoFn: d, - videoSegmentTimingInfoFn: h, - audioSegmentTimingInfoFn: p, - id3Fn: f, - captionsFn: m, - isEndOfTimeline: g, - endedTimelineFn: y, - dataFn: v, - doneFn: _, - onTransmuxerLog: e, - }); - o.key && - !o.key.bytes && - ((e = [o.key]), - o.map && - !o.map.bytes && - o.map.key && - o.map.key.resolvedUri === o.key.resolvedUri && - e.push(o.map.key), - (e = r( - tr.mergeOptions(a, { - uri: o.key.resolvedUri, - responseType: "arraybuffer", - }), - Fu(o, e, _), - )), - b.push(e)), - o.map && - !o.map.bytes && - (!o.map.key || - (o.key && o.key.resolvedUri === o.map.key.resolvedUri) || - ((t = r( - tr.mergeOptions(a, { - uri: o.map.key.resolvedUri, - responseType: "arraybuffer", - }), - Fu(o, [o.map.key], _), - )), - b.push(t)), - (t = r( - tr.mergeOptions(a, { - uri: o.map.resolvedUri, - responseType: "arraybuffer", - headers: vu(o.map), - }), - ((i = (t = { segment: o, finishProcessingFn: _ }).segment), - (n = t.finishProcessingFn), - function (e, t) { - e = Bu(e, t); - if (e) return n(e, i); - e = new Uint8Array(t.response); - if (i.map.key) return (i.map.encryptedBytes = e), n(null, i); - (i.map.bytes = e), - ju(i, function (e) { - return e - ? ((e.xhr = t), (e.status = t.status), n(e, i)) - : void n(null, i); - }); - }), - )), - b.push(t)), - (a = tr.mergeOptions(a, { - uri: (o.part && o.part.resolvedUri) || o.resolvedUri, - responseType: "arraybuffer", - headers: vu(o), - })), - (a = r( - a, - Hu({ segment: o, finishProcessingFn: _, responseType: a.responseType }), - )).addEventListener( - "progress", - zu({ - segment: o, - progressFn: l, - trackInfoFn: c, - timingInfoFn: d, - videoSegmentTimingInfoFn: h, - audioSegmentTimingInfoFn: p, - id3Fn: f, - captionsFn: m, - isEndOfTimeline: g, - endedTimelineFn: y, - dataFn: v, - }), - ), - b.push(a); - var T = {}; - return ( - b.forEach(function (e) { - var t, i; - e.addEventListener( - "loadend", - ((t = (e = { loadendState: T, abortFn: u }).loadendState), - (i = e.abortFn), - function (e) { - e.target.aborted && - i && - !t.calledAbortFn && - (i(), (t.calledAbortFn = !0)); - }), - ); - }), - function () { - return Uu(b); - } - ); - } - function Ku(e, t) { - return ( - (t = t.attributes || {}), - e && - e.mediaGroups && - e.mediaGroups.AUDIO && - t.AUDIO && - e.mediaGroups.AUDIO[t.AUDIO] - ); - } - function Yu(e) { - var n = {}; - return ( - e.forEach(function (e) { - var t = e.mediaType, - i = e.type, - e = e.details; - (n[t] = n[t] || []), n[t].push(hr("" + i + e)); - }), - Object.keys(n).forEach(function (e) { - return 1 < n[e].length - ? (Dl( - "multiple " + - e + - " codecs found as attributes: " + - n[e].join(", ") + - ". Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs.", - ), - void (n[e] = null)) - : void (n[e] = n[e][0]); - }), - n - ); - } - function Qu(e) { - var t = 0; - return e.audio && t++, e.video && t++, t; - } - function $u(e, t) { - var i, - n = t.attributes || {}, - r = Yu( - (function (e) { - e = e.attributes || {}; - if (e.CODECS) return pr(e.CODECS); - })(t) || [], - ); - return ( - Ku(e, t) && - !r.audio && - !(function (e, t) { - if (!Ku(e, t)) return !0; - var i, - t = t.attributes || {}, - n = e.mediaGroups.AUDIO[t.AUDIO]; - for (i in n) if (!n[i].uri && !n[i].playlists) return !0; - return !1; - })(e, t) && - (i = Yu( - (function (e, t) { - if (!e.mediaGroups.AUDIO || !t) return null; - var i, - n = e.mediaGroups.AUDIO[t]; - if (!n) return null; - for (i in n) { - var r = n[i]; - if (r.default && r.playlists) - return pr(r.playlists[0].attributes.CODECS); - } - return null; - })(e, n.AUDIO) || [], - )).audio && - (r.audio = i.audio), - r - ); - } - function Ju(e) { - if (e && e.playlist) { - var t = e.playlist; - return JSON.stringify({ - id: t.id, - bandwidth: e.bandwidth, - width: e.width, - height: e.height, - codecs: (t.attributes && t.attributes.CODECS) || "", - }); - } - } - function Zu(e, t) { - return (e = e && window.getComputedStyle(e)) ? e[t] : ""; - } - function el(e, n) { - var r = e.slice(); - e.sort(function (e, t) { - var i = n(e, t); - return 0 === i ? r.indexOf(e) - r.indexOf(t) : i; - }); - } - function tl(e, t) { - var i, n; - return ( - (i = - (i = e.attributes.BANDWIDTH ? e.attributes.BANDWIDTH : i) || - window.Number.MAX_VALUE) - - (n = - (n = t.attributes.BANDWIDTH ? t.attributes.BANDWIDTH : n) || - window.Number.MAX_VALUE) - ); - } - function il(e, t, i, n, r, a) { - if (e) { - var s = { - bandwidth: t, - width: i, - height: n, - limitRenditionByPlayerDimensions: r, - }, - o = e.playlists; - gl.isAudioOnly(e) && - ((o = a.getAudioTrackPlaylists_()), (s.audioOnly = !0)); - var u = o.map(function (e) { - var t = - e.attributes && - e.attributes.RESOLUTION && - e.attributes.RESOLUTION.width, - i = - e.attributes && - e.attributes.RESOLUTION && - e.attributes.RESOLUTION.height, - n = e.attributes && e.attributes.BANDWIDTH; - return { - bandwidth: n || window.Number.MAX_VALUE, - width: t, - height: i, - playlist: e, - }; - }); - el(u, function (e, t) { - return e.bandwidth - t.bandwidth; - }); - var l = (u = u.filter(function (e) { - return !gl.isIncompatible(e.playlist); - })).filter(function (e) { - return gl.isEnabled(e.playlist); - }), - e = (l = !l.length - ? u.filter(function (e) { - return !gl.isDisabled(e.playlist); - }) - : l).filter(function (e) { - return e.bandwidth * El.BANDWIDTH_VARIANCE < t; - }), - c = e[e.length - 1], - o = e.filter(function (e) { - return e.bandwidth === c.bandwidth; - })[0]; - if (!1 === r) { - var d = o || l[0] || u[0]; - if (d && d.playlist) { - r = o ? "bandwidthBestRep" : "sortedPlaylistReps"; - return ( - l[0] && (r = "enabledPlaylistReps"), - Ol("choosing " + Ju(d) + " using " + r + " with options", s), - d.playlist - ); - } - return Ol("could not choose a playlist with options", s), null; - } - d = e.filter(function (e) { - return e.width && e.height; - }); - el(d, function (e, t) { - return e.width - t.width; - }); - var h, - p, - f, - e = d.filter(function (e) { - return e.width === i && e.height === n; - }), - c = e[e.length - 1], - e = e.filter(function (e) { - return e.bandwidth === c.bandwidth; - })[0]; - e || - ((p = (h = d.filter(function (e) { - return e.width > i || e.height > n; - })).filter(function (e) { - return e.width === h[0].width && e.height === h[0].height; - })), - (c = p[p.length - 1]), - (p = p.filter(function (e) { - return e.bandwidth === c.bandwidth; - })[0])), - a.experimentalLeastPixelDiffSelector && - ((m = d.map(function (e) { - return ( - (e.pixelDiff = Math.abs(e.width - i) + Math.abs(e.height - n)), e - ); - })), - el(m, function (e, t) { - return e.pixelDiff === t.pixelDiff - ? t.bandwidth - e.bandwidth - : e.pixelDiff - t.pixelDiff; - }), - (f = m[0])); - var m = f || p || e || o || l[0] || u[0]; - if (m && m.playlist) { - u = "sortedPlaylistReps"; - return ( - f - ? (u = "leastPixelDiffRep") - : p - ? (u = "resolutionPlusOneRep") - : e - ? (u = "resolutionBestRep") - : o - ? (u = "bandwidthBestRep") - : l[0] && (u = "enabledPlaylistReps"), - Ol("choosing " + Ju(m) + " using " + u + " with options", s), - m.playlist - ); - } - return Ol("could not choose a playlist with options", s), null; - } - } - function nl(e) { - var t = e.inbandTextTracks, - i = e.metadataArray, - r = e.timestampOffset, - n = e.videoDuration; - if (i) { - var a = window.WebKitDataCue || window.VTTCue, - s = t.metadataTrack_; - if ( - s && - (i.forEach(function (e) { - var n = e.cueTime + r; - !("number" != typeof n || window.isNaN(n) || n < 0) && - n < 1 / 0 && - e.frames.forEach(function (e) { - var t, - i = new a(n, n, e.value || e.url || e.data || ""); - (i.frame = e), - (i.value = e), - (t = i), - Object.defineProperties(t.frame, { - id: { - get: function () { - return ( - tr.log.warn( - "cue.frame.id is deprecated. Use cue.value.key instead.", - ), - t.value.key - ); - }, - }, - value: { - get: function () { - return ( - tr.log.warn( - "cue.frame.value is deprecated. Use cue.value.data instead.", - ), - t.value.data - ); - }, - }, - privateData: { - get: function () { - return ( - tr.log.warn( - "cue.frame.privateData is deprecated. Use cue.value.data instead.", - ), - t.value.data - ); - }, - }, - }), - s.addCue(i); - }); - }), - s.cues && s.cues.length) - ) { - for (var o = s.cues, u = [], l = 0; l < o.length; l++) - o[l] && u.push(o[l]); - var c = u.reduce(function (e, t) { - var i = e[t.startTime] || []; - return i.push(t), (e[t.startTime] = i), e; - }, {}), - d = Object.keys(c).sort(function (e, t) { - return Number(e) - Number(t); - }); - d.forEach(function (e, t) { - var e = c[e], - i = Number(d[t + 1]) || n; - e.forEach(function (e) { - e.endTime = i; - }); - }); - } - } - } - function rl(e, t, i) { - var n, r; - if (i && i.cues) - for (n = i.cues.length; n--; ) - (r = i.cues[n]).startTime >= e && r.endTime <= t && i.removeCue(r); - } - function al(e) { - return "number" == typeof e && isFinite(e); - } - function sl(e) { - var t = e.startOfSegment, - i = e.duration, - n = e.segment, - r = e.part, - a = e.playlist, - s = a.mediaSequence, - o = a.id, - u = a.segments, - l = e.mediaIndex, - c = e.partIndex, - d = e.timeline, - h = (void 0 === u ? [] : u).length - 1, - p = "mediaIndex/partIndex increment"; - return ( - e.getMediaInfoForTime - ? (p = "getMediaInfoForTime (" + e.getMediaInfoForTime + ")") - : e.isSyncRequest && (p = "getSyncSegmentCandidate (isSyncRequest)"), - e.independent && (p += " with independent " + e.independent), - (a = "number" == typeof c), - (u = e.segment.uri ? "segment" : "pre-segment"), - (e = a ? zo({ preloadSegment: n }) - 1 : 0), - u + - " [" + - (s + l) + - "/" + - (s + h) + - "]" + - (a ? " part [" + c + "/" + e + "]" : "") + - " segment start/end [" + - n.start + - " => " + - n.end + - "]" + - (a ? " part start/end [" + r.start + " => " + r.end + "]" : "") + - " startOfSegment [" + - t + - "] duration [" + - i + - "] timeline [" + - d + - "] selected by [" + - p + - "] playlist [" + - o + - "]" - ); - } - function ol(e) { - return e + "TimingInfo"; - } - function ul(e) { - var t = e.timelineChangeController, - i = e.currentTimeline, - n = e.segmentTimeline, - r = e.loaderType, - e = e.audioDisabled; - if (i !== n) { - if ("audio" === r) { - i = t.lastTimelineChange({ type: "main" }); - return !i || i.to !== n; - } - if ("main" === r && e) { - t = t.pendingTimelineChange({ type: "audio" }); - return t && t.to === n ? !1 : !0; - } - } - } - function ll(e) { - var t = e.segmentDuration, - e = e.maxDuration; - return !!t && Math.round(t) > e + fl; - } - function cl(e, t) { - if ("hls" !== t) return null; - var n, - r, - i = - ((n = { - audioTimingInfo: e.audioTimingInfo, - videoTimingInfo: e.videoTimingInfo, - }), - (r = 0), - ["video", "audio"].forEach(function (e) { - var t, - i = n[e + "TimingInfo"]; - i && - ((e = i.start), - (i = i.end), - "bigint" == typeof e || "bigint" == typeof i - ? (t = window.BigInt(i) - window.BigInt(e)) - : "number" == typeof e && "number" == typeof i && (t = i - e), - "undefined" != typeof t && r < t && (r = t)); - }), - (r = - "bigint" == typeof r && r < Number.MAX_SAFE_INTEGER ? Number(r) : r)); - if (!i) return null; - var a = e.playlist.targetDuration, - s = ll({ segmentDuration: i, maxDuration: 2 * a }), - t = ll({ segmentDuration: i, maxDuration: a }), - a = - "Segment with index " + - e.mediaIndex + - " from playlist " + - e.playlist.id + - " has a duration of " + - i + - " when the reported duration is " + - e.duration + - " and the target duration is " + - a + - ". For HLS content, a duration in excess of the target duration may result in playback issues. See the HLS specification section on EXT-X-TARGETDURATION for more details: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1"; - return s || t ? { severity: s ? "warn" : "info", message: a } : null; - } - var dl = Lo, - hl = 9e4, - pl = ir, - fl = 1 / 30, - ml = tr.createTimeRange, - gl = { - liveEdgeDelay: Xo, - duration: Yo, - seekable: function (e, t, i) { - var n = t || 0, - i = $o(e, t, !0, i); - return null === i ? ml() : ml(n, i); - }, - getMediaInfoForTime: function (e) { - for ( - var t = e.playlist, - i = e.currentTime, - n = e.startingSegmentIndex, - r = e.startingPartIndex, - a = e.startTime, - s = e.experimentalExactManifestTimings, - o = i - a, - u = Wo(t), - l = 0, - c = 0; - c < u.length; - c++ - ) { - var d = u[c]; - if ( - n === d.segmentIndex && - ("number" != typeof r || - "number" != typeof d.partIndex || - r === d.partIndex) - ) { - l = c; - break; - } - } - if (o < 0) { - if (0 < l) - for (var h = l - 1; 0 <= h; h--) { - var p = u[h]; - if (((o += p.duration), s)) { - if (o < 0) continue; - } else if (o + fl <= 0) continue; - return { - partIndex: p.partIndex, - segmentIndex: p.segmentIndex, - startTime: - a - - Qo({ - defaultDuration: t.targetDuration, - durationList: u, - startIndex: l, - endIndex: h, - }), - }; - } - return { - partIndex: (u[0] && u[0].partIndex) || null, - segmentIndex: (u[0] && u[0].segmentIndex) || 0, - startTime: i, - }; - } - if (l < 0) { - for (var f = l; f < 0; f++) - if ((o -= t.targetDuration) < 0) - return { - partIndex: (u[0] && u[0].partIndex) || null, - segmentIndex: (u[0] && u[0].segmentIndex) || 0, - startTime: i, - }; - l = 0; - } - for (var m = l; m < u.length; m++) { - var g = u[m]; - if (((o -= g.duration), s)) { - if (0 < o) continue; - } else if (0 <= o - fl) continue; - return { - partIndex: g.partIndex, - segmentIndex: g.segmentIndex, - startTime: - a + - Qo({ - defaultDuration: t.targetDuration, - durationList: u, - startIndex: l, - endIndex: m, - }), - }; - } - return { - segmentIndex: u[u.length - 1].segmentIndex, - partIndex: u[u.length - 1].partIndex, - startTime: i, - }; - }, - isEnabled: eu, - isDisabled: function (e) { - return e.disabled; - }, - isBlacklisted: Jo, - isIncompatible: Zo, - playlistEnd: $o, - isAes: function (e) { - for (var t = 0; t < e.segments.length; t++) - if (e.segments[t].key) return !0; - return !1; - }, - hasAttribute: tu, - estimateSegmentRequestTime: function (e, t, i, n) { - return tu("BANDWIDTH", i) - ? (e * i.attributes.BANDWIDTH - 8 * (n = void 0 === n ? 0 : n)) / t - : NaN; - }, - isLowestEnabledRendition: iu, - isAudioOnly: au, - playlistMatch: nu, - segmentDurationWithParts: Vo, - }, - yl = tr.log, - vl = tr.mergeOptions, - W = tr.EventTarget, - _l = (function (a) { - function e(e, t, i) { - var n; - if ((void 0 === i && (i = {}), (n = a.call(this) || this), !e)) - throw new Error("A non-empty playlist URL or object is required"); - n.logger_ = Ro("PlaylistLoader"); - var r = i.withCredentials, - r = void 0 !== r && r, - i = i.handleManifestRedirects, - i = void 0 !== i && i; - (n.src = e), - (n.vhs_ = t), - (n.withCredentials = r), - (n.handleManifestRedirects = i); - t = t.options_; - return ( - (n.customTagParsers = (t && t.customTagParsers) || []), - (n.customTagMappers = (t && t.customTagMappers) || []), - (n.experimentalLLHLS = (t && t.experimentalLLHLS) || !1), - tr.browser.IE_VERSION && (n.experimentalLLHLS = !1), - (n.state = "HAVE_NOTHING"), - (n.handleMediaupdatetimeout_ = n.handleMediaupdatetimeout_.bind( - ft(n), - )), - n.on("mediaupdatetimeout", n.handleMediaupdatetimeout_), - n - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.handleMediaupdatetimeout_ = function () { - var e, - t, - i = this; - "HAVE_METADATA" === this.state && - ((e = this.media()), - (t = pl(this.master.uri, e.uri)), - this.experimentalLLHLS && - (t = (function (e, t) { - if (t.endList || !t.serverControl) return e; - var i, - n, - r, - a, - s = {}; - return ( - t.serverControl.canBlockReload && - ((r = t.preloadSegment), - (i = t.mediaSequence + t.segments.length), - r && - ((n = r.parts || []), - -1 < (r = zo(t) - 1) && - r != n.length - 1 && - (s._HLS_part = r), - (-1 < r || n.length) && i--), - (s._HLS_msn = i)), - t.serverControl && - t.serverControl.canSkipUntil && - (s._HLS_skip = t.serverControl.canSkipDateranges - ? "v2" - : "YES"), - Object.keys(s).length && - ((a = new window.URL(e)), - ["_HLS_skip", "_HLS_msn", "_HLS_part"].forEach( - function (e) { - s.hasOwnProperty(e) && a.searchParams.set(e, s[e]); - }, - ), - (e = a.toString())), - e - ); - })(t, e)), - (this.state = "HAVE_CURRENT_METADATA"), - (this.request = this.vhs_.xhr( - { uri: t, withCredentials: this.withCredentials }, - function (e, t) { - if (i.request) - return e - ? i.playlistRequestError( - i.request, - i.media(), - "HAVE_METADATA", - ) - : void i.haveMetadata({ - playlistString: i.request.responseText, - url: i.media().uri, - id: i.media().id, - }); - }, - ))); - }), - (t.playlistRequestError = function (e, t, i) { - var n = t.uri, - t = t.id; - (this.request = null), - i && (this.state = i), - (this.error = { - playlist: this.master.playlists[t], - status: e.status, - message: "HLS playlist request error at URL: " + n + ".", - responseText: e.responseText, - code: 500 <= e.status ? 4 : 2, - }), - this.trigger("error"); - }), - (t.parseManifest_ = function (e) { - var t = this, - i = e.url; - return (function (e) { - var t = e.onwarn, - i = e.oninfo, - n = e.manifestString, - r = e.customTagParsers, - a = void 0 === r ? [] : r, - r = e.customTagMappers, - r = void 0 === r ? [] : r, - e = e.experimentalLLHLS, - s = new Ir(); - t && s.on("warn", t), - i && s.on("info", i), - a.forEach(function (e) { - return s.addParser(e); - }), - r.forEach(function (e) { - return s.addTagMapper(e); - }), - s.push(n), - s.end(); - var o = s.manifest; - e || - ([ - "preloadSegment", - "skip", - "serverControl", - "renditionReports", - "partInf", - "partTargetDuration", - ].forEach(function (e) { - o.hasOwnProperty(e) && delete o[e]; - }), - o.segments && - o.segments.forEach(function (t) { - ["parts", "preloadHints"].forEach(function (e) { - t.hasOwnProperty(e) && delete t[e]; - }); - })), - o.targetDuration || - ((u = 10), - o.segments && - o.segments.length && - (u = o.segments.reduce(function (e, t) { - return Math.max(e, t.duration); - }, 0)), - t && t("manifest has no targetDuration defaulting to " + u), - (o.targetDuration = u)); - var u = Go(o); - return ( - u.length && - !o.partTargetDuration && - ((u = u.reduce(function (e, t) { - return Math.max(e, t.duration); - }, 0)), - t && - (t("manifest has no partTargetDuration defaulting to " + u), - yl.error( - "LL-HLS manifest has parts but lacks required #EXT-X-PART-INF:PART-TARGET value. See https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-09#section-4.4.3.7. Playback is not guaranteed.", - )), - (o.partTargetDuration = u)), - o - ); - })({ - onwarn: function (e) { - e = e.message; - return t.logger_("m3u8-parser warn for " + i + ": " + e); - }, - oninfo: function (e) { - e = e.message; - return t.logger_("m3u8-parser info for " + i + ": " + e); - }, - manifestString: e.manifestString, - customTagParsers: this.customTagParsers, - customTagMappers: this.customTagMappers, - experimentalLLHLS: this.experimentalLLHLS, - }); - }), - (t.haveMetadata = function (e) { - var t = e.playlistString, - i = e.playlistObject, - n = e.url, - e = e.id; - (this.request = null), (this.state = "HAVE_METADATA"); - t = i || this.parseManifest_({ url: n, manifestString: t }); - (t.lastRequest = Date.now()), uu({ playlist: t, uri: n, id: e }); - n = fu(this.master, t); - (this.targetDuration = t.partTargetDuration || t.targetDuration), - (this.pendingMedia_ = null), - n - ? ((this.master = n), (this.media_ = this.master.playlists[e])) - : this.trigger("playlistunchanged"), - this.updateMediaUpdateTimeout_(mu(this.media(), !!n)), - this.trigger("loadedplaylist"); - }), - (t.dispose = function () { - this.trigger("dispose"), - this.stopRequest(), - window.clearTimeout(this.mediaUpdateTimeout), - window.clearTimeout(this.finalRenditionTimeout), - this.off(); - }), - (t.stopRequest = function () { - var e; - this.request && - ((e = this.request), - (this.request = null), - (e.onreadystatechange = null), - e.abort()); - }), - (t.media = function (i, e) { - var n = this; - if (!i) return this.media_; - if ("HAVE_NOTHING" === this.state) - throw new Error("Cannot switch media playlist from " + this.state); - if ("string" == typeof i) { - if (!this.master.playlists[i]) - throw new Error("Unknown playlist URI: " + i); - i = this.master.playlists[i]; - } - if ((window.clearTimeout(this.finalRenditionTimeout), e)) { - var t = - ((i.partTargetDuration || i.targetDuration) / 2) * 1e3 || 5e3; - this.finalRenditionTimeout = window.setTimeout( - this.media.bind(this, i, !1), - t, - ); - } else { - var r = this.state, - e = !this.media_ || i.id !== this.media_.id, - t = this.master.playlists[i.id]; - if ((t && t.endList) || (i.endList && i.segments.length)) - return ( - this.request && - ((this.request.onreadystatechange = null), - this.request.abort(), - (this.request = null)), - (this.state = "HAVE_METADATA"), - (this.media_ = i), - void ( - e && - (this.trigger("mediachanging"), - "HAVE_MASTER" === r - ? this.trigger("loadedmetadata") - : this.trigger("mediachange")) - ) - ); - if ((this.updateMediaUpdateTimeout_(mu(i, !0)), e)) { - if (((this.state = "SWITCHING_MEDIA"), this.request)) { - if (i.resolvedUri === this.request.url) return; - (this.request.onreadystatechange = null), - this.request.abort(), - (this.request = null); - } - this.media_ && this.trigger("mediachanging"), - (this.pendingMedia_ = i), - (this.request = this.vhs_.xhr( - { uri: i.resolvedUri, withCredentials: this.withCredentials }, - function (e, t) { - if (n.request) { - if ( - ((i.lastRequest = Date.now()), - (i.resolvedUri = Mo( - n.handleManifestRedirects, - i.resolvedUri, - t, - )), - e) - ) - return n.playlistRequestError(n.request, i, r); - n.haveMetadata({ - playlistString: t.responseText, - url: i.uri, - id: i.id, - }), - "HAVE_MASTER" === r - ? n.trigger("loadedmetadata") - : n.trigger("mediachange"); - } - }, - )); - } - } - }), - (t.pause = function () { - this.mediaUpdateTimeout && - (window.clearTimeout(this.mediaUpdateTimeout), - (this.mediaUpdateTimeout = null)), - this.stopRequest(), - "HAVE_NOTHING" === this.state && (this.started = !1), - "SWITCHING_MEDIA" === this.state - ? this.media_ - ? (this.state = "HAVE_METADATA") - : (this.state = "HAVE_MASTER") - : "HAVE_CURRENT_METADATA" === this.state && - (this.state = "HAVE_METADATA"); - }), - (t.load = function (e) { - var t = this; - this.mediaUpdateTimeout && - (window.clearTimeout(this.mediaUpdateTimeout), - (this.mediaUpdateTimeout = null)); - var i = this.media(); - e - ? ((e = i - ? ((i.partTargetDuration || i.targetDuration) / 2) * 1e3 - : 5e3), - (this.mediaUpdateTimeout = window.setTimeout(function () { - (t.mediaUpdateTimeout = null), t.load(); - }, e))) - : this.started - ? i && !i.endList - ? this.trigger("mediaupdatetimeout") - : this.trigger("loadedplaylist") - : this.start(); - }), - (t.updateMediaUpdateTimeout_ = function (e) { - var t = this; - this.mediaUpdateTimeout && - (window.clearTimeout(this.mediaUpdateTimeout), - (this.mediaUpdateTimeout = null)), - this.media() && - !this.media().endList && - (this.mediaUpdateTimeout = window.setTimeout(function () { - (t.mediaUpdateTimeout = null), - t.trigger("mediaupdatetimeout"), - t.updateMediaUpdateTimeout_(e); - }, e)); - }), - (t.start = function () { - var i = this; - if (((this.started = !0), "object" == typeof this.src)) - return ( - this.src.uri || (this.src.uri = window.location.href), - (this.src.resolvedUri = this.src.uri), - void setTimeout(function () { - i.setupInitialPlaylist(i.src); - }, 0) - ); - this.request = this.vhs_.xhr( - { uri: this.src, withCredentials: this.withCredentials }, - function (e, t) { - if (i.request) { - if (((i.request = null), e)) - return ( - (i.error = { - status: t.status, - message: - "HLS playlist request error at URL: " + i.src + ".", - responseText: t.responseText, - code: 2, - }), - "HAVE_NOTHING" === i.state && (i.started = !1), - i.trigger("error") - ); - i.src = Mo(i.handleManifestRedirects, i.src, t); - t = i.parseManifest_({ - manifestString: t.responseText, - url: i.src, - }); - i.setupInitialPlaylist(t); - } - }, - ); - }), - (t.srcUri = function () { - return "string" == typeof this.src ? this.src : this.src.uri; - }), - (t.setupInitialPlaylist = function (e) { - if (((this.state = "HAVE_MASTER"), e.playlists)) - return ( - (this.master = e), - lu(this.master, this.srcUri()), - e.playlists.forEach(function (t) { - (t.segments = hu(t)), - t.segments.forEach(function (e) { - du(e, t.resolvedUri); - }); - }), - this.trigger("loadedplaylist"), - void (this.request || this.media(this.master.playlists[0])) - ); - var t, - i, - n, - r = this.srcUri() || window.location.href; - (this.master = - ((i = su(0, (t = r))), - ((n = { - mediaGroups: { - AUDIO: {}, - VIDEO: {}, - "CLOSED-CAPTIONS": {}, - SUBTITLES: {}, - }, - uri: window.location.href, - resolvedUri: window.location.href, - playlists: [{ uri: t, id: i, resolvedUri: t, attributes: {} }], - }).playlists[i] = n.playlists[0]), - (n.playlists[t] = n.playlists[0]), - n)), - this.haveMetadata({ - playlistObject: e, - url: r, - id: this.master.playlists[0].id, - }), - this.trigger("loadedmetadata"); - }), - e - ); - })(W), - bl = tr.xhr, - Tl = tr.mergeOptions, - zt = Object.freeze({ - __proto__: null, - createTransferableMessage: Tu, - initSegmentId: Su, - segmentKeyId: wu, - hexDump: Eu, - tagDump: function (e) { - e = e.bytes; - return Eu(e); - }, - textRanges: function (e) { - for (var t, i, n = "", r = 0; r < e.length; r++) - n += ((i = r), (t = e).start(i) + "-" + t.end(i) + " "); - return n; - }, - }), - ar = tr.EventTarget, - Sl = tr.mergeOptions, - wl = (function (a) { - function e(e, t, i, n) { - var r; - void 0 === i && (i = {}), - ((r = a.call(this) || this).masterPlaylistLoader_ = n || ft(r)), - n || (r.isMaster_ = !0); - (n = i.withCredentials), - (n = void 0 !== n && n), - (i = i.handleManifestRedirects), - (i = void 0 !== i && i); - if ( - ((r.vhs_ = t), - (r.withCredentials = n), - (r.handleManifestRedirects = i), - !e) - ) - throw new Error("A non-empty playlist URL or object is required"); - return ( - r.on("minimumUpdatePeriod", function () { - r.refreshXml_(); - }), - r.on("mediaupdatetimeout", function () { - r.refreshMedia_(r.media().id); - }), - (r.state = "HAVE_NOTHING"), - (r.loadedPlaylists_ = {}), - (r.logger_ = Ro("DashPlaylistLoader")), - r.isMaster_ - ? ((r.masterPlaylistLoader_.srcUrl = e), - (r.masterPlaylistLoader_.sidxMapping_ = {})) - : (r.childPlaylist_ = e), - r - ); - } - mt(e, a); - var t = e.prototype; - return ( - (t.requestErrored_ = function (e, t, i) { - return ( - !this.request || - ((this.request = null), - e - ? ((this.error = - "object" != typeof e || e instanceof Error - ? { - status: t.status, - message: "DASH request error at URL: " + t.uri, - response: t.response, - code: 2, - } - : e), - i && (this.state = i), - this.trigger("error"), - !0) - : void 0) - ); - }), - (t.addSidxSegments_ = function (a, n, r) { - var s, - o, - u = this, - l = a.sidx && xs(a.sidx); - a.sidx && l && !this.masterPlaylistLoader_.sidxMapping_[l] - ? ((s = Mo(this.handleManifestRedirects, a.sidx.resolvedUri)), - (o = function (e, t) { - if (!u.requestErrored_(e, t, n)) { - var i, - e = u.masterPlaylistLoader_.sidxMapping_; - try { - i = wo(br(t.response).subarray(8)); - } catch (e) { - return void u.requestErrored_(e, t, n); - } - return ( - (e[l] = { sidxInfo: a.sidx, sidx: i }), - ws(a, i, a.sidx.resolvedUri), - r(!0) - ); - } - }), - (this.request = xu(s, this.vhs_.xhr, function (e, t, i, n) { - if (e) return o(e, t); - if (!i || "mp4" !== i) - return o( - { - status: t.status, - message: - "Unsupported " + - (i || "unknown") + - " container type for sidx segment at URL: " + - s, - response: "", - playlist: a, - internal: !0, - blacklistDuration: 1 / 0, - code: 2, - }, - t, - ); - var r = a.sidx.byterange, - i = r.offset, - r = r.length; - if (n.length >= r + i) - return o(e, { - response: n.subarray(i, i + r), - status: t.status, - uri: t.uri, - }); - u.request = u.vhs_.xhr( - { - uri: s, - responseType: "arraybuffer", - headers: vu({ byterange: a.sidx.byterange }), - }, - o, - ); - }))) - : (this.mediaRequest_ = window.setTimeout(function () { - return r(!1); - }, 0)); - }), - (t.dispose = function () { - this.trigger("dispose"), - this.stopRequest(), - (this.loadedPlaylists_ = {}), - window.clearTimeout(this.minimumUpdatePeriodTimeout_), - window.clearTimeout(this.mediaRequest_), - window.clearTimeout(this.mediaUpdateTimeout), - (this.mediaUpdateTimeout = null), - (this.mediaRequest_ = null), - (this.minimumUpdatePeriodTimeout_ = null), - this.masterPlaylistLoader_.createMupOnMedia_ && - (this.off( - "loadedmetadata", - this.masterPlaylistLoader_.createMupOnMedia_, - ), - (this.masterPlaylistLoader_.createMupOnMedia_ = null)), - this.off(); - }), - (t.hasPendingRequest = function () { - return this.request || this.mediaRequest_; - }), - (t.stopRequest = function () { - var e; - this.request && - ((e = this.request), - (this.request = null), - (e.onreadystatechange = null), - e.abort()); - }), - (t.media = function (t) { - var i = this; - if (!t) return this.media_; - if ("HAVE_NOTHING" === this.state) - throw new Error("Cannot switch media playlist from " + this.state); - var n = this.state; - if ("string" == typeof t) { - if (!this.masterPlaylistLoader_.master.playlists[t]) - throw new Error("Unknown playlist URI: " + t); - t = this.masterPlaylistLoader_.master.playlists[t]; - } - var e = !this.media_ || t.id !== this.media_.id; - if ( - e && - this.loadedPlaylists_[t.id] && - this.loadedPlaylists_[t.id].endList - ) - return ( - (this.state = "HAVE_METADATA"), - (this.media_ = t), - void ( - e && - (this.trigger("mediachanging"), this.trigger("mediachange")) - ) - ); - e && - (this.media_ && this.trigger("mediachanging"), - this.addSidxSegments_(t, n, function (e) { - i.haveMetadata({ startingState: n, playlist: t }); - })); - }), - (t.haveMetadata = function (e) { - var t = e.startingState, - e = e.playlist; - (this.state = "HAVE_METADATA"), - (this.loadedPlaylists_[e.id] = e), - (this.mediaRequest_ = null), - this.refreshMedia_(e.id), - "HAVE_MASTER" === t - ? this.trigger("loadedmetadata") - : this.trigger("mediachange"); - }), - (t.pause = function () { - this.masterPlaylistLoader_.createMupOnMedia_ && - (this.off( - "loadedmetadata", - this.masterPlaylistLoader_.createMupOnMedia_, - ), - (this.masterPlaylistLoader_.createMupOnMedia_ = null)), - this.stopRequest(), - window.clearTimeout(this.mediaUpdateTimeout), - (this.mediaUpdateTimeout = null), - this.isMaster_ && - (window.clearTimeout( - this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_, - ), - (this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_ = null)), - "HAVE_NOTHING" === this.state && (this.started = !1); - }), - (t.load = function (e) { - var t = this; - window.clearTimeout(this.mediaUpdateTimeout), - (this.mediaUpdateTimeout = null); - var i = this.media(); - e - ? ((e = i ? (i.targetDuration / 2) * 1e3 : 5e3), - (this.mediaUpdateTimeout = window.setTimeout(function () { - return t.load(); - }, e))) - : this.started - ? i && !i.endList - ? (this.isMaster_ && - !this.minimumUpdatePeriodTimeout_ && - (this.trigger("minimumUpdatePeriod"), - this.updateMinimumUpdatePeriodTimeout_()), - this.trigger("mediaupdatetimeout")) - : this.trigger("loadedplaylist") - : this.start(); - }), - (t.start = function () { - var i = this; - (this.started = !0), - this.isMaster_ - ? this.requestMaster_(function (e, t) { - i.haveMaster_(), - i.hasPendingRequest() || - i.media_ || - i.media(i.masterPlaylistLoader_.master.playlists[0]); - }) - : (this.mediaRequest_ = window.setTimeout(function () { - return i.haveMaster_(); - }, 0)); - }), - (t.requestMaster_ = function (n) { - var r = this; - this.request = this.vhs_.xhr( - { - uri: this.masterPlaylistLoader_.srcUrl, - withCredentials: this.withCredentials, - }, - function (e, t) { - if (!r.requestErrored_(e, t)) { - var i = t.responseText !== r.masterPlaylistLoader_.masterXml_; - return ( - (r.masterPlaylistLoader_.masterXml_ = t.responseText), - t.responseHeaders && t.responseHeaders.date - ? (r.masterLoaded_ = Date.parse(t.responseHeaders.date)) - : (r.masterLoaded_ = Date.now()), - (r.masterPlaylistLoader_.srcUrl = Mo( - r.handleManifestRedirects, - r.masterPlaylistLoader_.srcUrl, - t, - )), - i - ? (r.handleMaster_(), - void r.syncClientServerClock_(function () { - return n(t, i); - })) - : n(t, i) - ); - } - "HAVE_NOTHING" === r.state && (r.started = !1); - }, - ); - }), - (t.syncClientServerClock_ = function (i) { - var n = this, - r = Zs(this.masterPlaylistLoader_.masterXml_); - return null === r - ? ((this.masterPlaylistLoader_.clientOffset_ = - this.masterLoaded_ - Date.now()), - i()) - : "DIRECT" === r.method - ? ((this.masterPlaylistLoader_.clientOffset_ = - r.value - Date.now()), - i()) - : void (this.request = this.vhs_.xhr( - { - uri: pl(this.masterPlaylistLoader_.srcUrl, r.value), - method: r.method, - withCredentials: this.withCredentials, - }, - function (e, t) { - if (n.request) { - if (e) - return ( - (n.masterPlaylistLoader_.clientOffset_ = - n.masterLoaded_ - Date.now()), - i() - ); - t = - "HEAD" === r.method - ? t.responseHeaders && t.responseHeaders.date - ? Date.parse(t.responseHeaders.date) - : n.masterLoaded_ - : Date.parse(t.responseText); - (n.masterPlaylistLoader_.clientOffset_ = t - Date.now()), - i(); - } - }, - )); - }), - (t.haveMaster_ = function () { - (this.state = "HAVE_MASTER"), - this.isMaster_ - ? this.trigger("loadedplaylist") - : this.media_ || this.media(this.childPlaylist_); - }), - (t.handleMaster_ = function () { - this.mediaRequest_ = null; - var e, - t, - i, - n, - r = this.masterPlaylistLoader_.master, - t = - ((a = { - masterXml: this.masterPlaylistLoader_.masterXml_, - srcUrl: this.masterPlaylistLoader_.srcUrl, - clientOffset: this.masterPlaylistLoader_.clientOffset_, - sidxMapping: this.masterPlaylistLoader_.sidxMapping_, - previousManifest: r, - }), - (e = a.masterXml), - (t = a.srcUrl), - (i = a.clientOffset), - (n = a.sidxMapping), - (a = a.previousManifest), - (a = Js(e, { - manifestUri: t, - clientOffset: i, - sidxMapping: n, - previousManifest: a, - })), - lu(a, t), - a); - r && - (t = (function (e, t, i) { - for ( - var a = !0, - s = Sl(e, { - duration: t.duration, - minimumUpdatePeriod: t.minimumUpdatePeriod, - timelineStarts: t.timelineStarts, - }), - n = 0; - n < t.playlists.length; - n++ - ) { - var r, - o = t.playlists[n]; - o.sidx && - ((r = xs(o.sidx)), - i && - i[r] && - i[r].sidx && - ws(o, i[r].sidx, o.sidx.resolvedUri)); - o = fu(s, o, Au); - o && ((s = o), (a = !1)); - } - return ( - ou(t, function (e, t, i, n) { - var r; - e.playlists && - e.playlists.length && - ((r = e.playlists[0].id), - (e = fu(s, e.playlists[0], Au)) && - (((s = e).mediaGroups[t][i][n].playlists[0] = - s.playlists[r]), - (a = !1))); - }), - (a = t.minimumUpdatePeriod === e.minimumUpdatePeriod && a) - ? null - : s - ); - })(r, t, this.masterPlaylistLoader_.sidxMapping_)), - (this.masterPlaylistLoader_.master = t || r); - var a = - this.masterPlaylistLoader_.master.locations && - this.masterPlaylistLoader_.master.locations[0]; - return ( - a && - a !== this.masterPlaylistLoader_.srcUrl && - (this.masterPlaylistLoader_.srcUrl = a), - (!r || (t && t.minimumUpdatePeriod !== r.minimumUpdatePeriod)) && - this.updateMinimumUpdatePeriodTimeout_(), - Boolean(t) - ); - }), - (t.updateMinimumUpdatePeriodTimeout_ = function () { - var e = this.masterPlaylistLoader_; - e.createMupOnMedia_ && - (e.off("loadedmetadata", e.createMupOnMedia_), - (e.createMupOnMedia_ = null)), - e.minimumUpdatePeriodTimeout_ && - (window.clearTimeout(e.minimumUpdatePeriodTimeout_), - (e.minimumUpdatePeriodTimeout_ = null)); - var t = e.master && e.master.minimumUpdatePeriod; - 0 === t && - (e.media() - ? (t = 1e3 * e.media().targetDuration) - : ((e.createMupOnMedia_ = e.updateMinimumUpdatePeriodTimeout_), - e.one("loadedmetadata", e.createMupOnMedia_))), - "number" != typeof t || t <= 0 - ? t < 0 && - this.logger_( - "found invalid minimumUpdatePeriod of " + - t + - ", not setting a timeout", - ) - : this.createMUPTimeout_(t); - }), - (t.createMUPTimeout_ = function (e) { - var t = this.masterPlaylistLoader_; - t.minimumUpdatePeriodTimeout_ = window.setTimeout(function () { - (t.minimumUpdatePeriodTimeout_ = null), - t.trigger("minimumUpdatePeriod"), - t.createMUPTimeout_(e); - }, e); - }), - (t.refreshXml_ = function () { - var i = this; - this.requestMaster_(function (e, t) { - var r, a; - t && - (i.media_ && - (i.media_ = - i.masterPlaylistLoader_.master.playlists[i.media_.id]), - (i.masterPlaylistLoader_.sidxMapping_ = - ((t = i.masterPlaylistLoader_.master), - (r = i.masterPlaylistLoader_.sidxMapping_), - (a = Pu(t.playlists, r)), - ou(t, function (e, t, i, n) { - e.playlists && - e.playlists.length && - ((e = e.playlists), (a = Sl(a, Pu(e, r)))); - }), - a)), - i.addSidxSegments_(i.media(), i.state, function (e) { - i.refreshMedia_(i.media().id); - })); - }); - }), - (t.refreshMedia_ = function (e) { - var t = this; - if (!e) throw new Error("refreshMedia_ must take a media id"); - this.media_ && this.isMaster_ && this.handleMaster_(); - var i = this.masterPlaylistLoader_.master.playlists, - n = !this.media_ || this.media_ !== i[e]; - n ? (this.media_ = i[e]) : this.trigger("playlistunchanged"), - this.mediaUpdateTimeout || - (function e() { - t.media().endList || - (t.mediaUpdateTimeout = window.setTimeout( - function () { - t.trigger("mediaupdatetimeout"), e(); - }, - mu(t.media(), Boolean(n)), - )); - })(), - this.trigger("loadedplaylist"); - }), - e - ); - })(ar), - El = { - GOAL_BUFFER_LENGTH: 30, - MAX_GOAL_BUFFER_LENGTH: 60, - BACK_BUFFER_LENGTH: 30, - GOAL_BUFFER_LENGTH_RATE: 1, - INITIAL_BANDWIDTH: 4194304, - BANDWIDTH_VARIANCE: 1.2, - BUFFER_LOW_WATER_LINE: 0, - MAX_BUFFER_LOW_WATER_LINE: 30, - EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE: 16, - BUFFER_LOW_WATER_LINE_RATE: 1, - BUFFER_HIGH_WATER_LINE: 30, - }, - x = function (n) { - return function () { - var e = (function (t) { - try { - return URL.createObjectURL( - new Blob([t], { type: "application/javascript" }), - ); - } catch (e) { - var i = new BlobBuilder(); - return i.append(t), URL.createObjectURL(i.getBlob()); - } - })(n), - t = Lu(new Worker(e)); - t.objURL = e; - var i = t.terminate; - return ( - (t.on = t.addEventListener), - (t.off = t.removeEventListener), - (t.terminate = function () { - return URL.revokeObjectURL(e), i.call(this); - }), - t - ); - }; - }, - U = function (e) { - return ( - "var browserWorkerPolyFill = " + - Lu.toString() + - ";\nbrowserWorkerPolyFill(self);\n" + - e - ); - }, - W = function (e) { - return e - .toString() - .replace(/^function.+?{/, "") - .slice(0, -1); - }, - kl = x( - U( - W(function () { - var e = function () { - this.init = function () { - var a = {}; - (this.on = function (e, t) { - a[e] || (a[e] = []), (a[e] = a[e].concat(t)); - }), - (this.off = function (e, t) { - return ( - !!a[e] && - ((t = a[e].indexOf(t)), - (a[e] = a[e].slice()), - a[e].splice(t, 1), - -1 < t) - ); - }), - (this.trigger = function (e) { - var t, - i, - n, - r = a[e]; - if (r) - if (2 === arguments.length) - for (i = r.length, t = 0; t < i; ++t) - r[t].call(this, arguments[1]); - else { - for ( - n = [], t = arguments.length, t = 1; - t < arguments.length; - ++t - ) - n.push(arguments[t]); - for (i = r.length, t = 0; t < i; ++t) r[t].apply(this, n); - } - }), - (this.dispose = function () { - a = {}; - }); - }; - }; - (e.prototype.pipe = function (t) { - return ( - this.on("data", function (e) { - t.push(e); - }), - this.on("done", function (e) { - t.flush(e); - }), - this.on("partialdone", function (e) { - t.partialFlush(e); - }), - this.on("endedtimeline", function (e) { - t.endTimeline(e); - }), - this.on("reset", function (e) { - t.reset(e); - }), - t - ); - }), - (e.prototype.push = function (e) { - this.trigger("data", e); - }), - (e.prototype.flush = function (e) { - this.trigger("done", e); - }), - (e.prototype.partialFlush = function (e) { - this.trigger("partialdone", e); - }), - (e.prototype.endTimeline = function (e) { - this.trigger("endedtimeline", e); - }), - (e.prototype.reset = function (e) { - this.trigger("reset", e); - }); - var u, - t, - i, - n, - r, - a, - s, - o, - l, - c, - d, - h, - p, - f, - m, - g, - y, - v, - _, - b, - T, - S, - w, - E, - k, - C, - I, - x, - A, - P, - L, - D, - O, - M, - R, - N, - U, - B, - F, - j = e, - H = Math.pow(2, 32), - q = { - getUint64: function (e) { - var t = new DataView(e.buffer, e.byteOffset, e.byteLength); - return t.getBigUint64 - ? (e = t.getBigUint64(0)) < Number.MAX_SAFE_INTEGER - ? Number(e) - : e - : t.getUint32(0) * H + t.getUint32(4); - }, - MAX_UINT32: H, - }, - V = q.MAX_UINT32; - !(function () { - if ( - ((T = { - avc1: [], - avcC: [], - btrt: [], - dinf: [], - dref: [], - esds: [], - ftyp: [], - hdlr: [], - mdat: [], - mdhd: [], - mdia: [], - mfhd: [], - minf: [], - moof: [], - moov: [], - mp4a: [], - mvex: [], - mvhd: [], - pasp: [], - sdtp: [], - smhd: [], - stbl: [], - stco: [], - stsc: [], - stsd: [], - stsz: [], - stts: [], - styp: [], - tfdt: [], - tfhd: [], - traf: [], - trak: [], - trun: [], - trex: [], - tkhd: [], - vmhd: [], - }), - "undefined" != typeof Uint8Array) - ) { - for (var e in T) - T.hasOwnProperty(e) && - (T[e] = [ - e.charCodeAt(0), - e.charCodeAt(1), - e.charCodeAt(2), - e.charCodeAt(3), - ]); - (S = new Uint8Array([ - "i".charCodeAt(0), - "s".charCodeAt(0), - "o".charCodeAt(0), - "m".charCodeAt(0), - ])), - (E = new Uint8Array([ - "a".charCodeAt(0), - "v".charCodeAt(0), - "c".charCodeAt(0), - "1".charCodeAt(0), - ])), - (w = new Uint8Array([0, 0, 0, 1])), - (k = new Uint8Array([ - 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, - 108, 101, 114, 0, - ])), - (C = new Uint8Array([ - 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, - 108, 101, 114, 0, - ])), - (I = { video: k, audio: C }), - (P = new Uint8Array([ - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, - 0, 1, - ])), - (A = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])), - (L = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])), - (D = L), - (O = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])), - (M = L), - (x = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])); - } - })(), - (u = function (e) { - for (var t, i = [], n = 0, r = 1; r < arguments.length; r++) - i.push(arguments[r]); - for (r = i.length; r--; ) n += i[r].byteLength; - for ( - t = new Uint8Array(n + 8), - new DataView(t.buffer, t.byteOffset, t.byteLength).setUint32( - 0, - t.byteLength, - ), - t.set(e, 4), - r = 0, - n = 8; - r < i.length; - r++ - ) - t.set(i[r], n), (n += i[r].byteLength); - return t; - }), - (t = function () { - return u(T.dinf, u(T.dref, P)); - }), - (i = function (e) { - return u( - T.esds, - new Uint8Array([ - 0, - 0, - 0, - 0, - 3, - 25, - 0, - 0, - 0, - 4, - 17, - 64, - 21, - 0, - 6, - 0, - 0, - 0, - 218, - 192, - 0, - 0, - 218, - 192, - 5, - 2, - (e.audioobjecttype << 3) | (e.samplingfrequencyindex >>> 1), - (e.samplingfrequencyindex << 7) | (e.channelcount << 3), - 6, - 1, - 2, - ]), - ); - }), - (f = function (e) { - return u(T.hdlr, I[e]); - }), - (p = function (e) { - var t = new Uint8Array([ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 3, - 0, - 1, - 95, - 144, - (e.duration >>> 24) & 255, - (e.duration >>> 16) & 255, - (e.duration >>> 8) & 255, - 255 & e.duration, - 85, - 196, - 0, - 0, - ]); - return ( - e.samplerate && - ((t[12] = (e.samplerate >>> 24) & 255), - (t[13] = (e.samplerate >>> 16) & 255), - (t[14] = (e.samplerate >>> 8) & 255), - (t[15] = 255 & e.samplerate)), - u(T.mdhd, t) - ); - }), - (h = function (e) { - return u(T.mdia, p(e), f(e.type), a(e)); - }), - (r = function (e) { - return u( - T.mfhd, - new Uint8Array([ - 0, - 0, - 0, - 0, - (4278190080 & e) >> 24, - (16711680 & e) >> 16, - (65280 & e) >> 8, - 255 & e, - ]), - ); - }), - (a = function (e) { - return u( - T.minf, - "video" === e.type ? u(T.vmhd, x) : u(T.smhd, A), - t(), - g(e), - ); - }), - (We = function (e, t) { - for (var i = [], n = t.length; n--; ) i[n] = v(t[n]); - return u.apply(null, [T.moof, r(e)].concat(i)); - }), - (s = function (e) { - for (var t = e.length, i = []; t--; ) i[t] = c(e[t]); - return u.apply( - null, - [T.moov, l(4294967295)].concat(i).concat(o(e)), - ); - }), - (o = function (e) { - for (var t = e.length, i = []; t--; ) i[t] = _(e[t]); - return u.apply(null, [T.mvex].concat(i)); - }), - (l = function (e) { - e = new Uint8Array([ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 1, - 95, - 144, - (4278190080 & e) >> 24, - (16711680 & e) >> 16, - (65280 & e) >> 8, - 255 & e, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 255, - 255, - 255, - 255, - ]); - return u(T.mvhd, e); - }), - (m = function (e) { - for ( - var t, - i = e.samples || [], - n = new Uint8Array(4 + i.length), - r = 0; - r < i.length; - r++ - ) - (t = i[r].flags), - (n[r + 4] = - (t.dependsOn << 4) | - (t.isDependedOn << 2) | - t.hasRedundancy); - return u(T.sdtp, n); - }), - (g = function (e) { - return u( - T.stbl, - y(e), - u(T.stts, M), - u(T.stsc, D), - u(T.stsz, O), - u(T.stco, L), - ); - }), - (y = function (e) { - return u( - T.stsd, - new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]), - ("video" === e.type ? R : N)(e), - ); - }), - (R = function (e) { - for ( - var t, - i, - n = e.sps || [], - r = e.pps || [], - a = [], - s = [], - o = 0; - o < n.length; - o++ - ) - a.push((65280 & n[o].byteLength) >>> 8), - a.push(255 & n[o].byteLength), - (a = a.concat(Array.prototype.slice.call(n[o]))); - for (o = 0; o < r.length; o++) - s.push((65280 & r[o].byteLength) >>> 8), - s.push(255 & r[o].byteLength), - (s = s.concat(Array.prototype.slice.call(r[o]))); - return ( - (t = [ - T.avc1, - new Uint8Array([ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - (65280 & e.width) >> 8, - 255 & e.width, - (65280 & e.height) >> 8, - 255 & e.height, - 0, - 72, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 19, - 118, - 105, - 100, - 101, - 111, - 106, - 115, - 45, - 99, - 111, - 110, - 116, - 114, - 105, - 98, - 45, - 104, - 108, - 115, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 17, - 17, - ]), - u( - T.avcC, - new Uint8Array( - [ - 1, - e.profileIdc, - e.profileCompatibility, - e.levelIdc, - 255, - ].concat([n.length], a, [r.length], s), - ), - ), - u( - T.btrt, - new Uint8Array([ - 0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192, - ]), - ), - ]), - e.sarRatio && - ((i = e.sarRatio[0]), - (e = e.sarRatio[1]), - t.push( - u( - T.pasp, - new Uint8Array([ - (4278190080 & i) >> 24, - (16711680 & i) >> 16, - (65280 & i) >> 8, - 255 & i, - (4278190080 & e) >> 24, - (16711680 & e) >> 16, - (65280 & e) >> 8, - 255 & e, - ]), - ), - )), - u.apply(null, t) - ); - }), - (N = function (e) { - return u( - T.mp4a, - new Uint8Array([ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - (65280 & e.channelcount) >> 8, - 255 & e.channelcount, - (65280 & e.samplesize) >> 8, - 255 & e.samplesize, - 0, - 0, - 0, - 0, - (65280 & e.samplerate) >> 8, - 255 & e.samplerate, - 0, - 0, - ]), - i(e), - ); - }), - (d = function (e) { - e = new Uint8Array([ - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - (4278190080 & e.id) >> 24, - (16711680 & e.id) >> 16, - (65280 & e.id) >> 8, - 255 & e.id, - 0, - 0, - 0, - 0, - (4278190080 & e.duration) >> 24, - (16711680 & e.duration) >> 16, - (65280 & e.duration) >> 8, - 255 & e.duration, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 64, - 0, - 0, - 0, - (65280 & e.width) >> 8, - 255 & e.width, - 0, - 0, - (65280 & e.height) >> 8, - 255 & e.height, - 0, - 0, - ]); - return u(T.tkhd, e); - }), - (v = function (e) { - var t, - i = u( - T.tfhd, - new Uint8Array([ - 0, - 0, - 0, - 58, - (4278190080 & e.id) >> 24, - (16711680 & e.id) >> 16, - (65280 & e.id) >> 8, - 255 & e.id, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ]), - ), - n = Math.floor(e.baseMediaDecodeTime / V), - r = Math.floor(e.baseMediaDecodeTime % V), - n = u( - T.tfdt, - new Uint8Array([ - 1, - 0, - 0, - 0, - (n >>> 24) & 255, - (n >>> 16) & 255, - (n >>> 8) & 255, - 255 & n, - (r >>> 24) & 255, - (r >>> 16) & 255, - (r >>> 8) & 255, - 255 & r, - ]), - ); - return "audio" === e.type - ? ((t = b(e, 92)), u(T.traf, i, n, t)) - : ((r = m(e)), - (t = b(e, r.length + 92)), - u(T.traf, i, n, t, r)); - }), - (c = function (e) { - return ( - (e.duration = e.duration || 4294967295), u(T.trak, d(e), h(e)) - ); - }), - (_ = function (e) { - var t = new Uint8Array([ - 0, - 0, - 0, - 0, - (4278190080 & e.id) >> 24, - (16711680 & e.id) >> 16, - (65280 & e.id) >> 8, - 255 & e.id, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - ]); - return "video" !== e.type && (t[t.length - 1] = 0), u(T.trex, t); - }), - (U = function (e, t) { - var i = 0, - n = 0, - r = 0, - a = 0; - return ( - e.length && - (void 0 !== e[0].duration && (i = 1), - void 0 !== e[0].size && (n = 2), - void 0 !== e[0].flags && (r = 4), - void 0 !== e[0].compositionTimeOffset && (a = 8)), - [ - 0, - 0, - i | n | r | a, - 1, - (4278190080 & e.length) >>> 24, - (16711680 & e.length) >>> 16, - (65280 & e.length) >>> 8, - 255 & e.length, - (4278190080 & t) >>> 24, - (16711680 & t) >>> 16, - (65280 & t) >>> 8, - 255 & t, - ] - ); - }), - (B = function (e, t) { - var i, - n, - r, - a, - s = e.samples || []; - for ( - t += 20 + 16 * s.length, - t = U(s, t), - (n = new Uint8Array(t.length + 16 * s.length)).set(t), - i = t.length, - a = 0; - a < s.length; - a++ - ) - (r = s[a]), - (n[i++] = (4278190080 & r.duration) >>> 24), - (n[i++] = (16711680 & r.duration) >>> 16), - (n[i++] = (65280 & r.duration) >>> 8), - (n[i++] = 255 & r.duration), - (n[i++] = (4278190080 & r.size) >>> 24), - (n[i++] = (16711680 & r.size) >>> 16), - (n[i++] = (65280 & r.size) >>> 8), - (n[i++] = 255 & r.size), - (n[i++] = (r.flags.isLeading << 2) | r.flags.dependsOn), - (n[i++] = - (r.flags.isDependedOn << 6) | - (r.flags.hasRedundancy << 4) | - (r.flags.paddingValue << 1) | - r.flags.isNonSyncSample), - (n[i++] = 61440 & r.flags.degradationPriority), - (n[i++] = 15 & r.flags.degradationPriority), - (n[i++] = (4278190080 & r.compositionTimeOffset) >>> 24), - (n[i++] = (16711680 & r.compositionTimeOffset) >>> 16), - (n[i++] = (65280 & r.compositionTimeOffset) >>> 8), - (n[i++] = 255 & r.compositionTimeOffset); - return u(T.trun, n); - }), - (F = function (e, t) { - var i, - n, - r, - a, - s = e.samples || []; - for ( - t += 20 + 8 * s.length, - t = U(s, t), - (i = new Uint8Array(t.length + 8 * s.length)).set(t), - n = t.length, - a = 0; - a < s.length; - a++ - ) - (r = s[a]), - (i[n++] = (4278190080 & r.duration) >>> 24), - (i[n++] = (16711680 & r.duration) >>> 16), - (i[n++] = (65280 & r.duration) >>> 8), - (i[n++] = 255 & r.duration), - (i[n++] = (4278190080 & r.size) >>> 24), - (i[n++] = (16711680 & r.size) >>> 16), - (i[n++] = (65280 & r.size) >>> 8), - (i[n++] = 255 & r.size); - return u(T.trun, i); - }), - (b = function (e, t) { - return ("audio" === e.type ? F : B)(e, t); - }); - n = function () { - return u(T.ftyp, S, w, S, E); - }; - function W(e, t) { - var i = { - size: 0, - flags: { - isLeading: 0, - dependsOn: 1, - isDependedOn: 0, - hasRedundancy: 0, - degradationPriority: 0, - isNonSyncSample: 1, - }, - }; - return ( - (i.dataOffset = t), - (i.compositionTimeOffset = e.pts - e.dts), - (i.duration = e.duration), - (i.size = 4 * e.length), - (i.size += e.byteLength), - e.keyFrame && - ((i.flags.dependsOn = 2), (i.flags.isNonSyncSample = 0)), - i - ); - } - function G(e) { - for (var t = []; e--; ) t.push(0); - return t; - } - function z() { - var e, i; - return ( - X || - ((e = { - 96e3: [ie, [227, 64], G(154), [56]], - 88200: [ie, [231], G(170), [56]], - 64e3: [ie, [248, 192], G(240), [56]], - 48e3: [ie, [255, 192], G(268), [55, 148, 128], G(54), [112]], - 44100: [ie, [255, 192], G(268), [55, 163, 128], G(84), [112]], - 32e3: [ie, [255, 192], G(268), [55, 234], G(226), [112]], - 24e3: [ - ie, - [255, 192], - G(268), - [55, 255, 128], - G(268), - [111, 112], - G(126), - [224], - ], - 16e3: [ - ie, - [255, 192], - G(268), - [55, 255, 128], - G(268), - [111, 255], - G(269), - [223, 108], - G(195), - [1, 192], - ], - 12e3: [ - ne, - G(268), - [3, 127, 248], - G(268), - [6, 255, 240], - G(268), - [13, 255, 224], - G(268), - [27, 253, 128], - G(259), - [56], - ], - 11025: [ - ne, - G(268), - [3, 127, 248], - G(268), - [6, 255, 240], - G(268), - [13, 255, 224], - G(268), - [27, 255, 192], - G(268), - [55, 175, 128], - G(108), - [112], - ], - 8e3: [ne, G(268), [3, 121, 16], G(47), [7]], - }), - (i = e), - (X = Object.keys(i).reduce(function (e, t) { - return ( - (e[t] = new Uint8Array( - i[t].reduce(function (e, t) { - return e.concat(t); - }, []), - )), - e - ); - }, {}))), - X - ); - } - var X, - K = function (e) { - return u(T.mdat, e); - }, - Y = We, - Q = function (e) { - var t = n(), - i = s(e), - e = new Uint8Array(t.byteLength + i.byteLength); - return e.set(t), e.set(i, t.byteLength), e; - }, - $ = function (e) { - var t, - i, - n = [], - r = []; - for ( - r.byteLength = 0, - r.nalCount = 0, - r.duration = 0, - t = n.byteLength = 0; - t < e.length; - t++ - ) - "access_unit_delimiter_rbsp" === (i = e[t]).nalUnitType - ? (n.length && - ((n.duration = i.dts - n.dts), - (r.byteLength += n.byteLength), - (r.nalCount += n.length), - (r.duration += n.duration), - r.push(n)), - ((n = [i]).byteLength = i.data.byteLength), - (n.pts = i.pts), - (n.dts = i.dts)) - : ("slice_layer_without_partitioning_rbsp_idr" === - i.nalUnitType && (n.keyFrame = !0), - (n.duration = i.dts - n.dts), - (n.byteLength += i.data.byteLength), - n.push(i)); - return ( - r.length && - (!n.duration || n.duration <= 0) && - (n.duration = r[r.length - 1].duration), - (r.byteLength += n.byteLength), - (r.nalCount += n.length), - (r.duration += n.duration), - r.push(n), - r - ); - }, - J = function (e) { - var t, - i, - n = [], - r = []; - for ( - n.byteLength = 0, - n.nalCount = 0, - n.duration = 0, - n.pts = e[0].pts, - n.dts = e[0].dts, - r.byteLength = 0, - r.nalCount = 0, - r.duration = 0, - r.pts = e[0].pts, - r.dts = e[0].dts, - t = 0; - t < e.length; - t++ - ) - (i = e[t]).keyFrame - ? (n.length && - (r.push(n), - (r.byteLength += n.byteLength), - (r.nalCount += n.nalCount), - (r.duration += n.duration)), - ((n = [i]).nalCount = i.length), - (n.byteLength = i.byteLength), - (n.pts = i.pts), - (n.dts = i.dts), - (n.duration = i.duration)) - : ((n.duration += i.duration), - (n.nalCount += i.length), - (n.byteLength += i.byteLength), - n.push(i)); - return ( - r.length && - n.duration <= 0 && - (n.duration = r[r.length - 1].duration), - (r.byteLength += n.byteLength), - (r.nalCount += n.nalCount), - (r.duration += n.duration), - r.push(n), - r - ); - }, - Z = function (e) { - var t; - return ( - !e[0][0].keyFrame && - 1 < e.length && - ((t = e.shift()), - (e.byteLength -= t.byteLength), - (e.nalCount -= t.nalCount), - (e[0][0].dts = t.dts), - (e[0][0].pts = t.pts), - (e[0][0].duration += t.duration)), - e - ); - }, - ee = function (e, t) { - for (var i, n, r, a = t || 0, s = [], o = 0; o < e.length; o++) - for (n = e[o], i = 0; i < n.length; i++) - (r = n[i]), (a += (r = W(r, a)).size), s.push(r); - return s; - }, - te = function (e) { - for ( - var t, - i, - n, - r, - a, - s = 0, - o = e.byteLength, - u = e.nalCount, - l = new Uint8Array(o + 4 * u), - c = new DataView(l.buffer), - d = 0; - d < e.length; - d++ - ) - for (n = e[d], t = 0; t < n.length; t++) - for (r = n[t], i = 0; i < r.length; i++) - (a = r[i]), - c.setUint32(s, a.data.byteLength), - l.set(a.data, (s += 4)), - (s += a.data.byteLength); - return l; - }, - ie = [33, 16, 5, 32, 164, 27], - ne = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252], - re = function (e) { - return 9e4 * e; - }, - ae = function (e, t) { - return e * t; - }, - se = function (e) { - return e / 9e4; - }, - oe = function (e, t) { - return e / t; - }, - ue = 9e4, - le = re, - ce = se, - de = function (e, t) { - return re(oe(e, t)); - }, - he = function (e, t) { - return ae(se(e), t); - }, - pe = function (e, t, i) { - return se(i ? e : e - t); - }, - fe = function (e, t, i, n) { - var r, - a, - s, - o, - u, - l, - c = 0, - d = 0; - if ( - t.length && - ((r = de(e.baseMediaDecodeTime, e.samplerate)), - (a = Math.ceil(ue / (e.samplerate / 1024))), - i && - n && - ((s = r - Math.max(i, n)), (d = (c = Math.floor(s / a)) * a)), - !(c < 1 || ue / 2 < d)) - ) { - for ( - o = (o = z()[e.samplerate]) || t[0].data, u = 0; - u < c; - u++ - ) - (l = t[0]), - t.splice(0, 0, { data: o, dts: l.dts - a, pts: l.pts - a }); - return ( - (e.baseMediaDecodeTime -= Math.floor(he(d, e.samplerate))), d - ); - } - }, - me = function (e, t, i) { - return t.minSegmentDts >= i - ? e - : ((t.minSegmentDts = 1 / 0), - e.filter(function (e) { - return ( - e.dts >= i && - ((t.minSegmentDts = Math.min(t.minSegmentDts, e.dts)), - (t.minSegmentPts = t.minSegmentDts), - !0) - ); - })); - }, - ge = function (e) { - for (var t, i = [], n = 0; n < e.length; n++) - (t = e[n]), i.push({ size: t.data.byteLength, duration: 1024 }); - return i; - }, - ye = function (e) { - for ( - var t, - i = 0, - n = new Uint8Array( - (function (e) { - for (var t = 0, i = 0; i < e.length; i++) - t += e[i].data.byteLength; - return t; - })(e), - ), - r = 0; - r < e.length; - r++ - ) - (t = e[r]), n.set(t.data, i), (i += t.data.byteLength); - return n; - }, - ve = ue, - _e = function (e) { - delete e.minSegmentDts, - delete e.maxSegmentDts, - delete e.minSegmentPts, - delete e.maxSegmentPts; - }, - be = function (e, t) { - var i = e.minSegmentDts; - return ( - t || (i -= e.timelineStartInfo.dts), - (t = e.timelineStartInfo.baseMediaDecodeTime), - (t += i), - (t = Math.max(0, t)), - "audio" === e.type && - ((t *= e.samplerate / ve), (t = Math.floor(t))), - t - ); - }, - Te = function (e, t) { - "number" == typeof t.pts && - (void 0 === e.timelineStartInfo.pts && - (e.timelineStartInfo.pts = t.pts), - void 0 === e.minSegmentPts - ? (e.minSegmentPts = t.pts) - : (e.minSegmentPts = Math.min(e.minSegmentPts, t.pts)), - void 0 === e.maxSegmentPts - ? (e.maxSegmentPts = t.pts) - : (e.maxSegmentPts = Math.max(e.maxSegmentPts, t.pts))), - "number" == typeof t.dts && - (void 0 === e.timelineStartInfo.dts && - (e.timelineStartInfo.dts = t.dts), - void 0 === e.minSegmentDts - ? (e.minSegmentDts = t.dts) - : (e.minSegmentDts = Math.min(e.minSegmentDts, t.dts)), - void 0 === e.maxSegmentDts - ? (e.maxSegmentDts = t.dts) - : (e.maxSegmentDts = Math.max(e.maxSegmentDts, t.dts))); - }, - Se = function (e) { - for ( - var t = 0, - i = { payloadType: -1, payloadSize: 0 }, - n = 0, - r = 0; - t < e.byteLength && 128 !== e[t]; - - ) { - for (; 255 === e[t]; ) (n += 255), t++; - for (n += e[t++]; 255 === e[t]; ) (r += 255), t++; - if (((r += e[t++]), !i.payload && 4 === n)) { - if ( - "GA94" === - String.fromCharCode(e[t + 3], e[t + 4], e[t + 5], e[t + 6]) - ) { - (i.payloadType = n), - (i.payloadSize = r), - (i.payload = e.subarray(t, t + r)); - break; - } - i.payload = void 0; - } - (t += r), (r = n = 0); - } - return i; - }, - we = function (e) { - return 181 !== e.payload[0] || - 49 != ((e.payload[1] << 8) | e.payload[2]) || - "GA94" !== - String.fromCharCode( - e.payload[3], - e.payload[4], - e.payload[5], - e.payload[6], - ) || - 3 !== e.payload[7] - ? null - : e.payload.subarray(8, e.payload.length - 1); - }, - Ee = function (e, t) { - var i, - n, - r, - a, - s = []; - if (!(64 & t[0])) return s; - for (n = 31 & t[0], i = 0; i < n; i++) - (a = { type: 3 & t[2 + (r = 3 * i)], pts: e }), - 4 & t[2 + r] && - ((a.ccData = (t[3 + r] << 8) | t[4 + r]), s.push(a)); - return s; - }, - ke = function (e) { - for (var t = e.byteLength, i = [], n = 1; n < t - 2; ) - 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] - ? (i.push(n + 2), (n += 2)) - : n++; - if (0 === i.length) return e; - for ( - var r = t - i.length, a = new Uint8Array(r), s = 0, n = 0; - n < r; - s++, n++ - ) - s === i[0] && (s++, i.shift()), (a[n] = e[s]); - return a; - }, - Ce = 4, - Ie = function e(t) { - (t = t || {}), - e.prototype.init.call(this), - (this.parse708captions_ = - "boolean" != typeof t.parse708captions || t.parse708captions), - (this.captionPackets_ = []), - (this.ccStreams_ = [ - new Ue(0, 0), - new Ue(0, 1), - new Ue(1, 0), - new Ue(1, 1), - ]), - this.parse708captions_ && - (this.cc708Stream_ = new De({ - captionServices: t.captionServices, - })), - this.reset(), - this.ccStreams_.forEach(function (e) { - e.on("data", this.trigger.bind(this, "data")), - e.on("partialdone", this.trigger.bind(this, "partialdone")), - e.on("done", this.trigger.bind(this, "done")); - }, this), - this.parse708captions_ && - (this.cc708Stream_.on( - "data", - this.trigger.bind(this, "data"), - ), - this.cc708Stream_.on( - "partialdone", - this.trigger.bind(this, "partialdone"), - ), - this.cc708Stream_.on( - "done", - this.trigger.bind(this, "done"), - )); - }; - ((Ie.prototype = new j()).push = function (e) { - var t, i; - if ( - "sei_rbsp" === e.nalUnitType && - (t = Se(e.escapedRBSP)).payload && - t.payloadType === Ce && - (i = we(t)) - ) - if (e.dts < this.latestDts_) this.ignoreNextEqualDts_ = !0; - else { - if (e.dts === this.latestDts_ && this.ignoreNextEqualDts_) - return ( - this.numSameDts_--, - void (this.numSameDts_ || (this.ignoreNextEqualDts_ = !1)) - ); - (i = Ee(e.pts, i)), - (this.captionPackets_ = this.captionPackets_.concat(i)), - this.latestDts_ !== e.dts && (this.numSameDts_ = 0), - this.numSameDts_++, - (this.latestDts_ = e.dts); - } - }), - (Ie.prototype.flushCCStreams = function (t) { - this.ccStreams_.forEach(function (e) { - return "flush" === t ? e.flush() : e.partialFlush(); - }, this); - }), - (Ie.prototype.flushStream = function (e) { - this.captionPackets_.length && - (this.captionPackets_.forEach(function (e, t) { - e.presortIndex = t; - }), - this.captionPackets_.sort(function (e, t) { - return e.pts === t.pts - ? e.presortIndex - t.presortIndex - : e.pts - t.pts; - }), - this.captionPackets_.forEach(function (e) { - e.type < 2 - ? this.dispatchCea608Packet(e) - : this.dispatchCea708Packet(e); - }, this), - (this.captionPackets_.length = 0)), - this.flushCCStreams(e); - }), - (Ie.prototype.flush = function () { - return this.flushStream("flush"); - }), - (Ie.prototype.partialFlush = function () { - return this.flushStream("partialFlush"); - }), - (Ie.prototype.reset = function () { - (this.latestDts_ = null), - (this.ignoreNextEqualDts_ = !1), - (this.numSameDts_ = 0), - (this.activeCea608Channel_ = [null, null]), - this.ccStreams_.forEach(function (e) { - e.reset(); - }); - }), - (Ie.prototype.dispatchCea608Packet = function (e) { - this.setsTextOrXDSActive(e) - ? (this.activeCea608Channel_[e.type] = null) - : this.setsChannel1Active(e) - ? (this.activeCea608Channel_[e.type] = 0) - : this.setsChannel2Active(e) && - (this.activeCea608Channel_[e.type] = 1), - null !== this.activeCea608Channel_[e.type] && - this.ccStreams_[ - (e.type << 1) + this.activeCea608Channel_[e.type] - ].push(e); - }), - (Ie.prototype.setsChannel1Active = function (e) { - return 4096 == (30720 & e.ccData); - }), - (Ie.prototype.setsChannel2Active = function (e) { - return 6144 == (30720 & e.ccData); - }), - (Ie.prototype.setsTextOrXDSActive = function (e) { - return ( - 256 == (28928 & e.ccData) || - 4138 == (30974 & e.ccData) || - 6186 == (30974 & e.ccData) - ); - }), - (Ie.prototype.dispatchCea708Packet = function (e) { - this.parse708captions_ && this.cc708Stream_.push(e); - }); - function xe(e) { - return (32 <= e && e <= 127) || (160 <= e && e <= 255); - } - function Ae(e) { - (this.windowNum = e), this.reset(); - } - var Pe = { - 127: 9834, - 4128: 32, - 4129: 160, - 4133: 8230, - 4138: 352, - 4140: 338, - 4144: 9608, - 4145: 8216, - 4146: 8217, - 4147: 8220, - 4148: 8221, - 4149: 8226, - 4153: 8482, - 4154: 353, - 4156: 339, - 4157: 8480, - 4159: 376, - 4214: 8539, - 4215: 8540, - 4216: 8541, - 4217: 8542, - 4218: 9168, - 4219: 9124, - 4220: 9123, - 4221: 9135, - 4222: 9126, - 4223: 9121, - 4256: 12600, - }; - (Ae.prototype.reset = function () { - this.clearText(), - (this.pendingNewLine = !1), - (this.winAttr = {}), - (this.penAttr = {}), - (this.penLoc = {}), - (this.penColor = {}), - (this.visible = 0), - (this.rowLock = 0), - (this.columnLock = 0), - (this.priority = 0), - (this.relativePositioning = 0), - (this.anchorVertical = 0), - (this.anchorHorizontal = 0), - (this.anchorPoint = 0), - (this.rowCount = 1), - (this.virtualRowCount = this.rowCount + 1), - (this.columnCount = 41), - (this.windowStyle = 0), - (this.penStyle = 0); - }), - (Ae.prototype.getText = function () { - return this.rows.join("\n"); - }), - (Ae.prototype.clearText = function () { - (this.rows = [""]), (this.rowIdx = 0); - }), - (Ae.prototype.newLine = function (e) { - for ( - this.rows.length >= this.virtualRowCount && - "function" == typeof this.beforeRowOverflow && - this.beforeRowOverflow(e), - 0 < this.rows.length && (this.rows.push(""), this.rowIdx++); - this.rows.length > this.virtualRowCount; - - ) - this.rows.shift(), this.rowIdx--; - }), - (Ae.prototype.isEmpty = function () { - return ( - 0 === this.rows.length || - (1 === this.rows.length && "" === this.rows[0]) - ); - }), - (Ae.prototype.addText = function (e) { - this.rows[this.rowIdx] += e; - }), - (Ae.prototype.backspace = function () { - var e; - this.isEmpty() || - ((e = this.rows[this.rowIdx]), - (this.rows[this.rowIdx] = e.substr(0, e.length - 1))); - }); - function Le(e, t, i) { - (this.serviceNum = e), - (this.text = ""), - (this.currentWindow = new Ae(-1)), - (this.windows = []), - (this.stream = i), - "string" == typeof t && this.createTextDecoder(t); - } - (Le.prototype.init = function (e, t) { - this.startPts = e; - for (var i = 0; i < 8; i++) - (this.windows[i] = new Ae(i)), - "function" == typeof t && - (this.windows[i].beforeRowOverflow = t); - }), - (Le.prototype.setCurrentWindow = function (e) { - this.currentWindow = this.windows[e]; - }), - (Le.prototype.createTextDecoder = function (t) { - if ("undefined" == typeof TextDecoder) - this.stream.trigger("log", { - level: "warn", - message: - "The `encoding` option is unsupported without TextDecoder support", - }); - else - try { - this.textDecoder_ = new TextDecoder(t); - } catch (e) { - this.stream.trigger("log", { - level: "warn", - message: - "TextDecoder could not be created with " + - t + - " encoding. " + - e, - }); - } - }); - var De = function e(t) { - (t = t || {}), e.prototype.init.call(this); - var i, - n = this, - r = t.captionServices || {}, - a = {}; - Object.keys(r).forEach(function (e) { - (i = r[e]), /^SERVICE/.test(e) && (a[e] = i.encoding); - }), - (this.serviceEncodings = a), - (this.current708Packet = null), - (this.services = {}), - (this.push = function (e) { - (3 === e.type || null === n.current708Packet) && - n.new708Packet(), - n.add708Bytes(e); - }); - }; - (De.prototype = new j()), - (De.prototype.new708Packet = function () { - null !== this.current708Packet && this.push708Packet(), - (this.current708Packet = { data: [], ptsVals: [] }); - }), - (De.prototype.add708Bytes = function (e) { - var t = e.ccData, - i = t >>> 8, - t = 255 & t; - this.current708Packet.ptsVals.push(e.pts), - this.current708Packet.data.push(i), - this.current708Packet.data.push(t); - }), - (De.prototype.push708Packet = function () { - var e, - t = this.current708Packet, - i = t.data, - n = null, - r = 0, - a = i[r++]; - for (t.seq = a >> 6, t.sizeCode = 63 & a; r < i.length; r++) - (e = 31 & (a = i[r++])), - 7 === (n = a >> 5) && 0 < e && (n = i[r++]), - this.pushServiceBlock(n, r, e), - 0 < e && (r += e - 1); - }), - (De.prototype.pushServiceBlock = function (e, t, i) { - for ( - var n, - r = t, - a = this.current708Packet.data, - s = (s = this.services[e]) || this.initService(e, r); - r < t + i && r < a.length; - r++ - ) - (n = a[r]), - xe(n) - ? (r = this.handleText(r, s)) - : 24 === n - ? (r = this.multiByteCharacter(r, s)) - : 16 === n - ? (r = this.extendedCommands(r, s)) - : 128 <= n && n <= 135 - ? (r = this.setCurrentWindow(r, s)) - : 152 <= n && n <= 159 - ? (r = this.defineWindow(r, s)) - : 136 === n - ? (r = this.clearWindows(r, s)) - : 140 === n - ? (r = this.deleteWindows(r, s)) - : 137 === n - ? (r = this.displayWindows(r, s)) - : 138 === n - ? (r = this.hideWindows(r, s)) - : 139 === n - ? (r = this.toggleWindows(r, s)) - : 151 === n - ? (r = this.setWindowAttributes(r, s)) - : 144 === n - ? (r = this.setPenAttributes(r, s)) - : 145 === n - ? (r = this.setPenColor(r, s)) - : 146 === n - ? (r = this.setPenLocation(r, s)) - : 143 === n - ? (s = this.reset(r, s)) - : 8 === n - ? s.currentWindow.backspace() - : 12 === n - ? s.currentWindow.clearText() - : 13 === n - ? (s.currentWindow.pendingNewLine = - !0) - : 14 === n - ? s.currentWindow.clearText() - : 141 === n && r++; - }), - (De.prototype.extendedCommands = function (e, t) { - var i = this.current708Packet.data[++e]; - return (e = xe(i) - ? this.handleText(e, t, { isExtended: !0 }) - : e); - }), - (De.prototype.getPts = function (e) { - return this.current708Packet.ptsVals[Math.floor(e / 2)]; - }), - (De.prototype.initService = function (t, e) { - var i, - n = "SERVICE" + t, - r = this; - return ( - n in this.serviceEncodings && (i = this.serviceEncodings[n]), - (this.services[t] = new Le(t, i, r)), - this.services[t].init(this.getPts(e), function (e) { - r.flushDisplayed(e, r.services[t]); - }), - this.services[t] - ); - }), - (De.prototype.handleText = function (e, t, i) { - var n, - r = i && i.isExtended, - a = i && i.isMultiByte, - s = this.current708Packet.data, - o = r ? 4096 : 0, - u = s[e], - i = s[e + 1], - s = t.currentWindow, - l = - t.textDecoder_ && !r - ? (a ? ((n = [u, i]), e++) : (n = [u]), - t.textDecoder_.decode(new Uint8Array(n))) - : ((l = Pe[(u = o | u)] || u), - 4096 & u && u === l ? "" : String.fromCharCode(l)); - return ( - s.pendingNewLine && !s.isEmpty() && s.newLine(this.getPts(e)), - (s.pendingNewLine = !1), - s.addText(l), - e - ); - }), - (De.prototype.multiByteCharacter = function (e, t) { - var i = this.current708Packet.data, - n = i[e + 1], - i = i[e + 2]; - return (e = - xe(n) && xe(i) - ? this.handleText(++e, t, { isMultiByte: !0 }) - : e); - }), - (De.prototype.setCurrentWindow = function (e, t) { - var i = this.current708Packet.data[e]; - return t.setCurrentWindow(7 & i), e; - }), - (De.prototype.defineWindow = function (e, t) { - var i = this.current708Packet.data, - n = i[e]; - t.setCurrentWindow(7 & n); - (t = t.currentWindow), (n = i[++e]); - return ( - (t.visible = (32 & n) >> 5), - (t.rowLock = (16 & n) >> 4), - (t.columnLock = (8 & n) >> 3), - (t.priority = 7 & n), - (n = i[++e]), - (t.relativePositioning = (128 & n) >> 7), - (t.anchorVertical = 127 & n), - (n = i[++e]), - (t.anchorHorizontal = n), - (n = i[++e]), - (t.anchorPoint = (240 & n) >> 4), - (t.rowCount = 15 & n), - (n = i[++e]), - (t.columnCount = 63 & n), - (n = i[++e]), - (t.windowStyle = (56 & n) >> 3), - (t.penStyle = 7 & n), - (t.virtualRowCount = t.rowCount + 1), - e - ); - }), - (De.prototype.setWindowAttributes = function (e, t) { - var i = this.current708Packet.data, - n = i[e], - t = t.currentWindow.winAttr, - n = i[++e]; - return ( - (t.fillOpacity = (192 & n) >> 6), - (t.fillRed = (48 & n) >> 4), - (t.fillGreen = (12 & n) >> 2), - (t.fillBlue = 3 & n), - (n = i[++e]), - (t.borderType = (192 & n) >> 6), - (t.borderRed = (48 & n) >> 4), - (t.borderGreen = (12 & n) >> 2), - (t.borderBlue = 3 & n), - (n = i[++e]), - (t.borderType += (128 & n) >> 5), - (t.wordWrap = (64 & n) >> 6), - (t.printDirection = (48 & n) >> 4), - (t.scrollDirection = (12 & n) >> 2), - (t.justify = 3 & n), - (n = i[++e]), - (t.effectSpeed = (240 & n) >> 4), - (t.effectDirection = (12 & n) >> 2), - (t.displayEffect = 3 & n), - e - ); - }), - (De.prototype.flushDisplayed = function (e, t) { - for (var i = [], n = 0; n < 8; n++) - t.windows[n].visible && - !t.windows[n].isEmpty() && - i.push(t.windows[n].getText()); - (t.endPts = e), - (t.text = i.join("\n\n")), - this.pushCaption(t), - (t.startPts = e); - }), - (De.prototype.pushCaption = function (e) { - "" !== e.text && - (this.trigger("data", { - startPts: e.startPts, - endPts: e.endPts, - text: e.text, - stream: "cc708_" + e.serviceNum, - }), - (e.text = ""), - (e.startPts = e.endPts)); - }), - (De.prototype.displayWindows = function (e, t) { - var i = this.current708Packet.data[++e], - n = this.getPts(e); - this.flushDisplayed(n, t); - for (var r = 0; r < 8; r++) - i & (1 << r) && (t.windows[r].visible = 1); - return e; - }), - (De.prototype.hideWindows = function (e, t) { - var i = this.current708Packet.data[++e], - n = this.getPts(e); - this.flushDisplayed(n, t); - for (var r = 0; r < 8; r++) - i & (1 << r) && (t.windows[r].visible = 0); - return e; - }), - (De.prototype.toggleWindows = function (e, t) { - var i = this.current708Packet.data[++e], - n = this.getPts(e); - this.flushDisplayed(n, t); - for (var r = 0; r < 8; r++) - i & (1 << r) && (t.windows[r].visible ^= 1); - return e; - }), - (De.prototype.clearWindows = function (e, t) { - var i = this.current708Packet.data[++e], - n = this.getPts(e); - this.flushDisplayed(n, t); - for (var r = 0; r < 8; r++) - i & (1 << r) && t.windows[r].clearText(); - return e; - }), - (De.prototype.deleteWindows = function (e, t) { - var i = this.current708Packet.data[++e], - n = this.getPts(e); - this.flushDisplayed(n, t); - for (var r = 0; r < 8; r++) i & (1 << r) && t.windows[r].reset(); - return e; - }), - (De.prototype.setPenAttributes = function (e, t) { - var i = this.current708Packet.data, - n = i[e], - t = t.currentWindow.penAttr, - n = i[++e]; - return ( - (t.textTag = (240 & n) >> 4), - (t.offset = (12 & n) >> 2), - (t.penSize = 3 & n), - (n = i[++e]), - (t.italics = (128 & n) >> 7), - (t.underline = (64 & n) >> 6), - (t.edgeType = (56 & n) >> 3), - (t.fontStyle = 7 & n), - e - ); - }), - (De.prototype.setPenColor = function (e, t) { - var i = this.current708Packet.data, - n = i[e], - t = t.currentWindow.penColor, - n = i[++e]; - return ( - (t.fgOpacity = (192 & n) >> 6), - (t.fgRed = (48 & n) >> 4), - (t.fgGreen = (12 & n) >> 2), - (t.fgBlue = 3 & n), - (n = i[++e]), - (t.bgOpacity = (192 & n) >> 6), - (t.bgRed = (48 & n) >> 4), - (t.bgGreen = (12 & n) >> 2), - (t.bgBlue = 3 & n), - (n = i[++e]), - (t.edgeRed = (48 & n) >> 4), - (t.edgeGreen = (12 & n) >> 2), - (t.edgeBlue = 3 & n), - e - ); - }), - (De.prototype.setPenLocation = function (e, t) { - var i = this.current708Packet.data, - n = i[e], - r = t.currentWindow.penLoc; - return ( - (t.currentWindow.pendingNewLine = !0), - (n = i[++e]), - (r.row = 15 & n), - (n = i[++e]), - (r.column = 63 & n), - e - ); - }), - (De.prototype.reset = function (e, t) { - var i = this.getPts(e); - return ( - this.flushDisplayed(i, t), this.initService(t.serviceNum, e) - ); - }); - function Oe(e) { - return null === e ? "" : ((e = Re[e] || e), String.fromCharCode(e)); - } - function Me() { - for (var e = [], t = 15; t--; ) e.push(""); - return e; - } - var Re = { - 42: 225, - 92: 233, - 94: 237, - 95: 243, - 96: 250, - 123: 231, - 124: 247, - 125: 209, - 126: 241, - 127: 9608, - 304: 174, - 305: 176, - 306: 189, - 307: 191, - 308: 8482, - 309: 162, - 310: 163, - 311: 9834, - 312: 224, - 313: 160, - 314: 232, - 315: 226, - 316: 234, - 317: 238, - 318: 244, - 319: 251, - 544: 193, - 545: 201, - 546: 211, - 547: 218, - 548: 220, - 549: 252, - 550: 8216, - 551: 161, - 552: 42, - 553: 39, - 554: 8212, - 555: 169, - 556: 8480, - 557: 8226, - 558: 8220, - 559: 8221, - 560: 192, - 561: 194, - 562: 199, - 563: 200, - 564: 202, - 565: 203, - 566: 235, - 567: 206, - 568: 207, - 569: 239, - 570: 212, - 571: 217, - 572: 249, - 573: 219, - 574: 171, - 575: 187, - 800: 195, - 801: 227, - 802: 205, - 803: 204, - 804: 236, - 805: 210, - 806: 242, - 807: 213, - 808: 245, - 809: 123, - 810: 125, - 811: 92, - 812: 94, - 813: 95, - 814: 124, - 815: 126, - 816: 196, - 817: 228, - 818: 214, - 819: 246, - 820: 223, - 821: 165, - 822: 164, - 823: 9474, - 824: 197, - 825: 229, - 826: 216, - 827: 248, - 828: 9484, - 829: 9488, - 830: 9492, - 831: 9496, - }, - Ne = [ - 4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, - 4864, 4896, 5120, 5152, - ], - Ue = function e(t, i) { - e.prototype.init.call(this), - (this.field_ = t || 0), - (this.dataChannel_ = i || 0), - (this.name_ = - "CC" + (1 + ((this.field_ << 1) | this.dataChannel_))), - this.setConstants(), - this.reset(), - (this.push = function (e) { - var t, - i, - n, - r, - a = 32639 & e.ccData; - a !== this.lastControlCode_ - ? (4096 == (61440 & a) - ? (this.lastControlCode_ = a) - : a !== this.PADDING_ && (this.lastControlCode_ = null), - (t = a >>> 8), - (i = 255 & a), - a === this.PADDING_ || - (a === this.RESUME_CAPTION_LOADING_ - ? (this.mode_ = "popOn") - : a === this.END_OF_CAPTION_ - ? ((this.mode_ = "popOn"), - this.clearFormatting(e.pts), - this.flushDisplayed(e.pts), - (r = this.displayed_), - (this.displayed_ = this.nonDisplayed_), - (this.nonDisplayed_ = r), - (this.startPts_ = e.pts)) - : a === this.ROLL_UP_2_ROWS_ - ? ((this.rollUpRows_ = 2), this.setRollUp(e.pts)) - : a === this.ROLL_UP_3_ROWS_ - ? ((this.rollUpRows_ = 3), - this.setRollUp(e.pts)) - : a === this.ROLL_UP_4_ROWS_ - ? ((this.rollUpRows_ = 4), - this.setRollUp(e.pts)) - : a === this.CARRIAGE_RETURN_ - ? (this.clearFormatting(e.pts), - this.flushDisplayed(e.pts), - this.shiftRowsUp_(), - (this.startPts_ = e.pts)) - : a === this.BACKSPACE_ - ? "popOn" === this.mode_ - ? (this.nonDisplayed_[this.row_] = - this.nonDisplayed_[this.row_].slice( - 0, - -1, - )) - : (this.displayed_[this.row_] = - this.displayed_[this.row_].slice( - 0, - -1, - )) - : a === this.ERASE_DISPLAYED_MEMORY_ - ? (this.flushDisplayed(e.pts), - (this.displayed_ = Me())) - : a === this.ERASE_NON_DISPLAYED_MEMORY_ - ? (this.nonDisplayed_ = Me()) - : a === this.RESUME_DIRECT_CAPTIONING_ - ? ("paintOn" !== this.mode_ && - (this.flushDisplayed(e.pts), - (this.displayed_ = Me())), - (this.mode_ = "paintOn"), - (this.startPts_ = e.pts)) - : this.isSpecialCharacter(t, i) - ? ((n = Oe( - (t = (3 & t) << 8) | i, - )), - this[this.mode_](e.pts, n), - this.column_++) - : this.isExtCharacter(t, i) - ? ("popOn" === this.mode_ - ? (this.nonDisplayed_[ - this.row_ - ] = this.nonDisplayed_[ - this.row_ - ].slice(0, -1)) - : (this.displayed_[ - this.row_ - ] = this.displayed_[ - this.row_ - ].slice(0, -1)), - (n = Oe( - (t = (3 & t) << 8) | i, - )), - this[this.mode_](e.pts, n), - this.column_++) - : this.isMidRowCode(t, i) - ? (this.clearFormatting( - e.pts, - ), - this[this.mode_]( - e.pts, - " ", - ), - this.column_++, - 14 == (14 & i) && - this.addFormatting( - e.pts, - ["i"], - ), - 1 == (1 & i) && - this.addFormatting( - e.pts, - ["u"], - )) - : this.isOffsetControlCode( - t, - i, - ) - ? (this.column_ += 3 & i) - : this.isPAC(t, i) - ? ((r = Ne.indexOf( - 7968 & a, - )), - "rollUp" === - this.mode_ && - (r - - this.rollUpRows_ + - 1 < - 0 && - (r = - this.rollUpRows_ - - 1), - this.setRollUp( - e.pts, - r, - )), - r !== this.row_ && - (this.clearFormatting( - e.pts, - ), - (this.row_ = r)), - 1 & i && - -1 === - this.formatting_.indexOf( - "u", - ) && - this.addFormatting( - e.pts, - ["u"], - ), - 16 == (16 & a) && - (this.column_ = - 4 * - ((14 & a) >> 1)), - this.isColorPAC(i) && - 14 == (14 & i) && - this.addFormatting( - e.pts, - ["i"], - )) - : this.isNormalChar(t) && - (0 === i && (i = null), - (n = Oe(t)), - (n += Oe(i)), - this[this.mode_]( - e.pts, - n, - ), - (this.column_ += - n.length)))) - : (this.lastControlCode_ = null); - }); - }; - (Ue.prototype = new j()), - (Ue.prototype.flushDisplayed = function (e) { - var t = this.displayed_ - .map(function (e, t) { - try { - return e.trim(); - } catch (e) { - return ( - this.trigger("log", { - level: "warn", - message: - "Skipping a malformed 608 caption at index " + - t + - ".", - }), - "" - ); - } - }, this) - .join("\n") - .replace(/^\n+|\n+$/g, ""); - t.length && - this.trigger("data", { - startPts: this.startPts_, - endPts: e, - text: t, - stream: this.name_, - }); - }), - (Ue.prototype.reset = function () { - (this.mode_ = "popOn"), - (this.topRow_ = 0), - (this.startPts_ = 0), - (this.displayed_ = Me()), - (this.nonDisplayed_ = Me()), - (this.lastControlCode_ = null), - (this.column_ = 0), - (this.row_ = 14), - (this.rollUpRows_ = 2), - (this.formatting_ = []); - }), - (Ue.prototype.setConstants = function () { - 0 === this.dataChannel_ - ? ((this.BASE_ = 16), - (this.EXT_ = 17), - (this.CONTROL_ = (20 | this.field_) << 8), - (this.OFFSET_ = 23)) - : 1 === this.dataChannel_ && - ((this.BASE_ = 24), - (this.EXT_ = 25), - (this.CONTROL_ = (28 | this.field_) << 8), - (this.OFFSET_ = 31)), - (this.PADDING_ = 0), - (this.RESUME_CAPTION_LOADING_ = 32 | this.CONTROL_), - (this.END_OF_CAPTION_ = 47 | this.CONTROL_), - (this.ROLL_UP_2_ROWS_ = 37 | this.CONTROL_), - (this.ROLL_UP_3_ROWS_ = 38 | this.CONTROL_), - (this.ROLL_UP_4_ROWS_ = 39 | this.CONTROL_), - (this.CARRIAGE_RETURN_ = 45 | this.CONTROL_), - (this.RESUME_DIRECT_CAPTIONING_ = 41 | this.CONTROL_), - (this.BACKSPACE_ = 33 | this.CONTROL_), - (this.ERASE_DISPLAYED_MEMORY_ = 44 | this.CONTROL_), - (this.ERASE_NON_DISPLAYED_MEMORY_ = 46 | this.CONTROL_); - }), - (Ue.prototype.isSpecialCharacter = function (e, t) { - return e === this.EXT_ && 48 <= t && t <= 63; - }), - (Ue.prototype.isExtCharacter = function (e, t) { - return ( - (e === this.EXT_ + 1 || e === this.EXT_ + 2) && - 32 <= t && - t <= 63 - ); - }), - (Ue.prototype.isMidRowCode = function (e, t) { - return e === this.EXT_ && 32 <= t && t <= 47; - }), - (Ue.prototype.isOffsetControlCode = function (e, t) { - return e === this.OFFSET_ && 33 <= t && t <= 35; - }), - (Ue.prototype.isPAC = function (e, t) { - return ( - e >= this.BASE_ && e < this.BASE_ + 8 && 64 <= t && t <= 127 - ); - }), - (Ue.prototype.isColorPAC = function (e) { - return (64 <= e && e <= 79) || (96 <= e && e <= 127); - }), - (Ue.prototype.isNormalChar = function (e) { - return 32 <= e && e <= 127; - }), - (Ue.prototype.setRollUp = function (e, t) { - if ( - ("rollUp" !== this.mode_ && - ((this.row_ = 14), - (this.mode_ = "rollUp"), - this.flushDisplayed(e), - (this.nonDisplayed_ = Me()), - (this.displayed_ = Me())), - void 0 !== t && t !== this.row_) - ) - for (var i = 0; i < this.rollUpRows_; i++) - (this.displayed_[t - i] = this.displayed_[this.row_ - i]), - (this.displayed_[this.row_ - i] = ""); - void 0 === t && (t = this.row_), - (this.topRow_ = t - this.rollUpRows_ + 1); - }), - (Ue.prototype.addFormatting = function (e, t) { - this.formatting_ = this.formatting_.concat(t); - t = t.reduce(function (e, t) { - return e + "<" + t + ">"; - }, ""); - this[this.mode_](e, t); - }), - (Ue.prototype.clearFormatting = function (e) { - var t; - this.formatting_.length && - ((t = this.formatting_.reverse().reduce(function (e, t) { - return e + ""; - }, "")), - (this.formatting_ = []), - this[this.mode_](e, t)); - }), - (Ue.prototype.popOn = function (e, t) { - var i = this.nonDisplayed_[this.row_]; - this.nonDisplayed_[this.row_] = i += t; - }), - (Ue.prototype.rollUp = function (e, t) { - var i = this.displayed_[this.row_]; - this.displayed_[this.row_] = i += t; - }), - (Ue.prototype.shiftRowsUp_ = function () { - for (var e = 0; e < this.topRow_; e++) this.displayed_[e] = ""; - for (e = this.row_ + 1; e < 15; e++) this.displayed_[e] = ""; - for (e = this.topRow_; e < this.row_; e++) - this.displayed_[e] = this.displayed_[e + 1]; - this.displayed_[this.row_] = ""; - }), - (Ue.prototype.paintOn = function (e, t) { - var i = this.displayed_[this.row_]; - this.displayed_[this.row_] = i += t; - }); - function Be(e, t) { - var i = 1; - for (t < e && (i = -1); 4294967296 < Math.abs(t - e); ) - e += 8589934592 * i; - return e; - } - var Fe = { CaptionStream: Ie, Cea608Stream: Ue, Cea708Stream: De }, - je = { - H264_STREAM_TYPE: 27, - ADTS_STREAM_TYPE: 15, - METADATA_STREAM_TYPE: 21, - }, - e = function e(t) { - var i, n; - e.prototype.init.call(this), - (this.type_ = t || "shared"), - (this.push = function (e) { - ("shared" !== this.type_ && e.type !== this.type_) || - (void 0 === n && (n = e.dts), - (e.dts = Be(e.dts, n)), - (e.pts = Be(e.pts, n)), - (i = e.dts), - this.trigger("data", e)); - }), - (this.flush = function () { - (n = i), this.trigger("done"); - }), - (this.endTimeline = function () { - this.flush(), this.trigger("endedtimeline"); - }), - (this.discontinuity = function () { - i = n = void 0; - }), - (this.reset = function () { - this.discontinuity(), this.trigger("reset"); - }); - }; - e.prototype = new j(); - function He(e, t, i) { - for (var n = "", r = t; r < i; r++) - n += "%" + ("00" + e[r].toString(16)).slice(-2); - return n; - } - function qe(e, t, i) { - return decodeURIComponent(He(e, t, i)); - } - function Ve(e) { - return (e[0] << 21) | (e[1] << 14) | (e[2] << 7) | e[3]; - } - var We = e, - Ie = Be, - Ge = { - TXXX: function (e) { - var t; - if (3 === e.data[0]) { - for (t = 1; t < e.data.length; t++) - if (0 === e.data[t]) { - (e.description = qe(e.data, 1, t)), - (e.value = qe(e.data, t + 1, e.data.length).replace( - /\0*$/, - "", - )); - break; - } - e.data = e.value; - } - }, - WXXX: function (e) { - var t; - if (3 === e.data[0]) - for (t = 1; t < e.data.length; t++) - if (0 === e.data[t]) { - (e.description = qe(e.data, 1, t)), - (e.url = qe(e.data, t + 1, e.data.length)); - break; - } - }, - PRIV: function (e) { - for (var t, i = 0; i < e.data.length; i++) - if (0 === e.data[i]) { - e.owner = ((t = e.data), unescape(He(t, 0, i))); - break; - } - (e.privateData = e.data.subarray(i + 1)), - (e.data = e.privateData); - }, - }, - ze = function (e) { - var t, - i = { descriptor: e && e.descriptor }, - u = 0, - l = [], - c = 0; - if ( - (ze.prototype.init.call(this), - (this.dispatchType = je.METADATA_STREAM_TYPE.toString(16)), - i.descriptor) - ) - for (t = 0; t < i.descriptor.length; t++) - this.dispatchType += ( - "00" + i.descriptor[t].toString(16) - ).slice(-2); - this.push = function (e) { - var t, i, n, r, a, s, o; - if ("timed-metadata" === e.type) - if ( - (e.dataAlignmentIndicator && ((c = 0), (l.length = 0)), - 0 === l.length && - (e.data.length < 10 || - e.data[0] !== "I".charCodeAt(0) || - e.data[1] !== "D".charCodeAt(0) || - e.data[2] !== "3".charCodeAt(0))) - ) - this.trigger("log", { - level: "warn", - message: "Skipping unrecognized metadata packet", - }); - else if ( - (l.push(e), - (c += e.data.byteLength), - 1 === l.length && - ((u = Ve(e.data.subarray(6, 10))), (u += 10)), - !(c < u)) - ) { - for ( - t = { - data: new Uint8Array(u), - frames: [], - pts: l[0].pts, - dts: l[0].dts, - }, - r = 0; - r < u; - - ) - t.data.set(l[0].data.subarray(0, u - r), r), - (r += l[0].data.byteLength), - (c -= l[0].data.byteLength), - l.shift(); - (i = 10), - 64 & t.data[5] && - ((i += 4), - (i += Ve(t.data.subarray(10, 14))), - (u -= Ve(t.data.subarray(16, 20)))); - do { - if ((n = Ve(t.data.subarray(i + 4, i + 8))) < 1) - return void this.trigger("log", { - level: "warn", - message: - "Malformed ID3 frame encountered. Skipping metadata parsing.", - }); - } while ( - (((o = { - id: String.fromCharCode( - t.data[i], - t.data[i + 1], - t.data[i + 2], - t.data[i + 3], - ), - data: t.data.subarray(i + 10, i + n + 10), - }).key = o.id), - Ge[o.id] && - (Ge[o.id](o), - "com.apple.streaming.transportStreamTimestamp" === - o.owner && - ((s = - ((1 & (a = o.data)[3]) << 30) | - (a[4] << 22) | - (a[5] << 14) | - (a[6] << 6) | - (a[7] >>> 2)), - (s *= 4), - (s += 3 & a[7]), - (o.timeStamp = s), - void 0 === t.pts && - void 0 === t.dts && - ((t.pts = o.timeStamp), (t.dts = o.timeStamp)), - this.trigger("timestamp", o))), - t.frames.push(o), - (i += 10), - (i += n) < u) - ); - this.trigger("data", t); - } - }; - }; - ze.prototype = new j(); - var Xe, - Ke, - e = ze, - We = We, - Ye = function () { - var r = new Uint8Array(188), - a = 0; - Ye.prototype.init.call(this), - (this.push = function (e) { - var t, - i = 0, - n = 188; - for ( - a - ? ((t = new Uint8Array(e.byteLength + a)).set( - r.subarray(0, a), - ), - t.set(e, a), - (a = 0)) - : (t = e); - n < t.byteLength; - - ) - 71 !== t[i] || 71 !== t[n] - ? (i++, n++) - : (this.trigger("data", t.subarray(i, n)), - (i += 188), - (n += 188)); - i < t.byteLength && - (r.set(t.subarray(i), 0), (a = t.byteLength - i)); - }), - (this.flush = function () { - 188 === a && - 71 === r[0] && - (this.trigger("data", r), (a = 0)), - this.trigger("done"); - }), - (this.endTimeline = function () { - this.flush(), this.trigger("endedtimeline"); - }), - (this.reset = function () { - (a = 0), this.trigger("reset"); - }); - }; - (Ye.prototype = new j()), - ((Xe = function () { - var n, r, a, s; - Xe.prototype.init.call(this), - ((s = this).packetsWaitingForPmt = []), - (this.programMapTable = void 0), - (n = function (e, t) { - var i = 0; - t.payloadUnitStartIndicator && (i += e[i] + 1), - ("pat" === t.type ? r : a)(e.subarray(i), t); - }), - (r = function (e, t) { - (t.section_number = e[7]), - (t.last_section_number = e[8]), - (s.pmtPid = ((31 & e[10]) << 8) | e[11]), - (t.pmtPid = s.pmtPid); - }), - (a = function (e, t) { - var i, n; - if (1 & e[5]) { - for ( - s.programMapTable = { - video: null, - audio: null, - "timed-metadata": {}, - }, - i = 3 + (((15 & e[1]) << 8) | e[2]) - 4, - n = 12 + (((15 & e[10]) << 8) | e[11]); - n < i; - - ) { - var r = e[n], - a = ((31 & e[n + 1]) << 8) | e[n + 2]; - r === je.H264_STREAM_TYPE && - null === s.programMapTable.video - ? (s.programMapTable.video = a) - : r === je.ADTS_STREAM_TYPE && - null === s.programMapTable.audio - ? (s.programMapTable.audio = a) - : r === je.METADATA_STREAM_TYPE && - (s.programMapTable["timed-metadata"][a] = r), - (n += 5 + (((15 & e[n + 3]) << 8) | e[n + 4])); - } - t.programMapTable = s.programMapTable; - } - }), - (this.push = function (e) { - var t = {}, - i = 4; - if ( - ((t.payloadUnitStartIndicator = !!(64 & e[1])), - (t.pid = 31 & e[1]), - (t.pid <<= 8), - (t.pid |= e[2]), - 1 < (48 & e[3]) >>> 4 && (i += e[i] + 1), - 0 === t.pid) - ) - (t.type = "pat"), - n(e.subarray(i), t), - this.trigger("data", t); - else if (t.pid === this.pmtPid) - for ( - t.type = "pmt", - n(e.subarray(i), t), - this.trigger("data", t); - this.packetsWaitingForPmt.length; - - ) - this.processPes_.apply( - this, - this.packetsWaitingForPmt.shift(), - ); - else - void 0 === this.programMapTable - ? this.packetsWaitingForPmt.push([e, i, t]) - : this.processPes_(e, i, t); - }), - (this.processPes_ = function (e, t, i) { - i.pid === this.programMapTable.video - ? (i.streamType = je.H264_STREAM_TYPE) - : i.pid === this.programMapTable.audio - ? (i.streamType = je.ADTS_STREAM_TYPE) - : (i.streamType = - this.programMapTable["timed-metadata"][i.pid]), - (i.type = "pes"), - (i.data = e.subarray(t)), - this.trigger("data", i); - }); - }).prototype = new j()), - (Xe.STREAM_TYPES = { h264: 27, adts: 15 }), - ((Ke = function () { - function n(e, t, i) { - var n, - r, - a, - s, - o = new Uint8Array(e.size), - u = { type: t }, - l = 0, - c = 0; - if (e.data.length && !(e.size < 9)) { - for (u.trackId = e.data[0].pid, l = 0; l < e.data.length; l++) - (n = e.data[l]), o.set(n.data, c), (c += n.data.byteLength); - (a = u), - (s = ((r = o)[0] << 16) | (r[1] << 8) | r[2]), - (a.data = new Uint8Array()), - 1 == s && - ((a.packetLength = 6 + ((r[4] << 8) | r[5])), - (a.dataAlignmentIndicator = 0 != (4 & r[6])), - 192 & (s = r[7]) && - ((a.pts = - ((14 & r[9]) << 27) | - ((255 & r[10]) << 20) | - ((254 & r[11]) << 12) | - ((255 & r[12]) << 5) | - ((254 & r[13]) >>> 3)), - (a.pts *= 4), - (a.pts += (6 & r[13]) >>> 1), - (a.dts = a.pts), - 64 & s && - ((a.dts = - ((14 & r[14]) << 27) | - ((255 & r[15]) << 20) | - ((254 & r[16]) << 12) | - ((255 & r[17]) << 5) | - ((254 & r[18]) >>> 3)), - (a.dts *= 4), - (a.dts += (6 & r[18]) >>> 1))), - (a.data = r.subarray(9 + r[8]))), - (t = "video" === t || u.packetLength <= e.size), - (i || t) && ((e.size = 0), (e.data.length = 0)), - t && d.trigger("data", u); - } - } - var t, - d = this, - r = !1, - a = { data: [], size: 0 }, - s = { data: [], size: 0 }, - o = { data: [], size: 0 }; - Ke.prototype.init.call(this), - (this.push = function (i) { - ({ - pat: function () {}, - pes: function () { - var e, t; - switch (i.streamType) { - case je.H264_STREAM_TYPE: - (e = a), (t = "video"); - break; - case je.ADTS_STREAM_TYPE: - (e = s), (t = "audio"); - break; - case je.METADATA_STREAM_TYPE: - (e = o), (t = "timed-metadata"); - break; - default: - return; - } - i.payloadUnitStartIndicator && n(e, t, !0), - e.data.push(i), - (e.size += i.data.byteLength); - }, - pmt: function () { - var e = { type: "metadata", tracks: [] }; - null !== (t = i.programMapTable).video && - e.tracks.push({ - timelineStartInfo: { baseMediaDecodeTime: 0 }, - id: +t.video, - codec: "avc", - type: "video", - }), - null !== t.audio && - e.tracks.push({ - timelineStartInfo: { baseMediaDecodeTime: 0 }, - id: +t.audio, - codec: "adts", - type: "audio", - }), - (r = !0), - d.trigger("data", e); - }, - })[i.type](); - }), - (this.reset = function () { - (a.size = 0), - (a.data.length = 0), - (s.size = 0), - (s.data.length = 0), - this.trigger("reset"); - }), - (this.flushStreams_ = function () { - n(a, "video"), n(s, "audio"), n(o, "timed-metadata"); - }), - (this.flush = function () { - var e; - !r && - t && - ((e = { type: "metadata", tracks: [] }), - null !== t.video && - e.tracks.push({ - timelineStartInfo: { baseMediaDecodeTime: 0 }, - id: +t.video, - codec: "avc", - type: "video", - }), - null !== t.audio && - e.tracks.push({ - timelineStartInfo: { baseMediaDecodeTime: 0 }, - id: +t.audio, - codec: "adts", - type: "audio", - }), - d.trigger("data", e)), - (r = !1), - this.flushStreams_(), - this.trigger("done"); - }); - }).prototype = new j()); - var Qe, - $e = { - PAT_PID: 0, - MP2T_PACKET_LENGTH: 188, - TransportPacketStream: Ye, - TransportParseStream: Xe, - ElementaryStream: Ke, - TimestampRolloverStream: We, - CaptionStream: Fe.CaptionStream, - Cea608Stream: Fe.Cea608Stream, - Cea708Stream: Fe.Cea708Stream, - MetadataStream: e, - }; - for (Qe in je) je.hasOwnProperty(Qe) && ($e[Qe] = je[Qe]); - var Je = $e, - Ze = ue, - et = [ - 96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, - 11025, 8e3, 7350, - ], - tt = function (u) { - var l, - c = 0; - tt.prototype.init.call(this), - (this.skipWarn_ = function (e, t) { - this.trigger("log", { - level: "warn", - message: - "adts skiping bytes " + - e + - " to " + - t + - " in frame " + - c + - " outside syncword", - }); - }), - (this.push = function (e) { - var t, - i, - n, - r, - a, - s, - o = 0; - if ((u || (c = 0), "audio" === e.type)) { - for ( - l && l.length - ? ((n = l), - (l = new Uint8Array( - n.byteLength + e.data.byteLength, - )).set(n), - l.set(e.data, n.byteLength)) - : (l = e.data); - o + 7 < l.length; - - ) - if (255 === l[o] && 240 == (246 & l[o + 1])) { - if ( - ("number" == typeof s && - (this.skipWarn_(s, o), (s = null)), - (i = 2 * (1 & ~l[o + 1])), - (t = - ((3 & l[o + 3]) << 11) | - (l[o + 4] << 3) | - ((224 & l[o + 5]) >> 5)), - (a = - ((r = 1024 * (1 + (3 & l[o + 6]))) * Ze) / - et[(60 & l[o + 2]) >>> 2]), - l.byteLength - o < t) - ) - break; - this.trigger("data", { - pts: e.pts + c * a, - dts: e.dts + c * a, - sampleCount: r, - audioobjecttype: 1 + ((l[o + 2] >>> 6) & 3), - channelcount: - ((1 & l[o + 2]) << 2) | ((192 & l[o + 3]) >>> 6), - samplerate: et[(60 & l[o + 2]) >>> 2], - samplingfrequencyindex: (60 & l[o + 2]) >>> 2, - samplesize: 16, - data: l.subarray(o + 7 + i, o + t), - }), - c++, - (o += t); - } else "number" != typeof s && (s = o), o++; - "number" == typeof s && (this.skipWarn_(s, o), (s = null)), - (l = l.subarray(o)); - } - }), - (this.flush = function () { - (c = 0), this.trigger("done"); - }), - (this.reset = function () { - (l = void 0), this.trigger("reset"); - }), - (this.endTimeline = function () { - (l = void 0), this.trigger("endedtimeline"); - }); - }; - tt.prototype = new j(); - var it, - nt, - rt = tt, - at = function (n) { - var r = n.byteLength, - a = 0, - s = 0; - (this.length = function () { - return 8 * r; - }), - (this.bitsAvailable = function () { - return 8 * r + s; - }), - (this.loadWord = function () { - var e = n.byteLength - r, - t = new Uint8Array(4), - i = Math.min(4, r); - if (0 === i) throw new Error("no bytes available"); - t.set(n.subarray(e, e + i)), - (a = new DataView(t.buffer).getUint32(0)), - (s = 8 * i), - (r -= i); - }), - (this.skipBits = function (e) { - var t; - e < s || - ((e -= s), - (e -= 8 * (t = Math.floor(e / 8))), - (r -= t), - this.loadWord()), - (a <<= e), - (s -= e); - }), - (this.readBits = function (e) { - var t = Math.min(s, e), - i = a >>> (32 - t); - return ( - 0 < (s -= t) ? (a <<= t) : 0 < r && this.loadWord(), - 0 < (t = e - t) ? (i << t) | this.readBits(t) : i - ); - }), - (this.skipLeadingZeros = function () { - for (var e = 0; e < s; ++e) - if (0 != (a & (2147483648 >>> e))) - return (a <<= e), (s -= e), e; - return this.loadWord(), e + this.skipLeadingZeros(); - }), - (this.skipUnsignedExpGolomb = function () { - this.skipBits(1 + this.skipLeadingZeros()); - }), - (this.skipExpGolomb = function () { - this.skipBits(1 + this.skipLeadingZeros()); - }), - (this.readUnsignedExpGolomb = function () { - var e = this.skipLeadingZeros(); - return this.readBits(e + 1) - 1; - }), - (this.readExpGolomb = function () { - var e = this.readUnsignedExpGolomb(); - return 1 & e ? (1 + e) >>> 1 : -1 * (e >>> 1); - }), - (this.readBoolean = function () { - return 1 === this.readBits(1); - }), - (this.readUnsignedByte = function () { - return this.readBits(8); - }), - this.loadWord(); - }, - st = function () { - var n, - r, - a = 0; - st.prototype.init.call(this), - (this.push = function (e) { - for ( - var t, - i = (r = r - ? ((t = new Uint8Array( - r.byteLength + e.data.byteLength, - )).set(r), - t.set(e.data, r.byteLength), - t) - : e.data).byteLength; - a < i - 3; - a++ - ) - if (1 === r[a + 2]) { - n = a + 5; - break; - } - for (; n < i; ) - switch (r[n]) { - case 0: - if (0 !== r[n - 1]) { - n += 2; - break; - } - if (0 !== r[n - 2]) { - n++; - break; - } - for ( - a + 3 !== n - 2 && - this.trigger("data", r.subarray(a + 3, n - 2)); - 1 !== r[++n] && n < i; - - ); - (a = n - 2), (n += 3); - break; - case 1: - if (0 !== r[n - 1] || 0 !== r[n - 2]) { - n += 3; - break; - } - this.trigger("data", r.subarray(a + 3, n - 2)), - (a = n - 2), - (n += 3); - break; - default: - n += 3; - } - (r = r.subarray(a)), (n -= a), (a = 0); - }), - (this.reset = function () { - (r = null), (a = 0), this.trigger("reset"); - }), - (this.flush = function () { - r && - 3 < r.byteLength && - this.trigger("data", r.subarray(a + 3)), - (r = null), - (a = 0), - this.trigger("done"); - }), - (this.endTimeline = function () { - this.flush(), this.trigger("endedtimeline"); - }); - }; - (st.prototype = new j()), - (nt = { - 100: !0, - 110: !0, - 122: !0, - 244: !0, - 44: !0, - 83: !0, - 86: !0, - 118: !0, - 128: !0, - 138: !0, - 139: !0, - 134: !0, - }), - ((it = function () { - var i, - n, - r, - a, - s, - o, - m, - t = new st(); - it.prototype.init.call(this), - ((i = this).push = function (e) { - "video" === e.type && - ((n = e.trackId), (r = e.pts), (a = e.dts), t.push(e)); - }), - t.on("data", function (e) { - var t = { - trackId: n, - pts: r, - dts: a, - data: e, - nalUnitTypeCode: 31 & e[0], - }; - switch (t.nalUnitTypeCode) { - case 5: - t.nalUnitType = - "slice_layer_without_partitioning_rbsp_idr"; - break; - case 6: - (t.nalUnitType = "sei_rbsp"), - (t.escapedRBSP = s(e.subarray(1))); - break; - case 7: - (t.nalUnitType = "seq_parameter_set_rbsp"), - (t.escapedRBSP = s(e.subarray(1))), - (t.config = o(t.escapedRBSP)); - break; - case 8: - t.nalUnitType = "pic_parameter_set_rbsp"; - break; - case 9: - t.nalUnitType = "access_unit_delimiter_rbsp"; - } - i.trigger("data", t); - }), - t.on("done", function () { - i.trigger("done"); - }), - t.on("partialdone", function () { - i.trigger("partialdone"); - }), - t.on("reset", function () { - i.trigger("reset"); - }), - t.on("endedtimeline", function () { - i.trigger("endedtimeline"); - }), - (this.flush = function () { - t.flush(); - }), - (this.partialFlush = function () { - t.partialFlush(); - }), - (this.reset = function () { - t.reset(); - }), - (this.endTimeline = function () { - t.endTimeline(); - }), - (m = function (e, t) { - for (var i = 8, n = 8, r = 0; r < e; r++) - i = - 0 === - (n = 0 !== n ? (i + t.readExpGolomb() + 256) % 256 : n) - ? i - : n; - }), - (s = function (e) { - for (var t = e.byteLength, i = [], n = 1; n < t - 2; ) - 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] - ? (i.push(n + 2), (n += 2)) - : n++; - if (0 === i.length) return e; - for ( - var r = t - i.length, a = new Uint8Array(r), s = 0, n = 0; - n < r; - s++, n++ - ) - s === i[0] && (s++, i.shift()), (a[n] = e[s]); - return a; - }), - (o = function (e) { - var t, - i, - n, - r, - a, - s = 0, - o = 0, - u = 0, - l = 0, - c = [1, 1], - d = new at(e), - h = d.readUnsignedByte(), - p = d.readUnsignedByte(), - f = d.readUnsignedByte(); - if ( - (d.skipUnsignedExpGolomb(), - nt[h] && - (3 === (i = d.readUnsignedExpGolomb()) && d.skipBits(1), - d.skipUnsignedExpGolomb(), - d.skipUnsignedExpGolomb(), - d.skipBits(1), - d.readBoolean())) - ) - for (r = 3 !== i ? 8 : 12, a = 0; a < r; a++) - d.readBoolean() && m(a < 6 ? 16 : 64, d); - if ( - (d.skipUnsignedExpGolomb(), - 0 === (n = d.readUnsignedExpGolomb())) - ) - d.readUnsignedExpGolomb(); - else if (1 === n) - for ( - d.skipBits(1), - d.skipExpGolomb(), - d.skipExpGolomb(), - t = d.readUnsignedExpGolomb(), - a = 0; - a < t; - a++ - ) - d.skipExpGolomb(); - if ( - (d.skipUnsignedExpGolomb(), - d.skipBits(1), - (e = d.readUnsignedExpGolomb()), - (i = d.readUnsignedExpGolomb()), - 0 === (n = d.readBits(1)) && d.skipBits(1), - d.skipBits(1), - d.readBoolean() && - ((s = d.readUnsignedExpGolomb()), - (o = d.readUnsignedExpGolomb()), - (u = d.readUnsignedExpGolomb()), - (l = d.readUnsignedExpGolomb())), - d.readBoolean() && d.readBoolean()) - ) { - switch (d.readUnsignedByte()) { - case 1: - c = [1, 1]; - break; - case 2: - c = [12, 11]; - break; - case 3: - c = [10, 11]; - break; - case 4: - c = [16, 11]; - break; - case 5: - c = [40, 33]; - break; - case 6: - c = [24, 11]; - break; - case 7: - c = [20, 11]; - break; - case 8: - c = [32, 11]; - break; - case 9: - c = [80, 33]; - break; - case 10: - c = [18, 11]; - break; - case 11: - c = [15, 11]; - break; - case 12: - c = [64, 33]; - break; - case 13: - c = [160, 99]; - break; - case 14: - c = [4, 3]; - break; - case 15: - c = [3, 2]; - break; - case 16: - c = [2, 1]; - break; - case 255: - c = [ - (d.readUnsignedByte() << 8) | d.readUnsignedByte(), - (d.readUnsignedByte() << 8) | d.readUnsignedByte(), - ]; - } - c && (c[0], c[1]); - } - return { - profileIdc: h, - levelIdc: f, - profileCompatibility: p, - width: 16 * (e + 1) - 2 * s - 2 * o, - height: (2 - n) * (i + 1) * 16 - 2 * u - 2 * l, - sarRatio: c, - }; - }); - }).prototype = new j()); - function ot(e, t) { - var i = - 0 <= - (i = - (e[t + 6] << 21) | - (e[t + 7] << 14) | - (e[t + 8] << 7) | - e[t + 9]) - ? i - : 0; - return (16 & e[t + 5]) >> 4 ? i + 20 : i + 10; - } - function ut(e, t) { - return e.length - t < 10 || - e[t] !== "I".charCodeAt(0) || - e[t + 1] !== "D".charCodeAt(0) || - e[t + 2] !== "3".charCodeAt(0) - ? t - : ut(e, (t += ot(e, t))); - } - function lt(e) { - return (e[0] << 21) | (e[1] << 14) | (e[2] << 7) | e[3]; - } - var e = { H264Stream: it, NalByteStream: st }, - ct = [ - 96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, - 11025, 8e3, 7350, - ], - dt = { - isLikelyAacData: function (e) { - var t = ut(e, 0); - return ( - e.length >= t + 2 && - 255 == (255 & e[t]) && - 240 == (240 & e[t + 1]) && - 16 == (22 & e[t + 1]) - ); - }, - parseId3TagSize: ot, - parseAdtsSize: function (e, t) { - var i = (224 & e[t + 5]) >> 5, - n = e[t + 4] << 3; - return (6144 & e[t + 3]) | n | i; - }, - parseType: function (e, t) { - return e[t] === "I".charCodeAt(0) && - e[t + 1] === "D".charCodeAt(0) && - e[t + 2] === "3".charCodeAt(0) - ? "timed-metadata" - : !0 & e[t] && 240 == (240 & e[t + 1]) - ? "audio" - : null; - }, - parseSampleRate: function (e) { - for (var t = 0; t + 5 < e.length; ) { - if (255 === e[t] && 240 == (246 & e[t + 1])) - return ct[(60 & e[t + 2]) >>> 2]; - t++; - } - return null; - }, - parseAacTimestamp: function (e) { - var t, - i = 10; - 64 & e[5] && ((i += 4), (i += lt(e.subarray(10, 14)))); - do { - if ((t = lt(e.subarray(i + 4, i + 8))) < 1) return null; - if ( - "PRIV" === - String.fromCharCode(e[i], e[i + 1], e[i + 2], e[i + 3]) - ) - for ( - var n = e.subarray(i + 10, i + t + 10), r = 0; - r < n.byteLength; - r++ - ) - if (0 === n[r]) { - if ( - "com.apple.streaming.transportStreamTimestamp" !== - unescape( - (function (e, t, i) { - for (var n = "", r = t; r < i; r++) - n += "%" + ("00" + e[r].toString(16)).slice(-2); - return n; - })(n, 0, r), - ) - ) - break; - var a = n.subarray(r + 1), - s = - ((1 & a[3]) << 30) | - (a[4] << 22) | - (a[5] << 14) | - (a[6] << 6) | - (a[7] >>> 2); - return (s *= 4), (s += 3 & a[7]); - } - } while (((i += 10), (i += t) < e.byteLength)); - return null; - }, - }, - ht = function () { - var a = new Uint8Array(), - s = 0; - ht.prototype.init.call(this), - (this.setTimestamp = function (e) { - s = e; - }), - (this.push = function (e) { - var t, - i, - n = 0, - r = 0; - for ( - a.length - ? ((i = a.length), - (a = new Uint8Array(e.byteLength + i)).set( - a.subarray(0, i), - ), - a.set(e, i)) - : (a = e); - 3 <= a.length - r; - - ) - if ( - a[r] !== "I".charCodeAt(0) || - a[r + 1] !== "D".charCodeAt(0) || - a[r + 2] !== "3".charCodeAt(0) - ) - if (255 != (255 & a[r]) || 240 != (240 & a[r + 1])) r++; - else { - if (a.length - r < 7) break; - if (r + (n = dt.parseAdtsSize(a, r)) > a.length) break; - (t = { - type: "audio", - data: a.subarray(r, r + n), - pts: s, - dts: s, - }), - this.trigger("data", t), - (r += n); - } - else { - if (a.length - r < 10) break; - if (r + (n = dt.parseId3TagSize(a, r)) > a.length) break; - (t = { - type: "timed-metadata", - data: a.subarray(r, r + n), - }), - this.trigger("data", t), - (r += n); - } - (e = a.length - r), - (a = 0 < e ? a.subarray(r) : new Uint8Array()); - }), - (this.reset = function () { - (a = new Uint8Array()), this.trigger("reset"); - }), - (this.endTimeline = function () { - (a = new Uint8Array()), this.trigger("endedtimeline"); - }); - }; - ht.prototype = new j(); - function pt(e, t) { - (t.stream = e), this.trigger("log", t); - } - function ft(e, t) { - for (var i = Object.keys(t), n = 0; n < i.length; n++) { - var r = i[n]; - "headOfPipeline" !== r && - t[r].on && - t[r].on("log", pt.bind(e, r)); - } - } - function mt(e, t) { - var i; - if (e.length === t.length) { - for (i = 0; i < e.length; i++) if (e[i] !== t[i]) return; - return 1; - } - } - function gt(e, t, i, n, r, a) { - return { - start: { dts: e, pts: e + (i - t) }, - end: { dts: e + (n - t), pts: e + (r - i) }, - prependedContentDuration: a, - baseMediaDecodeTime: e, - }; - } - var yt, - vt, - _t, - bt = ht, - Tt = [ - "audioobjecttype", - "channelcount", - "samplerate", - "samplingfrequencyindex", - "samplesize", - ], - St = [ - "width", - "height", - "profileIdc", - "levelIdc", - "profileCompatibility", - "sarRatio", - ], - wt = e.H264Stream, - Et = dt.isLikelyAacData, - kt = ue, - Ct = function (a, s) { - var o = [], - u = 0, - l = 0, - c = 1 / 0, - d = (s = s || {}).firstSequenceNumber || 0; - Ct.prototype.init.call(this), - (this.push = function (t) { - Te(a, t), - a && - Tt.forEach(function (e) { - a[e] = t[e]; - }), - o.push(t); - }), - (this.setEarliestDts = function (e) { - u = e; - }), - (this.setVideoBaseMediaDecodeTime = function (e) { - c = e; - }), - (this.setAudioAppendStart = function (e) { - l = e; - }), - (this.flush = function () { - var e, t, i, n, r; - 0 !== o.length && - ((e = me(o, a, u)), - (a.baseMediaDecodeTime = be(a, s.keepOriginalTimestamps)), - (r = fe(a, e, l, c)), - (a.samples = ge(e)), - (t = K(ye(e))), - (o = []), - (n = Y(d, [a])), - (i = new Uint8Array(n.byteLength + t.byteLength)), - d++, - i.set(n), - i.set(t, n.byteLength), - _e(a), - (n = Math.ceil((1024 * kt) / a.samplerate)), - e.length && - ((n = e.length * n), - this.trigger( - "segmentTimingInfo", - gt( - de(a.baseMediaDecodeTime, a.samplerate), - e[0].dts, - e[0].pts, - e[0].dts + n, - e[0].pts + n, - r || 0, - ), - ), - this.trigger("timingInfo", { - start: e[0].pts, - end: e[0].pts + n, - })), - this.trigger("data", { track: a, boxes: i })), - this.trigger("done", "AudioSegmentStream"); - }), - (this.reset = function () { - _e(a), (o = []), this.trigger("reset"); - }); - }; - (Ct.prototype = new j()), - ((yt = function (s, a) { - var t, - i, - o = [], - l = [], - u = (a = a || {}).firstSequenceNumber || 0; - yt.prototype.init.call(this), - delete s.minPTS, - (this.gopCache_ = []), - (this.push = function (e) { - Te(s, e), - "seq_parameter_set_rbsp" !== e.nalUnitType || - t || - ((t = e.config), - (s.sps = [e.data]), - St.forEach(function (e) { - s[e] = t[e]; - }, this)), - "pic_parameter_set_rbsp" !== e.nalUnitType || - i || - ((i = e.data), (s.pps = [e.data])), - o.push(e); - }), - (this.flush = function () { - for ( - var e, t, i, n = 0; - o.length && - "access_unit_delimiter_rbsp" !== o[0].nalUnitType; - - ) - o.shift(); - if (0 === o.length) - return ( - this.resetStream_(), - void this.trigger("done", "VideoSegmentStream") - ); - if ( - ((e = $(o)), - (t = J(e))[0][0].keyFrame || - ((i = this.getGopForFusion_(o[0], s)) - ? ((n = i.duration), - t.unshift(i), - (t.byteLength += i.byteLength), - (t.nalCount += i.nalCount), - (t.pts = i.pts), - (t.dts = i.dts), - (t.duration += i.duration)) - : (t = Z(t))), - l.length) - ) { - var r = a.alignGopsAtEnd - ? this.alignGopsAtEnd_(t) - : this.alignGopsAtStart_(t); - if (!r) - return ( - this.gopCache_.unshift({ - gop: t.pop(), - pps: s.pps, - sps: s.sps, - }), - (this.gopCache_.length = Math.min( - 6, - this.gopCache_.length, - )), - (o = []), - this.resetStream_(), - void this.trigger("done", "VideoSegmentStream") - ); - _e(s), (t = r); - } - Te(s, t), - (s.samples = ee(t)), - (e = K(te(t))), - (s.baseMediaDecodeTime = be(s, a.keepOriginalTimestamps)), - this.trigger( - "processedGopsInfo", - t.map(function (e) { - return { - pts: e.pts, - dts: e.dts, - byteLength: e.byteLength, - }; - }), - ), - (i = t[0]), - (r = t[t.length - 1]), - this.trigger( - "segmentTimingInfo", - gt( - s.baseMediaDecodeTime, - i.dts, - i.pts, - r.dts + r.duration, - r.pts + r.duration, - n, - ), - ), - this.trigger("timingInfo", { - start: t[0].pts, - end: t[t.length - 1].pts + t[t.length - 1].duration, - }), - this.gopCache_.unshift({ - gop: t.pop(), - pps: s.pps, - sps: s.sps, - }), - (this.gopCache_.length = Math.min( - 6, - this.gopCache_.length, - )), - (o = []), - this.trigger("baseMediaDecodeTime", s.baseMediaDecodeTime), - this.trigger("timelineStartInfo", s.timelineStartInfo), - (n = Y(u, [s])), - (t = new Uint8Array(n.byteLength + e.byteLength)), - u++, - t.set(n), - t.set(e, n.byteLength), - this.trigger("data", { track: s, boxes: t }), - this.resetStream_(), - this.trigger("done", "VideoSegmentStream"); - }), - (this.reset = function () { - this.resetStream_(), - (o = []), - (this.gopCache_.length = 0), - (l.length = 0), - this.trigger("reset"); - }), - (this.resetStream_ = function () { - _e(s), (i = t = void 0); - }), - (this.getGopForFusion_ = function (e) { - for ( - var t, i, n, r = 1 / 0, a = 0; - a < this.gopCache_.length; - a++ - ) - (i = (n = this.gopCache_[a]).gop), - s.pps && - mt(s.pps[0], n.pps[0]) && - s.sps && - mt(s.sps[0], n.sps[0]) && - (i.dts < s.timelineStartInfo.dts || - (-1e4 <= (i = e.dts - i.dts - i.duration) && - i <= 45e3 && - (!t || i < r) && - ((t = n), (r = i)))); - return t ? t.gop : null; - }), - (this.alignGopsAtStart_ = function (e) { - for ( - var t, - i, - n, - r, - a = e.byteLength, - s = e.nalCount, - o = e.duration, - u = (t = 0); - u < l.length && - t < e.length && - ((i = l[u]), (n = e[t]), i.pts !== n.pts); - - ) - n.pts > i.pts - ? u++ - : (t++, - (a -= n.byteLength), - (s -= n.nalCount), - (o -= n.duration)); - return 0 === t - ? e - : t === e.length - ? null - : (((r = e.slice(t)).byteLength = a), - (r.duration = o), - (r.nalCount = s), - (r.pts = r[0].pts), - (r.dts = r[0].dts), - r); - }), - (this.alignGopsAtEnd_ = function (e) { - for ( - var t, - i, - n = l.length - 1, - r = e.length - 1, - a = null, - s = !1; - 0 <= n && 0 <= r; - - ) { - if (((t = l[n]), (i = e[r]), t.pts === i.pts)) { - s = !0; - break; - } - t.pts > i.pts ? n-- : (n === l.length - 1 && (a = r), r--); - } - if (!s && null === a) return null; - if (0 === (u = s ? r : a)) return e; - var o = e.slice(u), - u = o.reduce( - function (e, t) { - return ( - (e.byteLength += t.byteLength), - (e.duration += t.duration), - (e.nalCount += t.nalCount), - e - ); - }, - { byteLength: 0, duration: 0, nalCount: 0 }, - ); - return ( - (o.byteLength = u.byteLength), - (o.duration = u.duration), - (o.nalCount = u.nalCount), - (o.pts = o[0].pts), - (o.dts = o[0].dts), - o - ); - }), - (this.alignGopsWith = function (e) { - l = e; - }); - }).prototype = new j()), - ((_t = function (e, t) { - (this.numberOfTracks = 0), - (this.metadataStream = t), - "undefined" != typeof (e = e || {}).remux - ? (this.remuxTracks = !!e.remux) - : (this.remuxTracks = !0), - "boolean" == typeof e.keepOriginalTimestamps - ? (this.keepOriginalTimestamps = e.keepOriginalTimestamps) - : (this.keepOriginalTimestamps = !1), - (this.pendingTracks = []), - (this.videoTrack = null), - (this.pendingBoxes = []), - (this.pendingCaptions = []), - (this.pendingMetadata = []), - (this.pendingBytes = 0), - (this.emittedTracks = 0), - _t.prototype.init.call(this), - (this.push = function (e) { - return e.text - ? this.pendingCaptions.push(e) - : e.frames - ? this.pendingMetadata.push(e) - : (this.pendingTracks.push(e.track), - (this.pendingBytes += e.boxes.byteLength), - "video" === e.track.type && - ((this.videoTrack = e.track), - this.pendingBoxes.push(e.boxes)), - void ( - "audio" === e.track.type && - ((this.audioTrack = e.track), - this.pendingBoxes.unshift(e.boxes)) - )); - }); - }).prototype = new j()), - (_t.prototype.flush = function (e) { - var t, - i, - n, - r = 0, - a = { - captions: [], - captionStreams: {}, - metadata: [], - info: {}, - }, - s = 0; - if (this.pendingTracks.length < this.numberOfTracks) { - if ("VideoSegmentStream" !== e && "AudioSegmentStream" !== e) - return; - if (this.remuxTracks) return; - if (0 === this.pendingTracks.length) - return ( - this.emittedTracks++, - void ( - this.emittedTracks >= this.numberOfTracks && - (this.trigger("done"), (this.emittedTracks = 0)) - ) - ); - } - if ( - (this.videoTrack - ? ((s = this.videoTrack.timelineStartInfo.pts), - St.forEach(function (e) { - a.info[e] = this.videoTrack[e]; - }, this)) - : this.audioTrack && - ((s = this.audioTrack.timelineStartInfo.pts), - Tt.forEach(function (e) { - a.info[e] = this.audioTrack[e]; - }, this)), - this.videoTrack || this.audioTrack) - ) { - for ( - 1 === this.pendingTracks.length - ? (a.type = this.pendingTracks[0].type) - : (a.type = "combined"), - this.emittedTracks += this.pendingTracks.length, - e = Q(this.pendingTracks), - a.initSegment = new Uint8Array(e.byteLength), - a.initSegment.set(e), - a.data = new Uint8Array(this.pendingBytes), - n = 0; - n < this.pendingBoxes.length; - n++ - ) - a.data.set(this.pendingBoxes[n], r), - (r += this.pendingBoxes[n].byteLength); - for (n = 0; n < this.pendingCaptions.length; n++) - ((t = this.pendingCaptions[n]).startTime = pe( - t.startPts, - s, - this.keepOriginalTimestamps, - )), - (t.endTime = pe(t.endPts, s, this.keepOriginalTimestamps)), - (a.captionStreams[t.stream] = !0), - a.captions.push(t); - for (n = 0; n < this.pendingMetadata.length; n++) - ((i = this.pendingMetadata[n]).cueTime = pe( - i.pts, - s, - this.keepOriginalTimestamps, - )), - a.metadata.push(i); - for ( - a.metadata.dispatchType = this.metadataStream.dispatchType, - this.pendingTracks.length = 0, - this.videoTrack = null, - this.pendingBoxes.length = 0, - this.pendingCaptions.length = 0, - this.pendingBytes = 0, - this.pendingMetadata.length = 0, - this.trigger("data", a), - n = 0; - n < a.captions.length; - n++ - ) - (t = a.captions[n]), this.trigger("caption", t); - for (n = 0; n < a.metadata.length; n++) - (i = a.metadata[n]), this.trigger("id3Frame", i); - } - this.emittedTracks >= this.numberOfTracks && - (this.trigger("done"), (this.emittedTracks = 0)); - }), - (_t.prototype.setRemux = function (e) { - this.remuxTracks = e; - }), - ((vt = function (n) { - var r, - a, - s = this, - i = !0; - vt.prototype.init.call(this), - (this.baseMediaDecodeTime = - (n = n || {}).baseMediaDecodeTime || 0), - (this.transmuxPipeline_ = {}), - (this.setupAacPipeline = function () { - var t = {}; - ((this.transmuxPipeline_ = t).type = "aac"), - (t.metadataStream = new Je.MetadataStream()), - (t.aacStream = new bt()), - (t.audioTimestampRolloverStream = - new Je.TimestampRolloverStream("audio")), - (t.timedMetadataTimestampRolloverStream = - new Je.TimestampRolloverStream("timed-metadata")), - (t.adtsStream = new rt()), - (t.coalesceStream = new _t(n, t.metadataStream)), - (t.headOfPipeline = t.aacStream), - t.aacStream - .pipe(t.audioTimestampRolloverStream) - .pipe(t.adtsStream), - t.aacStream - .pipe(t.timedMetadataTimestampRolloverStream) - .pipe(t.metadataStream) - .pipe(t.coalesceStream), - t.metadataStream.on("timestamp", function (e) { - t.aacStream.setTimestamp(e.timeStamp); - }), - t.aacStream.on("data", function (e) { - ("timed-metadata" !== e.type && "audio" !== e.type) || - t.audioSegmentStream || - ((a = a || { - timelineStartInfo: { - baseMediaDecodeTime: s.baseMediaDecodeTime, - }, - codec: "adts", - type: "audio", - }), - t.coalesceStream.numberOfTracks++, - (t.audioSegmentStream = new Ct(a, n)), - t.audioSegmentStream.on( - "log", - s.getLogTrigger_("audioSegmentStream"), - ), - t.audioSegmentStream.on( - "timingInfo", - s.trigger.bind(s, "audioTimingInfo"), - ), - t.adtsStream - .pipe(t.audioSegmentStream) - .pipe(t.coalesceStream), - s.trigger("trackinfo", { - hasAudio: !!a, - hasVideo: !!r, - })); - }), - t.coalesceStream.on( - "data", - this.trigger.bind(this, "data"), - ), - t.coalesceStream.on( - "done", - this.trigger.bind(this, "done"), - ), - ft(this, t); - }), - (this.setupTsPipeline = function () { - var i = {}; - ((this.transmuxPipeline_ = i).type = "ts"), - (i.metadataStream = new Je.MetadataStream()), - (i.packetStream = new Je.TransportPacketStream()), - (i.parseStream = new Je.TransportParseStream()), - (i.elementaryStream = new Je.ElementaryStream()), - (i.timestampRolloverStream = - new Je.TimestampRolloverStream()), - (i.adtsStream = new rt()), - (i.h264Stream = new wt()), - (i.captionStream = new Je.CaptionStream(n)), - (i.coalesceStream = new _t(n, i.metadataStream)), - (i.headOfPipeline = i.packetStream), - i.packetStream - .pipe(i.parseStream) - .pipe(i.elementaryStream) - .pipe(i.timestampRolloverStream), - i.timestampRolloverStream.pipe(i.h264Stream), - i.timestampRolloverStream.pipe(i.adtsStream), - i.timestampRolloverStream - .pipe(i.metadataStream) - .pipe(i.coalesceStream), - i.h264Stream.pipe(i.captionStream).pipe(i.coalesceStream), - i.elementaryStream.on("data", function (e) { - var t; - if ("metadata" === e.type) { - for (t = e.tracks.length; t--; ) - r || "video" !== e.tracks[t].type - ? a || - "audio" !== e.tracks[t].type || - ((a = - e.tracks[ - t - ]).timelineStartInfo.baseMediaDecodeTime = - s.baseMediaDecodeTime) - : ((r = - e.tracks[ - t - ]).timelineStartInfo.baseMediaDecodeTime = - s.baseMediaDecodeTime); - r && - !i.videoSegmentStream && - (i.coalesceStream.numberOfTracks++, - (i.videoSegmentStream = new yt(r, n)), - i.videoSegmentStream.on( - "log", - s.getLogTrigger_("videoSegmentStream"), - ), - i.videoSegmentStream.on( - "timelineStartInfo", - function (e) { - a && - !n.keepOriginalTimestamps && - ((a.timelineStartInfo = e), - i.audioSegmentStream.setEarliestDts( - e.dts - s.baseMediaDecodeTime, - )); - }, - ), - i.videoSegmentStream.on( - "processedGopsInfo", - s.trigger.bind(s, "gopInfo"), - ), - i.videoSegmentStream.on( - "segmentTimingInfo", - s.trigger.bind(s, "videoSegmentTimingInfo"), - ), - i.videoSegmentStream.on( - "baseMediaDecodeTime", - function (e) { - a && - i.audioSegmentStream.setVideoBaseMediaDecodeTime( - e, - ); - }, - ), - i.videoSegmentStream.on( - "timingInfo", - s.trigger.bind(s, "videoTimingInfo"), - ), - i.h264Stream - .pipe(i.videoSegmentStream) - .pipe(i.coalesceStream)), - a && - !i.audioSegmentStream && - (i.coalesceStream.numberOfTracks++, - (i.audioSegmentStream = new Ct(a, n)), - i.audioSegmentStream.on( - "log", - s.getLogTrigger_("audioSegmentStream"), - ), - i.audioSegmentStream.on( - "timingInfo", - s.trigger.bind(s, "audioTimingInfo"), - ), - i.audioSegmentStream.on( - "segmentTimingInfo", - s.trigger.bind(s, "audioSegmentTimingInfo"), - ), - i.adtsStream - .pipe(i.audioSegmentStream) - .pipe(i.coalesceStream)), - s.trigger("trackinfo", { - hasAudio: !!a, - hasVideo: !!r, - }); - } - }), - i.coalesceStream.on( - "data", - this.trigger.bind(this, "data"), - ), - i.coalesceStream.on("id3Frame", function (e) { - (e.dispatchType = i.metadataStream.dispatchType), - s.trigger("id3Frame", e); - }), - i.coalesceStream.on( - "caption", - this.trigger.bind(this, "caption"), - ), - i.coalesceStream.on( - "done", - this.trigger.bind(this, "done"), - ), - ft(this, i); - }), - (this.setBaseMediaDecodeTime = function (e) { - var t = this.transmuxPipeline_; - n.keepOriginalTimestamps || (this.baseMediaDecodeTime = e), - a && - ((a.timelineStartInfo.dts = void 0), - (a.timelineStartInfo.pts = void 0), - _e(a), - t.audioTimestampRolloverStream && - t.audioTimestampRolloverStream.discontinuity()), - r && - (t.videoSegmentStream && - (t.videoSegmentStream.gopCache_ = []), - (r.timelineStartInfo.dts = void 0), - (r.timelineStartInfo.pts = void 0), - _e(r), - t.captionStream.reset()), - t.timestampRolloverStream && - t.timestampRolloverStream.discontinuity(); - }), - (this.setAudioAppendStart = function (e) { - a && - this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart( - e, - ); - }), - (this.setRemux = function (e) { - var t = this.transmuxPipeline_; - (n.remux = e), - t && t.coalesceStream && t.coalesceStream.setRemux(e); - }), - (this.alignGopsWith = function (e) { - r && - this.transmuxPipeline_.videoSegmentStream && - this.transmuxPipeline_.videoSegmentStream.alignGopsWith(e); - }), - (this.getLogTrigger_ = function (t) { - var i = this; - return function (e) { - (e.stream = t), i.trigger("log", e); - }; - }), - (this.push = function (e) { - var t; - i && - ((t = Et(e)) && "aac" !== this.transmuxPipeline_.type - ? this.setupAacPipeline() - : t || - "ts" === this.transmuxPipeline_.type || - this.setupTsPipeline(), - (i = !1)), - this.transmuxPipeline_.headOfPipeline.push(e); - }), - (this.flush = function () { - (i = !0), this.transmuxPipeline_.headOfPipeline.flush(); - }), - (this.endTimeline = function () { - this.transmuxPipeline_.headOfPipeline.endTimeline(); - }), - (this.reset = function () { - this.transmuxPipeline_.headOfPipeline && - this.transmuxPipeline_.headOfPipeline.reset(); - }), - (this.resetCaptions = function () { - this.transmuxPipeline_.captionStream && - this.transmuxPipeline_.captionStream.reset(); - }); - }).prototype = new j()); - function It(e, c) { - var i = Rt(e, ["moof", "traf"]), - e = Rt(e, ["mdat"]), - d = {}, - n = []; - return ( - e.forEach(function (e, t) { - t = i[t]; - n.push({ mdat: e, traf: t }); - }), - n.forEach(function (e) { - var t, - i, - n, - r, - a, - s = e.mdat, - o = e.traf, - u = Rt(o, ["tfhd"]), - l = Ht(u[0]), - e = l.trackId, - u = Rt(o, ["tfdt"]), - u = 0 < u.length ? Bt(u[0]).baseMediaDecodeTime : 0, - o = Rt(o, ["trun"]); - c === e && - 0 < o.length && - ((o = o), - (t = u), - (i = (l = l).defaultSampleDuration || 0), - (n = l.defaultSampleSize || 0), - (r = l.trackId), - (a = []), - o.forEach(function (e) { - e = jt(e).samples; - e.forEach(function (e) { - void 0 === e.duration && (e.duration = i), - void 0 === e.size && (e.size = n), - (e.trackId = r), - (e.dts = t), - void 0 === e.compositionTimeOffset && - (e.compositionTimeOffset = 0), - "bigint" == typeof t - ? ((e.pts = t + qt.BigInt(e.compositionTimeOffset)), - (t += qt.BigInt(e.duration))) - : ((e.pts = t + e.compositionTimeOffset), - (t += e.duration)); - }), - (a = a.concat(e)); - }), - (s = (function (e, t, i) { - for ( - var n, - r, - a = new DataView(e.buffer, e.byteOffset, e.byteLength), - s = { logs: [], seiNals: [] }, - o = 0; - o + 4 < e.length; - o += n - ) - if (((n = a.getUint32(o)), (o += 4), !(n <= 0))) - switch (31 & e[o]) { - case 6: - var u = e.subarray(o + 1, o + 1 + n), - l = (function (e, t) { - for (var i = e, n = 0; n < t.length; n++) { - var r = t[n]; - if (i < r.size) return r; - i -= r.size; - } - return null; - })(o, t), - u = { - nalUnitType: "sei_rbsp", - size: n, - data: u, - escapedRBSP: Vt(u), - trackId: i, - }; - if (l) (u.pts = l.pts), (u.dts = l.dts), (r = l); - else { - if (!r) { - s.logs.push({ - level: "warn", - message: - "We've encountered a nal unit without data at " + - o + - " for trackId " + - i + - ". See mux.js#223.", - }); - break; - } - (u.pts = r.pts), (u.dts = r.dts); - } - s.seiNals.push(u); - } - return s; - })(s, a, e)), - d[e] || (d[e] = { seiNals: [], logs: [] }), - (d[e].seiNals = d[e].seiNals.concat(s.seiNals)), - (d[e].logs = d[e].logs.concat(s.logs))); - }), - d - ); - } - function xt(e) { - var t = 31 & e[1]; - return (t <<= 8), (t |= e[2]); - } - function At(e) { - return !!(64 & e[1]); - } - function Pt(e) { - var t = 0; - return 1 < (48 & e[3]) >>> 4 && (t += e[4] + 1), t; - } - function Lt(e) { - switch (e) { - case 5: - return "slice_layer_without_partitioning_rbsp_idr"; - case 6: - return "sei_rbsp"; - case 7: - return "seq_parameter_set_rbsp"; - case 8: - return "pic_parameter_set_rbsp"; - case 9: - return "access_unit_delimiter_rbsp"; - default: - return null; - } - } - var Dt = { - Transmuxer: vt, - VideoSegmentStream: yt, - AudioSegmentStream: Ct, - AUDIO_PROPERTIES: Tt, - VIDEO_PROPERTIES: St, - generateSegmentTimingInfo: gt, - }, - e = function (e) { - return e >>> 0; - }, - Ot = function (e) { - var t = ""; - return ( - (t += String.fromCharCode(e[0])), - (t += String.fromCharCode(e[1])), - (t += String.fromCharCode(e[2])), - (t += String.fromCharCode(e[3])) - ); - }, - Mt = e, - Rt = function e(t, i) { - var n, - r, - a, - s = []; - if (!i.length) return null; - for (n = 0; n < t.byteLength; ) - (r = Mt( - (t[n] << 24) | (t[n + 1] << 16) | (t[n + 2] << 8) | t[n + 3], - )), - (a = Ot(t.subarray(n + 4, n + 8))), - (r = 1 < r ? n + r : t.byteLength), - a === i[0] && - (1 === i.length - ? s.push(t.subarray(n + 8, r)) - : (a = e(t.subarray(n + 8, r), i.slice(1))).length && - (s = s.concat(a))), - (n = r); - return s; - }, - Nt = e, - Ut = q.getUint64, - Bt = function (e) { - var t = { - version: e[0], - flags: new Uint8Array(e.subarray(1, 4)), - }; - return ( - 1 === t.version - ? (t.baseMediaDecodeTime = Ut(e.subarray(4))) - : (t.baseMediaDecodeTime = Nt( - (e[4] << 24) | (e[5] << 16) | (e[6] << 8) | e[7], - )), - t - ); - }, - Ft = function (e) { - return { - isLeading: (12 & e[0]) >>> 2, - dependsOn: 3 & e[0], - isDependedOn: (192 & e[1]) >>> 6, - hasRedundancy: (48 & e[1]) >>> 4, - paddingValue: (14 & e[1]) >>> 1, - isNonSyncSample: 1 & e[1], - degradationPriority: (e[2] << 8) | e[3], - }; - }, - jt = function (e) { - var t, - i = { - version: e[0], - flags: new Uint8Array(e.subarray(1, 4)), - samples: [], - }, - n = new DataView(e.buffer, e.byteOffset, e.byteLength), - r = 1 & i.flags[2], - a = 4 & i.flags[2], - s = 1 & i.flags[1], - o = 2 & i.flags[1], - u = 4 & i.flags[1], - l = 8 & i.flags[1], - c = n.getUint32(4), - d = 8; - for ( - r && ((i.dataOffset = n.getInt32(d)), (d += 4)), - a && - c && - ((t = { flags: Ft(e.subarray(d, d + 4)) }), - (d += 4), - s && ((t.duration = n.getUint32(d)), (d += 4)), - o && ((t.size = n.getUint32(d)), (d += 4)), - l && - (1 === i.version - ? (t.compositionTimeOffset = n.getInt32(d)) - : (t.compositionTimeOffset = n.getUint32(d)), - (d += 4)), - i.samples.push(t), - c--); - c--; - - ) - (t = {}), - s && ((t.duration = n.getUint32(d)), (d += 4)), - o && ((t.size = n.getUint32(d)), (d += 4)), - u && ((t.flags = Ft(e.subarray(d, d + 4))), (d += 4)), - l && - (1 === i.version - ? (t.compositionTimeOffset = n.getInt32(d)) - : (t.compositionTimeOffset = n.getUint32(d)), - (d += 4)), - i.samples.push(t); - return i; - }, - Ht = function (e) { - var t = new DataView(e.buffer, e.byteOffset, e.byteLength), - i = { - version: e[0], - flags: new Uint8Array(e.subarray(1, 4)), - trackId: t.getUint32(4), - }, - n = 1 & i.flags[2], - r = 2 & i.flags[2], - a = 8 & i.flags[2], - s = 16 & i.flags[2], - o = 32 & i.flags[2], - u = 65536 & i.flags[0], - l = 131072 & i.flags[0], - e = 8; - return ( - n && ((e += 4), (i.baseDataOffset = t.getUint32(12)), (e += 4)), - r && ((i.sampleDescriptionIndex = t.getUint32(e)), (e += 4)), - a && ((i.defaultSampleDuration = t.getUint32(e)), (e += 4)), - s && ((i.defaultSampleSize = t.getUint32(e)), (e += 4)), - o && (i.defaultSampleFlags = t.getUint32(e)), - u && (i.durationIsEmpty = !0), - !n && l && (i.baseDataOffsetIsMoof = !0), - i - ); - }, - j = - "undefined" != typeof globalThis - ? globalThis - : "undefined" != typeof window - ? window - : "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : {}, - j = - "undefined" != typeof window - ? window - : "undefined" != typeof j - ? j - : "undefined" != typeof self - ? self - : {}, - qt = j, - Vt = ke, - Wt = Fe.CaptionStream, - Gt = function () { - var t, - r, - a, - s, - o, - i, - n = !1; - (this.isInitialized = function () { - return n; - }), - (this.init = function (e) { - (t = new Wt()), - (n = !0), - (i = !!e && e.isPartial), - t.on("data", function (e) { - (e.startTime = e.startPts / s), - (e.endTime = e.endPts / s), - o.captions.push(e), - (o.captionStreams[e.stream] = !0); - }), - t.on("log", function (e) { - o.logs.push(e); - }); - }), - (this.isNewInit = function (e, t) { - return ( - !( - (e && 0 === e.length) || - (t && "object" == typeof t && 0 === Object.keys(t).length) - ) && - (a !== e[0] || s !== t[a]) - ); - }), - (this.parse = function (e, t, i) { - if (!this.isInitialized()) return null; - if (!t || !i) return null; - if (this.isNewInit(t, i)) (a = t[0]), (s = i[a]); - else if (null === a || !s) return r.push(e), null; - for (; 0 < r.length; ) { - var n = r.shift(); - this.parse(n, t, i); - } - return ( - (e = (function (e, t, i) { - if (null === t) return null; - t = It(e, t)[t] || {}; - return { seiNals: t.seiNals, logs: t.logs, timescale: i }; - })(e, a, s)) && - e.logs && - (o.logs = o.logs.concat(e.logs)), - null !== e && e.seiNals - ? (this.pushNals(e.seiNals), this.flushStream(), o) - : o.logs.length - ? { logs: o.logs, captions: [], captionStreams: [] } - : null - ); - }), - (this.pushNals = function (e) { - if (!this.isInitialized() || !e || 0 === e.length) - return null; - e.forEach(function (e) { - t.push(e); - }); - }), - (this.flushStream = function () { - if (!this.isInitialized()) return null; - i ? t.partialFlush() : t.flush(); - }), - (this.clearParsedCaptions = function () { - (o.captions = []), (o.captionStreams = {}), (o.logs = []); - }), - (this.resetCaptionStream = function () { - if (!this.isInitialized()) return null; - t.reset(); - }), - (this.clearAllCaptions = function () { - this.clearParsedCaptions(), this.resetCaptionStream(); - }), - (this.reset = function () { - (r = []), - (s = a = null), - o - ? this.clearParsedCaptions() - : (o = { captions: [], captionStreams: {}, logs: [] }), - this.resetCaptionStream(); - }), - this.reset(); - }, - zt = e, - Xt = function (e) { - return ("00" + e.toString(16)).slice(-2); - }, - Kt = q.getUint64, - j = function (e) { - return Rt(e, ["moov", "trak"]).reduce(function (e, t) { - var i, - n, - r = Rt(t, ["tkhd"])[0]; - return r - ? ((i = r[0]), - (r = zt( - (r[(n = 0 === i ? 12 : 20)] << 24) | - (r[1 + n] << 16) | - (r[2 + n] << 8) | - r[3 + n], - )), - (t = Rt(t, ["mdia", "mdhd"])[0]) - ? ((i = t[0]), - (e[r] = zt( - (t[(n = 0 === i ? 12 : 20)] << 24) | - (t[1 + n] << 16) | - (t[2 + n] << 8) | - t[3 + n], - )), - e) - : null) - : null; - }, {}); - }, - ke = function (a, e) { - e = Rt(e, ["moof", "traf"]).reduce(function (e, t) { - var i, - n = Rt(t, ["tfhd"])[0], - r = zt((n[4] << 24) | (n[5] << 16) | (n[6] << 8) | n[7]), - n = a[r] || 9e4, - r = Rt(t, ["tfdt"])[0], - t = new DataView(r.buffer, r.byteOffset, r.byteLength), - t = 1 === r[0] ? Kt(r.subarray(4, 12)) : t.getUint32(4); - return ( - "bigint" == typeof t - ? (i = t / qt.BigInt(n)) - : "number" != typeof t || isNaN(t) || (i = t / n), - (e = - (i = i < Number.MAX_SAFE_INTEGER ? Number(i) : i) < e - ? i - : e) - ); - }, 1 / 0); - return "bigint" == typeof e || isFinite(e) ? e : 0; - }, - e = function (e) { - var e = Rt(e, ["moov", "trak"]), - n = []; - return ( - e.forEach(function (e) { - var t = Rt(e, ["mdia", "hdlr"]), - i = Rt(e, ["tkhd"]); - t.forEach(function (e, t) { - (e = Ot(e.subarray(8, 12))), (t = i[t]); - "vide" === e && - ((t = - 0 === - (t = new DataView( - t.buffer, - t.byteOffset, - t.byteLength, - )).getUint8(0) - ? t.getUint32(12) - : t.getUint32(20)), - n.push(t)); - }); - }), - n - ); - }, - Yt = function (e) { - var t = 0 === e[0] ? 12 : 20; - return zt( - (e[t] << 24) | (e[1 + t] << 16) | (e[2 + t] << 8) | e[3 + t], - ); - }, - q = function (e) { - var e = Rt(e, ["moov", "trak"]), - s = []; - return ( - e.forEach(function (e) { - var t = {}, - i = Rt(e, ["tkhd"])[0]; - i && - ((i = (n = new DataView( - i.buffer, - i.byteOffset, - i.byteLength, - )).getUint8(0)), - (t.id = 0 === i ? n.getUint32(12) : n.getUint32(20))); - var n = Rt(e, ["mdia", "hdlr"])[0]; - n && - ((a = Ot(n.subarray(8, 12))), - (t.type = - "vide" === a ? "video" : "soun" === a ? "audio" : a)); - var r, - a = Rt(e, ["mdia", "minf", "stbl", "stsd"])[0]; - a && - ((a = a.subarray(8)), - (t.codec = Ot(a.subarray(4, 8))), - (a = Rt(a, [t.codec])[0]) && - (/^[asm]vc[1-9]$/i.test(t.codec) - ? ((r = a.subarray(78)), - "avcC" === Ot(r.subarray(4, 8)) && 11 < r.length - ? ((t.codec += "."), - (t.codec += Xt(r[9])), - (t.codec += Xt(r[10])), - (t.codec += Xt(r[11]))) - : (t.codec = "avc1.4d400d")) - : /^mp4[a,v]$/i.test(t.codec) - ? ((r = a.subarray(28)), - "esds" === Ot(r.subarray(4, 8)) && - 20 < r.length && - 0 !== r[19] - ? ((t.codec += "." + Xt(r[19])), - (t.codec += - "." + - Xt((r[20] >>> 2) & 63).replace(/^0/, ""))) - : (t.codec = "mp4a.40.2")) - : (t.codec = t.codec.toLowerCase()))); - e = Rt(e, ["mdia", "mdhd"])[0]; - e && (t.timescale = Yt(e)), s.push(t); - }), - s - ); - }, - Qt = ke, - $t = q, - Jt = Ie, - Zt = {}; - (Zt.ts = { - parseType: function (e, t) { - e = xt(e); - return 0 === e ? "pat" : e === t ? "pmt" : t ? "pes" : null; - }, - parsePat: function (e) { - var t = At(e), - i = 4 + Pt(e); - return t && (i += e[i] + 1), ((31 & e[i + 10]) << 8) | e[i + 11]; - }, - parsePmt: function (e) { - var t = {}, - i = At(e), - n = 4 + Pt(e); - if ((i && (n += e[n] + 1), 1 & e[n + 5])) { - for ( - var r = 3 + (((15 & e[n + 1]) << 8) | e[n + 2]) - 4, - a = 12 + (((15 & e[n + 10]) << 8) | e[n + 11]); - a < r; - - ) { - var s = n + a; - (t[((31 & e[s + 1]) << 8) | e[s + 2]] = e[s]), - (a += 5 + (((15 & e[s + 3]) << 8) | e[s + 4])); - } - return t; - } - }, - parsePayloadUnitStartIndicator: At, - parsePesType: function (e, t) { - switch (t[xt(e)]) { - case je.H264_STREAM_TYPE: - return "video"; - case je.ADTS_STREAM_TYPE: - return "audio"; - case je.METADATA_STREAM_TYPE: - return "timed-metadata"; - default: - return null; - } - }, - parsePesTime: function (e) { - if (!At(e)) return null; - var t = 4 + Pt(e); - if (t >= e.byteLength) return null; - var i = null, - n = e[t + 7]; - return ( - 192 & n && - (((i = {}).pts = - ((14 & e[t + 9]) << 27) | - ((255 & e[t + 10]) << 20) | - ((254 & e[t + 11]) << 12) | - ((255 & e[t + 12]) << 5) | - ((254 & e[t + 13]) >>> 3)), - (i.pts *= 4), - (i.pts += (6 & e[t + 13]) >>> 1), - (i.dts = i.pts), - 64 & n && - ((i.dts = - ((14 & e[t + 14]) << 27) | - ((255 & e[t + 15]) << 20) | - ((254 & e[t + 16]) << 12) | - ((255 & e[t + 17]) << 5) | - ((254 & e[t + 18]) >>> 3)), - (i.dts *= 4), - (i.dts += (6 & e[t + 18]) >>> 1))), - i - ); - }, - videoPacketContainsKeyFrame: function (e) { - for ( - var t = 4 + Pt(e), i = e.subarray(t), n = 0, r = 0, a = !1; - r < i.byteLength - 3; - r++ - ) - if (1 === i[r + 2]) { - n = r + 5; - break; - } - for (; n < i.byteLength; ) - switch (i[n]) { - case 0: - if (0 !== i[n - 1]) { - n += 2; - break; - } - if (0 !== i[n - 2]) { - n++; - break; - } - for ( - r + 3 !== n - 2 && - "slice_layer_without_partitioning_rbsp_idr" === - Lt(31 & i[r + 3]) && - (a = !0); - 1 !== i[++n] && n < i.length; - - ); - (r = n - 2), (n += 3); - break; - case 1: - if (0 !== i[n - 1] || 0 !== i[n - 2]) { - n += 3; - break; - } - "slice_layer_without_partitioning_rbsp_idr" === - Lt(31 & i[r + 3]) && (a = !0), - (r = n - 2), - (n += 3); - break; - default: - n += 3; - } - return ( - (i = i.subarray(r)), - (n -= r), - (r = 0), - (a = - i && - 3 < i.byteLength && - "slice_layer_without_partitioning_rbsp_idr" === - Lt(31 & i[r + 3]) - ? !0 - : a) - ); - }, - }), - (Zt.aac = dt); - function ei(e, t, i) { - for (var n, r, a, s, o = 0, u = 188, l = !1; u <= e.byteLength; ) - if (71 !== e[o] || (71 !== e[u] && u !== e.byteLength)) o++, u++; - else { - if ( - ((n = e.subarray(o, u)), - "pes" === Zt.ts.parseType(n, t.pid) && - ((r = Zt.ts.parsePesType(n, t.table)), - (a = Zt.ts.parsePayloadUnitStartIndicator(n)), - "audio" === r && - a && - (s = Zt.ts.parsePesTime(n)) && - ((s.type = "audio"), i.audio.push(s), (l = !0))), - l) - ) - break; - (o += 188), (u += 188); - } - for (o = (u = e.byteLength) - 188, l = !1; 0 <= o; ) - if (71 !== e[o] || (71 !== e[u] && u !== e.byteLength)) o--, u--; - else { - if ( - ((n = e.subarray(o, u)), - "pes" === Zt.ts.parseType(n, t.pid) && - ((r = Zt.ts.parsePesType(n, t.table)), - (a = Zt.ts.parsePayloadUnitStartIndicator(n)), - "audio" === r && - a && - (s = Zt.ts.parsePesTime(n)) && - ((s.type = "audio"), i.audio.push(s), (l = !0))), - l) - ) - break; - (o -= 188), (u -= 188); - } - } - function ti(e) { - var t, - i = { pid: null, table: null }, - n = {}; - for (t in (!(function (e, t) { - for (var i, n = 0, r = 188; r < e.byteLength; ) - if (71 !== e[n] || 71 !== e[r]) n++, r++; - else { - switch (((i = e.subarray(n, r)), Zt.ts.parseType(i, t.pid))) { - case "pat": - t.pid = Zt.ts.parsePat(i); - break; - case "pmt": - var a = Zt.ts.parsePmt(i); - (t.table = t.table || {}), - Object.keys(a).forEach(function (e) { - t.table[e] = a[e]; - }); - } - (n += 188), (r += 188); - } - })(e, i), - i.table)) - if (i.table.hasOwnProperty(t)) - switch (i.table[t]) { - case je.H264_STREAM_TYPE: - (n.video = []), - (function (e, t, i) { - for ( - var n, - r, - a, - s, - o, - u, - l, - c, - d = 0, - h = 188, - p = !1, - f = { data: [], size: 0 }; - h < e.byteLength; - - ) - if (71 !== e[d] || 71 !== e[h]) d++, h++; - else { - if ( - ((n = e.subarray(d, h)), - "pes" === Zt.ts.parseType(n, t.pid)) - ) - if ( - ((r = Zt.ts.parsePesType(n, t.table)), - (a = Zt.ts.parsePayloadUnitStartIndicator(n)), - "video" === r && - (a && - !p && - (s = Zt.ts.parsePesTime(n)) && - ((s.type = "video"), - i.video.push(s), - (p = !0)), - !i.firstKeyFrame)) - ) { - if (a && 0 !== f.size) { - for ( - o = new Uint8Array(f.size), u = 0; - f.data.length; - - ) - (l = f.data.shift()), - o.set(l, u), - (u += l.byteLength); - !Zt.ts.videoPacketContainsKeyFrame(o) || - ((c = Zt.ts.parsePesTime(o)) && - ((i.firstKeyFrame = c), - (i.firstKeyFrame.type = "video"))), - (f.size = 0); - } - f.data.push(n), (f.size += n.byteLength); - } - if (p && i.firstKeyFrame) break; - (d += 188), (h += 188); - } - for (d = (h = e.byteLength) - 188, p = !1; 0 <= d; ) - if (71 !== e[d] || 71 !== e[h]) d--, h--; - else { - if ( - ((n = e.subarray(d, h)), - "pes" === Zt.ts.parseType(n, t.pid) && - ((r = Zt.ts.parsePesType(n, t.table)), - (a = Zt.ts.parsePayloadUnitStartIndicator(n)), - "video" === r && - a && - (s = Zt.ts.parsePesTime(n)) && - ((s.type = "video"), - i.video.push(s), - (p = !0))), - p) - ) - break; - (d -= 188), (h -= 188); - } - })(e, i, n), - 0 === n.video.length && delete n.video; - break; - case je.ADTS_STREAM_TYPE: - (n.audio = []), - ei(e, i, n), - 0 === n.audio.length && delete n.audio; - } - return n; - } - var ii = ue, - ni = function (e, t) { - var i, - n, - r = ( - Zt.aac.isLikelyAacData(e) - ? function (e) { - for ( - var t, - i = !1, - n = 0, - r = null, - a = null, - s = 0, - o = 0; - 3 <= e.length - o; - - ) { - switch (Zt.aac.parseType(e, o)) { - case "timed-metadata": - if (e.length - o < 10) { - i = !0; - break; - } - if ( - (s = Zt.aac.parseId3TagSize(e, o)) > e.length - ) { - i = !0; - break; - } - null === a && - ((t = e.subarray(o, o + s)), - (a = Zt.aac.parseAacTimestamp(t))), - (o += s); - break; - case "audio": - if (e.length - o < 7) { - i = !0; - break; - } - if ((s = Zt.aac.parseAdtsSize(e, o)) > e.length) { - i = !0; - break; - } - null === r && - ((t = e.subarray(o, o + s)), - (r = Zt.aac.parseSampleRate(t))), - n++, - (o += s); - break; - default: - o++; - } - if (i) return null; - } - if (null === r || null === a) return null; - var u = ii / r; - return { - audio: [ - { type: "audio", dts: a, pts: a }, - { - type: "audio", - dts: a + 1024 * n * u, - pts: a + 1024 * n * u, - }, - ], - }; - } - : ti - )(e); - return r && (r.audio || r.video) - ? ((e = t), - (t = r).audio && - t.audio.length && - (("undefined" != typeof (i = e) && !isNaN(i)) || - (i = t.audio[0].dts), - t.audio.forEach(function (e) { - (e.dts = Jt(e.dts, i)), - (e.pts = Jt(e.pts, i)), - (e.dtsTime = e.dts / ii), - (e.ptsTime = e.pts / ii); - })), - t.video && - t.video.length && - (("undefined" != typeof (n = e) && !isNaN(n)) || - (n = t.video[0].dts), - t.video.forEach(function (e) { - (e.dts = Jt(e.dts, n)), - (e.pts = Jt(e.pts, n)), - (e.dtsTime = e.dts / ii), - (e.ptsTime = e.pts / ii); - }), - t.firstKeyFrame && - (((t = t.firstKeyFrame).dts = Jt(t.dts, n)), - (t.pts = Jt(t.pts, n)), - (t.dtsTime = t.dts / ii), - (t.ptsTime = t.pts / ii))), - r) - : null; - }, - ri = (function () { - function e(e, t) { - (this.options = t || {}), (this.self = e), this.init(); - } - var t = e.prototype; - return ( - (t.init = function () { - var i, e; - this.transmuxer && this.transmuxer.dispose(), - (this.transmuxer = new Dt.Transmuxer(this.options)), - (i = this.self), - (e = this.transmuxer).on("data", function (e) { - var t = e.initSegment; - e.initSegment = { - data: t.buffer, - byteOffset: t.byteOffset, - byteLength: t.byteLength, - }; - t = e.data; - (e.data = t.buffer), - i.postMessage( - { - action: "data", - segment: e, - byteOffset: t.byteOffset, - byteLength: t.byteLength, - }, - [e.data], - ); - }), - e.on("done", function (e) { - i.postMessage({ action: "done" }); - }), - e.on("gopInfo", function (e) { - i.postMessage({ action: "gopInfo", gopInfo: e }); - }), - e.on("videoSegmentTimingInfo", function (e) { - var t = { - start: { - decode: ce(e.start.dts), - presentation: ce(e.start.pts), - }, - end: { - decode: ce(e.end.dts), - presentation: ce(e.end.pts), - }, - baseMediaDecodeTime: ce(e.baseMediaDecodeTime), - }; - e.prependedContentDuration && - (t.prependedContentDuration = ce( - e.prependedContentDuration, - )), - i.postMessage({ - action: "videoSegmentTimingInfo", - videoSegmentTimingInfo: t, - }); - }), - e.on("audioSegmentTimingInfo", function (e) { - var t = { - start: { - decode: ce(e.start.dts), - presentation: ce(e.start.pts), - }, - end: { - decode: ce(e.end.dts), - presentation: ce(e.end.pts), - }, - baseMediaDecodeTime: ce(e.baseMediaDecodeTime), - }; - e.prependedContentDuration && - (t.prependedContentDuration = ce( - e.prependedContentDuration, - )), - i.postMessage({ - action: "audioSegmentTimingInfo", - audioSegmentTimingInfo: t, - }); - }), - e.on("id3Frame", function (e) { - i.postMessage({ action: "id3Frame", id3Frame: e }); - }), - e.on("caption", function (e) { - i.postMessage({ action: "caption", caption: e }); - }), - e.on("trackinfo", function (e) { - i.postMessage({ action: "trackinfo", trackInfo: e }); - }), - e.on("audioTimingInfo", function (e) { - i.postMessage({ - action: "audioTimingInfo", - audioTimingInfo: { start: ce(e.start), end: ce(e.end) }, - }); - }), - e.on("videoTimingInfo", function (e) { - i.postMessage({ - action: "videoTimingInfo", - videoTimingInfo: { start: ce(e.start), end: ce(e.end) }, - }); - }), - e.on("log", function (e) { - i.postMessage({ action: "log", log: e }); - }); - }), - (t.pushMp4Captions = function (e) { - this.captionParser || - ((this.captionParser = new Gt()), - this.captionParser.init()); - var t = new Uint8Array(e.data, e.byteOffset, e.byteLength), - e = this.captionParser.parse(t, e.trackIds, e.timescales); - this.self.postMessage( - { - action: "mp4Captions", - captions: (e && e.captions) || [], - logs: (e && e.logs) || [], - data: t.buffer, - }, - [t.buffer], - ); - }), - (t.probeMp4StartTime = function (e) { - var t = e.timescales, - e = e.data, - t = Qt(t, e); - this.self.postMessage( - { action: "probeMp4StartTime", startTime: t, data: e }, - [e.buffer], - ); - }), - (t.probeMp4Tracks = function (e) { - var t = e.data, - e = $t(t); - this.self.postMessage( - { action: "probeMp4Tracks", tracks: e, data: t }, - [t.buffer], - ); - }), - (t.probeTs = function (e) { - var t = e.data, - i = e.baseStartTime, - e = "number" != typeof i || isNaN(i) ? void 0 : i * ue, - i = ni(t, e), - e = null; - i && - ((e = { - hasVideo: (i.video && 2 === i.video.length) || !1, - hasAudio: (i.audio && 2 === i.audio.length) || !1, - }).hasVideo && (e.videoStart = i.video[0].ptsTime), - e.hasAudio && (e.audioStart = i.audio[0].ptsTime)), - this.self.postMessage( - { action: "probeTs", result: e, data: t }, - [t.buffer], - ); - }), - (t.clearAllMp4Captions = function () { - this.captionParser && this.captionParser.clearAllCaptions(); - }), - (t.clearParsedMp4Captions = function () { - this.captionParser && - this.captionParser.clearParsedCaptions(); - }), - (t.push = function (e) { - e = new Uint8Array(e.data, e.byteOffset, e.byteLength); - this.transmuxer.push(e); - }), - (t.reset = function () { - this.transmuxer.reset(); - }), - (t.setTimestampOffset = function (e) { - e = e.timestampOffset || 0; - this.transmuxer.setBaseMediaDecodeTime(Math.round(le(e))); - }), - (t.setAudioAppendStart = function (e) { - this.transmuxer.setAudioAppendStart( - Math.ceil(le(e.appendStart)), - ); - }), - (t.setRemux = function (e) { - this.transmuxer.setRemux(e.remux); - }), - (t.flush = function (e) { - this.transmuxer.flush(), - self.postMessage({ action: "done", type: "transmuxed" }); - }), - (t.endTimeline = function () { - this.transmuxer.endTimeline(), - self.postMessage({ - action: "endedtimeline", - type: "transmuxed", - }); - }), - (t.alignGopsWith = function (e) { - this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice()); - }), - e - ); - })(); - self.onmessage = function (e) { - "init" === e.data.action && e.data.options - ? (this.messageHandlers = new ri(self, e.data.options)) - : (this.messageHandlers || (this.messageHandlers = new ri(self)), - e.data && - e.data.action && - "init" !== e.data.action && - this.messageHandlers[e.data.action] && - this.messageHandlers[e.data.action](e.data)); - }; - }), - ), - ), - Cl = function (e) { - (e.currentTransmux = null), - e.transmuxQueue.length && - ((e.currentTransmux = e.transmuxQueue.shift()), - "function" == typeof e.currentTransmux - ? e.currentTransmux() - : Du(e.currentTransmux)); - }, - Il = function (e) { - Mu("reset", e); - }, - xl = function (e) { - var t = new kl(); - (t.currentTransmux = null), (t.transmuxQueue = []); - var i = t.terminate; - return ( - (t.terminate = function () { - return ( - (t.currentTransmux = null), (t.transmuxQueue.length = 0), i.call(t) - ); - }), - t.postMessage({ action: "init", options: e }), - t - ); - }, - Al = 2, - Pl = -101, - Ll = -102, - Dl = Ro("CodecUtils"), - Ol = Ro("PlaylistSelector"), - ar = function () { - var e = (this.useDevicePixelRatio && window.devicePixelRatio) || 1; - return il( - this.playlists.master, - this.systemBandwidth, - parseInt(Zu(this.tech_.el(), "width"), 10) * e, - parseInt(Zu(this.tech_.el(), "height"), 10) * e, - this.limitRenditionByPlayerDimensions, - this.masterPlaylistController_, - ); - }, - Ml = (function (n) { - function e(e, t) { - var i = n.call(this) || this; - if (!e) throw new TypeError("Initialization settings are required"); - if ("function" != typeof e.currentTime) - throw new TypeError("No currentTime getter specified"); - if (!e.mediaSource) throw new TypeError("No MediaSource specified"); - return ( - (i.bandwidth = e.bandwidth), - (i.throughput = { rate: 0, count: 0 }), - (i.roundTrip = NaN), - i.resetStats_(), - (i.mediaIndex = null), - (i.partIndex = null), - (i.hasPlayed_ = e.hasPlayed), - (i.currentTime_ = e.currentTime), - (i.seekable_ = e.seekable), - (i.seeking_ = e.seeking), - (i.duration_ = e.duration), - (i.mediaSource_ = e.mediaSource), - (i.vhs_ = e.vhs), - (i.loaderType_ = e.loaderType), - (i.currentMediaInfo_ = void 0), - (i.startingMediaInfo_ = void 0), - (i.segmentMetadataTrack_ = e.segmentMetadataTrack), - (i.goalBufferLength_ = e.goalBufferLength), - (i.sourceType_ = e.sourceType), - (i.sourceUpdater_ = e.sourceUpdater), - (i.inbandTextTracks_ = e.inbandTextTracks), - (i.state_ = "INIT"), - (i.timelineChangeController_ = e.timelineChangeController), - (i.shouldSaveSegmentTimingInfo_ = !0), - (i.parse708captions_ = e.parse708captions), - (i.useDtsForTimestampOffset_ = e.useDtsForTimestampOffset), - (i.captionServices_ = e.captionServices), - (i.experimentalExactManifestTimings = - e.experimentalExactManifestTimings), - (i.checkBufferTimeout_ = null), - (i.error_ = void 0), - (i.currentTimeline_ = -1), - (i.pendingSegment_ = null), - (i.xhrOptions_ = null), - (i.pendingSegments_ = []), - (i.audioDisabled_ = !1), - (i.isPendingTimestampOffset_ = !1), - (i.gopBuffer_ = []), - (i.timeMapping_ = 0), - (i.safeAppend_ = 11 <= tr.browser.IE_VERSION), - (i.appendInitSegment_ = { audio: !0, video: !0 }), - (i.playlistOfLastInitSegment_ = { audio: null, video: null }), - (i.callQueue_ = []), - (i.loadQueue_ = []), - (i.metadataQueue_ = { id3: [], caption: [] }), - (i.waitingOnRemove_ = !1), - (i.quotaExceededErrorRetryTimeout_ = null), - (i.activeInitSegmentId_ = null), - (i.initSegments_ = {}), - (i.cacheEncryptionKeys_ = e.cacheEncryptionKeys), - (i.keyCache_ = {}), - (i.decrypter_ = e.decrypter), - (i.syncController_ = e.syncController), - (i.syncPoint_ = { segmentIndex: 0, time: 0 }), - (i.transmuxer_ = i.createTransmuxer_()), - (i.triggerSyncInfoUpdate_ = function () { - return i.trigger("syncinfoupdate"); - }), - i.syncController_.on("syncinfoupdate", i.triggerSyncInfoUpdate_), - i.mediaSource_.addEventListener("sourceopen", function () { - i.isEndOfStream_() || (i.ended_ = !1); - }), - (i.fetchAtBuffer_ = !1), - (i.logger_ = Ro("SegmentLoader[" + i.loaderType_ + "]")), - Object.defineProperty(ft(i), "state", { - get: function () { - return this.state_; - }, - set: function (e) { - e !== this.state_ && - (this.logger_(this.state_ + " -> " + e), - (this.state_ = e), - this.trigger("statechange")); - }, - }), - i.sourceUpdater_.on("ready", function () { - i.hasEnoughInfoToAppend_() && i.processCallQueue_(); - }), - "main" === i.loaderType_ && - i.timelineChangeController_.on( - "pendingtimelinechange", - function () { - i.hasEnoughInfoToAppend_() && i.processCallQueue_(); - }, - ), - "audio" === i.loaderType_ && - i.timelineChangeController_.on("timelinechange", function () { - i.hasEnoughInfoToLoad_() && i.processLoadQueue_(), - i.hasEnoughInfoToAppend_() && i.processCallQueue_(); - }), - i - ); - } - mt(e, n); - var t = e.prototype; - return ( - (t.createTransmuxer_ = function () { - return xl({ - remux: !1, - alignGopsAtEnd: this.safeAppend_, - keepOriginalTimestamps: !0, - parse708captions: this.parse708captions_, - captionServices: this.captionServices_, - }); - }), - (t.resetStats_ = function () { - (this.mediaBytesTransferred = 0), - (this.mediaRequests = 0), - (this.mediaRequestsAborted = 0), - (this.mediaRequestsTimedout = 0), - (this.mediaRequestsErrored = 0), - (this.mediaTransferDuration = 0), - (this.mediaSecondsLoaded = 0), - (this.mediaAppends = 0); - }), - (t.dispose = function () { - this.trigger("dispose"), - (this.state = "DISPOSED"), - this.pause(), - this.abort_(), - this.transmuxer_ && this.transmuxer_.terminate(), - this.resetStats_(), - this.checkBufferTimeout_ && - window.clearTimeout(this.checkBufferTimeout_), - this.syncController_ && - this.triggerSyncInfoUpdate_ && - this.syncController_.off( - "syncinfoupdate", - this.triggerSyncInfoUpdate_, - ), - this.off(); - }), - (t.setAudio = function (e) { - (this.audioDisabled_ = !e), - e - ? (this.appendInitSegment_.audio = !0) - : this.sourceUpdater_.removeAudio(0, this.duration_()); - }), - (t.abort = function () { - "WAITING" === this.state - ? (this.abort_(), - (this.state = "READY"), - this.paused() || this.monitorBuffer_()) - : this.pendingSegment_ && (this.pendingSegment_ = null); - }), - (t.abort_ = function () { - this.pendingSegment_ && - this.pendingSegment_.abortRequests && - this.pendingSegment_.abortRequests(), - (this.pendingSegment_ = null), - (this.callQueue_ = []), - (this.loadQueue_ = []), - (this.metadataQueue_.id3 = []), - (this.metadataQueue_.caption = []), - this.timelineChangeController_.clearPendingTimelineChange( - this.loaderType_, - ), - (this.waitingOnRemove_ = !1), - window.clearTimeout(this.quotaExceededErrorRetryTimeout_), - (this.quotaExceededErrorRetryTimeout_ = null); - }), - (t.checkForAbort_ = function (e) { - return "APPENDING" !== this.state || this.pendingSegment_ - ? !this.pendingSegment_ || this.pendingSegment_.requestId !== e - : ((this.state = "READY"), !0); - }), - (t.error = function (e) { - return ( - "undefined" != typeof e && - (this.logger_("error occurred:", e), (this.error_ = e)), - (this.pendingSegment_ = null), - this.error_ - ); - }), - (t.endOfStream = function () { - (this.ended_ = !0), - this.transmuxer_ && Il(this.transmuxer_), - (this.gopBuffer_.length = 0), - this.pause(), - this.trigger("ended"); - }), - (t.buffered_ = function () { - var e = this.getMediaInfo_(); - if (!this.sourceUpdater_ || !e) return tr.createTimeRanges(); - if ("main" === this.loaderType_) { - var t = e.hasAudio, - i = e.hasVideo, - e = e.isMuxed; - if (i && t && !this.audioDisabled_ && !e) - return this.sourceUpdater_.buffered(); - if (i) return this.sourceUpdater_.videoBuffered(); - } - return this.sourceUpdater_.audioBuffered(); - }), - (t.initSegmentForMap = function (e, t) { - if ((void 0 === t && (t = !1), !e)) return null; - var i = Su(e), - n = this.initSegments_[i]; - return ( - t && - !n && - e.bytes && - (this.initSegments_[i] = n = - { - resolvedUri: e.resolvedUri, - byterange: e.byterange, - bytes: e.bytes, - tracks: e.tracks, - timescales: e.timescales, - }), - n || e - ); - }), - (t.segmentKey = function (e, t) { - if ((void 0 === t && (t = !1), !e)) return null; - var i = wu(e), - n = this.keyCache_[i]; - this.cacheEncryptionKeys_ && - t && - !n && - e.bytes && - (this.keyCache_[i] = n = - { resolvedUri: e.resolvedUri, bytes: e.bytes }); - e = { resolvedUri: (n || e).resolvedUri }; - return n && (e.bytes = n.bytes), e; - }), - (t.couldBeginLoading_ = function () { - return this.playlist_ && !this.paused(); - }), - (t.load = function () { - if ((this.monitorBuffer_(), this.playlist_)) - return "INIT" === this.state && this.couldBeginLoading_() - ? this.init_() - : void ( - !this.couldBeginLoading_() || - ("READY" !== this.state && "INIT" !== this.state) || - (this.state = "READY") - ); - }), - (t.init_ = function () { - return ( - (this.state = "READY"), - this.resetEverything(), - this.monitorBuffer_() - ); - }), - (t.playlist = function (e, t) { - if ((void 0 === t && (t = {}), e)) { - var i = this.playlist_, - n = this.pendingSegment_; - (this.playlist_ = e), - (this.xhrOptions_ = t), - "INIT" === this.state && - ((e.syncInfo = { mediaSequence: e.mediaSequence, time: 0 }), - "main" === this.loaderType_ && - this.syncController_.setDateTimeMappingForStart(e)); - var r = null; - if ( - (i && (i.id ? (r = i.id) : i.uri && (r = i.uri)), - this.logger_( - "playlist update [" + r + " => " + (e.id || e.uri) + "]", - ), - this.trigger("syncinfoupdate"), - "INIT" === this.state && this.couldBeginLoading_()) - ) - return this.init_(); - if (!i || i.uri !== e.uri) - return ( - null !== this.mediaIndex && - (e.endList ? this.resyncLoader() : this.resetLoader()), - (this.currentMediaInfo_ = void 0), - void this.trigger("playlistupdate") - ); - t = e.mediaSequence - i.mediaSequence; - this.logger_("live window shift [" + t + "]"), - null !== this.mediaIndex && - ((this.mediaIndex -= t), - this.mediaIndex < 0 - ? ((this.mediaIndex = null), (this.partIndex = null)) - : ((r = this.playlist_.segments[this.mediaIndex]), - !this.partIndex || - (r.parts && r.parts.length && r.parts[this.partIndex]) || - ((r = this.mediaIndex), - this.logger_( - "currently processing part (index " + - this.partIndex + - ") no longer exists.", - ), - this.resetLoader(), - (this.mediaIndex = r)))), - n && - ((n.mediaIndex -= t), - n.mediaIndex < 0 - ? ((n.mediaIndex = null), (n.partIndex = null)) - : (0 <= n.mediaIndex && - (n.segment = e.segments[n.mediaIndex]), - 0 <= n.partIndex && - n.segment.parts && - (n.part = n.segment.parts[n.partIndex]))), - this.syncController_.saveExpiredSegmentInfo(i, e); - } - }), - (t.pause = function () { - this.checkBufferTimeout_ && - (window.clearTimeout(this.checkBufferTimeout_), - (this.checkBufferTimeout_ = null)); - }), - (t.paused = function () { - return null === this.checkBufferTimeout_; - }), - (t.resetEverything = function (e) { - (this.ended_ = !1), - (this.appendInitSegment_ = { audio: !0, video: !0 }), - this.resetLoader(), - this.remove(0, 1 / 0, e), - this.transmuxer_ && - (this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }), - this.transmuxer_.postMessage({ action: "reset" })); - }), - (t.resetLoader = function () { - (this.fetchAtBuffer_ = !1), this.resyncLoader(); - }), - (t.resyncLoader = function () { - this.transmuxer_ && Il(this.transmuxer_), - (this.mediaIndex = null), - (this.partIndex = null), - (this.syncPoint_ = null), - (this.isPendingTimestampOffset_ = !1), - (this.callQueue_ = []), - (this.loadQueue_ = []), - (this.metadataQueue_.id3 = []), - (this.metadataQueue_.caption = []), - this.abort(), - this.transmuxer_ && - this.transmuxer_.postMessage({ - action: "clearParsedMp4Captions", - }); - }), - (t.remove = function (e, t, i, n) { - if ( - (void 0 === i && (i = function () {}), - void 0 === n && (n = !1), - (t = t === 1 / 0 ? this.duration_() : t) <= e) - ) - this.logger_( - "skipping remove because end ${end} is <= start ${start}", - ); - else if (this.sourceUpdater_ && this.getMediaInfo_()) { - var r, - a = 1, - s = function () { - 0 === --a && i(); - }; - for (r in ((!n && this.audioDisabled_) || - (a++, this.sourceUpdater_.removeAudio(e, t, s)), - (!n && "main" !== this.loaderType_) || - ((this.gopBuffer_ = (function (e, t, i, n) { - for ( - var r = Math.ceil((t - n) * hl), - a = Math.ceil((i - n) * hl), - n = e.slice(), - s = e.length; - s-- && !(e[s].pts <= a); - - ); - if (-1 === s) return n; - for (var o = s + 1; o-- && !(e[o].pts <= r); ); - return (o = Math.max(o, 0)), n.splice(o, s - o + 1), n; - })(this.gopBuffer_, e, t, this.timeMapping_)), - a++, - this.sourceUpdater_.removeVideo(e, t, s)), - this.inbandTextTracks_)) - rl(e, t, this.inbandTextTracks_[r]); - rl(e, t, this.segmentMetadataTrack_), s(); - } else - this.logger_( - "skipping remove because no source updater or starting media info", - ); - }), - (t.monitorBuffer_ = function () { - this.checkBufferTimeout_ && - window.clearTimeout(this.checkBufferTimeout_), - (this.checkBufferTimeout_ = window.setTimeout( - this.monitorBufferTick_.bind(this), - 1, - )); - }), - (t.monitorBufferTick_ = function () { - "READY" === this.state && this.fillBuffer_(), - this.checkBufferTimeout_ && - window.clearTimeout(this.checkBufferTimeout_), - (this.checkBufferTimeout_ = window.setTimeout( - this.monitorBufferTick_.bind(this), - 500, - )); - }), - (t.fillBuffer_ = function () { - var e; - this.sourceUpdater_.updating() || - ((e = this.chooseNextRequest_()) && - ("number" == typeof e.timestampOffset && - ((this.isPendingTimestampOffset_ = !1), - this.timelineChangeController_.pendingTimelineChange({ - type: this.loaderType_, - from: this.currentTimeline_, - to: e.timeline, - })), - this.loadSegment_(e))); - }), - (t.isEndOfStream_ = function (e, t, i) { - if ( - (void 0 === e && (e = this.mediaIndex), - void 0 === t && (t = this.playlist_), - void 0 === i && (i = this.partIndex), - !t || !this.mediaSource_) - ) - return !1; - var n = "number" == typeof e && t.segments[e], - e = e + 1 === t.segments.length, - n = !n || !n.parts || i + 1 === n.parts.length; - return t.endList && "open" === this.mediaSource_.readyState && e && n; - }), - (t.chooseNextRequest_ = function () { - var e = this.buffered_(), - t = Ho(e) || 0, - i = qo(e, this.currentTime_()), - n = !this.hasPlayed_() && 1 <= i, - r = i >= this.goalBufferLength_(), - e = this.playlist_.segments; - if (!e.length || n || r) return null; - this.syncPoint_ = - this.syncPoint_ || - this.syncController_.getSyncPoint( - this.playlist_, - this.duration_(), - this.currentTimeline_, - this.currentTime_(), - ); - var a, - n = { - partIndex: null, - mediaIndex: null, - startOfSegment: null, - playlist: this.playlist_, - isSyncRequest: Boolean(!this.syncPoint_), - }; - n.isSyncRequest - ? (n.mediaIndex = (function (e, t, i) { - t = t || []; - for (var n = [], r = 0, a = 0; a < t.length; a++) { - var s = t[a]; - if (e === s.timeline && (n.push(a), i < (r += s.duration))) - return a; - } - return 0 === n.length ? 0 : n[n.length - 1]; - })(this.currentTimeline_, e, t)) - : null !== this.mediaIndex - ? ((r = e[this.mediaIndex]), - (a = "number" == typeof this.partIndex ? this.partIndex : -1), - (n.startOfSegment = r.end || t), - r.parts && r.parts[a + 1] - ? ((n.mediaIndex = this.mediaIndex), (n.partIndex = a + 1)) - : (n.mediaIndex = this.mediaIndex + 1)) - : ((a = (o = gl.getMediaInfoForTime({ - experimentalExactManifestTimings: - this.experimentalExactManifestTimings, - playlist: this.playlist_, - currentTime: this.fetchAtBuffer_ ? t : this.currentTime_(), - startingPartIndex: this.syncPoint_.partIndex, - startingSegmentIndex: this.syncPoint_.segmentIndex, - startTime: this.syncPoint_.time, - })).segmentIndex), - (s = o.startTime), - (o = o.partIndex), - (n.getMediaInfoForTime = this.fetchAtBuffer_ - ? "bufferedEnd " + t - : "currentTime " + this.currentTime_()), - (n.mediaIndex = a), - (n.startOfSegment = s), - (n.partIndex = o)); - var s = e[n.mediaIndex], - o = - s && - "number" == typeof n.partIndex && - s.parts && - s.parts[n.partIndex]; - if (!s || ("number" == typeof n.partIndex && !o)) return null; - "number" != typeof n.partIndex && - s.parts && - ((n.partIndex = 0), (o = s.parts[0])), - i || - !o || - o.independent || - (0 === n.partIndex - ? (o = - (i = e[n.mediaIndex - 1]).parts && - i.parts.length && - i.parts[i.parts.length - 1]) && - o.independent && - (--n.mediaIndex, - (n.partIndex = i.parts.length - 1), - (n.independent = "previous segment")) - : s.parts[n.partIndex - 1].independent && - (--n.partIndex, (n.independent = "previous part"))); - s = this.mediaSource_ && "ended" === this.mediaSource_.readyState; - return n.mediaIndex >= e.length - 1 && s && !this.seeking_() - ? null - : this.generateSegmentInfo_(n); - }), - (t.generateSegmentInfo_ = function (e) { - var t = e.independent, - i = e.playlist, - n = e.mediaIndex, - r = e.startOfSegment, - a = e.isSyncRequest, - s = e.partIndex, - o = e.forceTimestampOffset, - u = e.getMediaInfoForTime, - l = i.segments[n], - e = "number" == typeof s && l.parts[s], - t = { - requestId: "segment-loader-" + Math.random(), - uri: (e && e.resolvedUri) || l.resolvedUri, - mediaIndex: n, - partIndex: e ? s : null, - isSyncRequest: a, - startOfSegment: r, - playlist: i, - bytes: null, - encryptedBytes: null, - timestampOffset: null, - timeline: l.timeline, - duration: (e && e.duration) || l.duration, - segment: l, - part: e, - byteLength: 0, - transmuxer: this.transmuxer_, - getMediaInfoForTime: u, - independent: t, - }, - o = "undefined" != typeof o ? o : this.isPendingTimestampOffset_; - t.timestampOffset = this.timestampOffsetForSegment_({ - segmentTimeline: l.timeline, - currentTimeline: this.currentTimeline_, - startOfSegment: r, - buffered: this.buffered_(), - overrideCheck: o, - }); - o = Ho(this.sourceUpdater_.audioBuffered()); - return ( - "number" == typeof o && - (t.audioAppendStart = - o - this.sourceUpdater_.audioTimestampOffset()), - this.sourceUpdater_.videoBuffered().length && - (t.gopsToAlignWith = (function (e, t, i) { - if ("undefined" == typeof t || null === t || !e.length) - return []; - for ( - var n = Math.ceil((t - i + 3) * hl), r = 0; - r < e.length && !(e[r].pts > n); - r++ - ); - return e.slice(r); - })( - this.gopBuffer_, - this.currentTime_() - - this.sourceUpdater_.videoTimestampOffset(), - this.timeMapping_, - )), - t - ); - }), - (t.timestampOffsetForSegment_ = function (e) { - return ( - (i = (t = e).segmentTimeline), - (n = t.currentTimeline), - (r = t.startOfSegment), - (e = t.buffered), - t.overrideCheck || i !== n - ? !(i < n) && e.length - ? e.end(e.length - 1) - : r - : null - ); - var t, i, n, r; - }), - (t.earlyAbortWhenNeeded_ = function (e) { - var t, i, n, r, a, s, o, u, l, c, d, h, p; - !this.vhs_.tech_.paused() && - this.xhrOptions_.timeout && - this.playlist_.attributes.BANDWIDTH && - (Date.now() - (e.firstBytesReceivedAt || Date.now()) < 1e3 || - ((t = this.currentTime_()), - (r = e.bandwidth), - (a = this.pendingSegment_.duration), - (p = gl.estimateSegmentRequestTime( - a, - r, - this.playlist_, - e.bytesReceived, - )), - (i = this.buffered_()), - (n = t), - void 0 === (e = this.vhs_.tech_.playbackRate()) && (e = 1), - p <= (e = ((i.length ? i.end(i.length - 1) : 0) - n) / e - 1) || - ((r = { - master: this.vhs_.playlists.master, - currentTime: t, - bandwidth: r, - duration: this.duration_(), - segmentDuration: a, - timeUntilRebuffer: e, - currentTimeline: this.currentTimeline_, - syncController: this.syncController_, - }), - (a = r.master), - (s = r.currentTime), - (o = r.bandwidth), - (u = r.duration), - (l = r.segmentDuration), - (c = r.timeUntilRebuffer), - (d = r.currentTimeline), - (h = r.syncController), - (a = (r = (a = !(a = (r = a.playlists.filter(function (e) { - return !gl.isIncompatible(e); - })).filter(gl.isEnabled)).length - ? r.filter(function (e) { - return !gl.isDisabled(e); - }) - : a) - .filter(gl.hasAttribute.bind(null, "BANDWIDTH")) - .map(function (e) { - var t = h.getSyncPoint(e, u, d, s) ? 1 : 2; - return { - playlist: e, - rebufferingImpact: - gl.estimateSegmentRequestTime(l, o, e) * t - c, - }; - })).filter(function (e) { - return e.rebufferingImpact <= 0; - })), - el(a, function (e, t) { - return tl(t.playlist, e.playlist); - }), - (r = a.length - ? a[0] - : (el(r, function (e, t) { - return e.rebufferingImpact - t.rebufferingImpact; - }), - r[0] || null)) && - ((p = p - e - r.rebufferingImpact), - !r.playlist || - r.playlist.uri === this.playlist_.uri || - p < (e <= fl ? 1 : 0.5) || - ((this.bandwidth = - r.playlist.attributes.BANDWIDTH * El.BANDWIDTH_VARIANCE + - 1), - this.trigger("earlyabort")))))); - }), - (t.handleAbort_ = function (e) { - this.logger_("Aborting " + sl(e)), (this.mediaRequestsAborted += 1); - }), - (t.handleProgress_ = function (e, t) { - this.earlyAbortWhenNeeded_(t.stats), - this.checkForAbort_(t.requestId) || this.trigger("progress"); - }), - (t.handleTrackInfo_ = function (e, t) { - this.earlyAbortWhenNeeded_(e.stats), - this.checkForAbort_(e.requestId) || - this.checkForIllegalMediaSwitch(t) || - ((function (e, t) { - if ((!e && !t) || (!e && t) || (e && !t)) return !1; - if (e === t) return !0; - var i = Object.keys(e).sort(), - n = Object.keys(t).sort(); - if (i.length !== n.length) return !1; - for (var r = 0; r < i.length; r++) { - var a = i[r]; - if (a !== n[r]) return !1; - if (e[a] !== t[a]) return !1; - } - return !0; - })(this.currentMediaInfo_, (t = t || {})) || - ((this.appendInitSegment_ = { audio: !0, video: !0 }), - (this.startingMediaInfo_ = t), - (this.currentMediaInfo_ = t), - this.logger_("trackinfo update", t), - this.trigger("trackinfo")), - this.checkForAbort_(e.requestId) || - ((this.pendingSegment_.trackInfo = t), - this.hasEnoughInfoToAppend_() && this.processCallQueue_())); - }), - (t.handleTimingInfo_ = function (e, t, i, n) { - var r; - this.earlyAbortWhenNeeded_(e.stats), - this.checkForAbort_(e.requestId) || - (((r = this.pendingSegment_)[(e = ol(t))] = r[e] || {}), - (r[e][i] = n), - this.logger_("timinginfo: " + t + " - " + i + " - " + n), - this.hasEnoughInfoToAppend_() && this.processCallQueue_()); - }), - (t.handleCaptions_ = function (e, t) { - var g, - y, - v = this; - this.earlyAbortWhenNeeded_(e.stats), - this.checkForAbort_(e.requestId) || - (0 !== t.length - ? this.pendingSegment_.hasAppendedData_ - ? ((g = - null === this.sourceUpdater_.videoTimestampOffset() - ? this.sourceUpdater_.audioTimestampOffset() - : this.sourceUpdater_.videoTimestampOffset()), - (y = {}), - t.forEach(function (e) { - y[e.stream] = y[e.stream] || { - startTime: 1 / 0, - captions: [], - endTime: 0, - }; - var t = y[e.stream]; - (t.startTime = Math.min(t.startTime, e.startTime + g)), - (t.endTime = Math.max(t.endTime, e.endTime + g)), - t.captions.push(e); - }), - Object.keys(y).forEach(function (e) { - var t, - i, - n, - r, - a, - s, - o, - u, - l, - c, - d = y[e], - h = d.startTime, - p = d.endTime, - f = d.captions, - m = v.inbandTextTracks_; - v.logger_( - "adding cues from " + h + " -> " + p + " for " + e, - ), - (t = m), - (i = v.vhs_.tech_), - t[(n = e)] || - (i.trigger({ type: "usage", name: "vhs-608" }), - i.trigger({ type: "usage", name: "hls-608" }), - /^cc708_/.test((r = n)) && - (r = "SERVICE" + n.split("_")[1]), - (o = i.textTracks().getTrackById(r)) - ? (t[n] = o) - : ((s = a = n), - (d = !1), - (o = ((i.options_.vhs && - i.options_.vhs.captionServices) || - {})[r]) && - ((a = o.label), - (s = o.language), - (d = o.default)), - (t[n] = i.addRemoteTextTrack( - { - kind: "captions", - id: r, - default: d, - label: a, - language: s, - }, - !1, - ).track))), - rl(h, p, m[e]), - (l = (f = { - captionArray: f, - inbandTextTracks: m, - timestampOffset: g, - }).inbandTextTracks), - (m = f.captionArray), - (c = f.timestampOffset), - m && - ((u = window.WebKitDataCue || window.VTTCue), - m.forEach(function (e) { - var t = e.stream; - l[t].addCue( - new u(e.startTime + c, e.endTime + c, e.text), - ); - })); - }), - this.transmuxer_ && - this.transmuxer_.postMessage({ - action: "clearParsedMp4Captions", - })) - : this.metadataQueue_.caption.push( - this.handleCaptions_.bind(this, e, t), - ) - : this.logger_( - "SegmentLoader received no captions from a caption event", - )); - }), - (t.handleId3_ = function (e, t, i) { - var n, r, a, s; - this.earlyAbortWhenNeeded_(e.stats), - this.checkForAbort_(e.requestId) || - (this.pendingSegment_.hasAppendedData_ - ? ((n = - null === this.sourceUpdater_.videoTimestampOffset() - ? this.sourceUpdater_.audioTimestampOffset() - : this.sourceUpdater_.videoTimestampOffset()), - (r = this.inbandTextTracks_), - (a = i), - (s = this.vhs_.tech_), - r.metadataTrack_ || - ((r.metadataTrack_ = s.addRemoteTextTrack( - { kind: "metadata", label: "Timed Metadata" }, - !1, - ).track), - (r.metadataTrack_.inBandMetadataTrackDispatchType = a)), - nl({ - inbandTextTracks: this.inbandTextTracks_, - metadataArray: t, - timestampOffset: n, - videoDuration: this.duration_(), - })) - : this.metadataQueue_.id3.push( - this.handleId3_.bind(this, e, t, i), - )); - }), - (t.processMetadataQueue_ = function () { - this.metadataQueue_.id3.forEach(function (e) { - return e(); - }), - this.metadataQueue_.caption.forEach(function (e) { - return e(); - }), - (this.metadataQueue_.id3 = []), - (this.metadataQueue_.caption = []); - }), - (t.processCallQueue_ = function () { - var e = this.callQueue_; - (this.callQueue_ = []), - e.forEach(function (e) { - return e(); - }); - }), - (t.processLoadQueue_ = function () { - var e = this.loadQueue_; - (this.loadQueue_ = []), - e.forEach(function (e) { - return e(); - }); - }), - (t.hasEnoughInfoToLoad_ = function () { - if ("audio" !== this.loaderType_) return !0; - var e = this.pendingSegment_; - return ( - !!e && - (!this.getCurrentMediaInfo_() || - !ul({ - timelineChangeController: this.timelineChangeController_, - currentTimeline: this.currentTimeline_, - segmentTimeline: e.timeline, - loaderType: this.loaderType_, - audioDisabled: this.audioDisabled_, - })) - ); - }), - (t.getCurrentMediaInfo_ = function (e) { - return ( - ((e = void 0 === e ? this.pendingSegment_ : e) && e.trackInfo) || - this.currentMediaInfo_ - ); - }), - (t.getMediaInfo_ = function (e) { - return ( - void 0 === e && (e = this.pendingSegment_), - this.getCurrentMediaInfo_(e) || this.startingMediaInfo_ - ); - }), - (t.hasEnoughInfoToAppend_ = function () { - if (!this.sourceUpdater_.ready()) return !1; - if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) - return !1; - var e = this.pendingSegment_, - t = this.getCurrentMediaInfo_(); - if (!e || !t) return !1; - var i = t.hasAudio, - n = t.hasVideo, - t = t.isMuxed; - return ( - !(n && !e.videoTimingInfo) && - !(i && !this.audioDisabled_ && !t && !e.audioTimingInfo) && - !ul({ - timelineChangeController: this.timelineChangeController_, - currentTimeline: this.currentTimeline_, - segmentTimeline: e.timeline, - loaderType: this.loaderType_, - audioDisabled: this.audioDisabled_, - }) - ); - }), - (t.handleData_ = function (e, t) { - if ( - (this.earlyAbortWhenNeeded_(e.stats), - !this.checkForAbort_(e.requestId)) - ) - if (!this.callQueue_.length && this.hasEnoughInfoToAppend_()) { - var i, - n = this.pendingSegment_; - if ( - (this.setTimeMapping_(n.timeline), - this.updateMediaSecondsLoaded_(n.part || n.segment), - "closed" !== this.mediaSource_.readyState) - ) { - if ( - (e.map && - ((e.map = this.initSegmentForMap(e.map, !0)), - (n.segment.map = e.map)), - e.key && this.segmentKey(e.key, !0), - (n.isFmp4 = e.isFmp4), - (n.timingInfo = n.timingInfo || {}), - n.isFmp4 - ? (this.trigger("fmp4"), - (n.timingInfo.start = n[ol(t.type)].start)) - : ((i = this.getCurrentMediaInfo_()), - (i = "main" === this.loaderType_ && i && i.hasVideo) && - (r = n.videoTimingInfo.start), - (n.timingInfo.start = this.trueSegmentStart_({ - currentStart: n.timingInfo.start, - playlist: n.playlist, - mediaIndex: n.mediaIndex, - currentVideoTimestampOffset: - this.sourceUpdater_.videoTimestampOffset(), - useVideoTimingInfo: i, - firstVideoFrameTimeForData: r, - videoTimingInfo: n.videoTimingInfo, - audioTimingInfo: n.audioTimingInfo, - }))), - this.updateAppendInitSegmentStatus(n, t.type), - this.updateSourceBufferTimestampOffset_(n), - n.isSyncRequest) - ) { - this.updateTimingInfoEnd_(n), - this.syncController_.saveSegmentTimingInfo({ - segmentInfo: n, - shouldSaveTimelineMapping: "main" === this.loaderType_, - }); - var r = this.chooseNextRequest_(); - if ( - r.mediaIndex !== n.mediaIndex || - r.partIndex !== n.partIndex - ) - return void this.logger_( - "sync segment was incorrect, not appending", - ); - this.logger_("sync segment was correct, appending"); - } - (n.hasAppendedData_ = !0), - this.processMetadataQueue_(), - this.appendData_(n, t); - } - } else this.callQueue_.push(this.handleData_.bind(this, e, t)); - }), - (t.updateAppendInitSegmentStatus = function (e, t) { - "main" !== this.loaderType_ || - "number" != typeof e.timestampOffset || - e.changedTimestampOffset || - (this.appendInitSegment_ = { audio: !0, video: !0 }), - this.playlistOfLastInitSegment_[t] !== e.playlist && - (this.appendInitSegment_[t] = !0); - }), - (t.getInitSegmentAndUpdateState_ = function (e) { - var t = e.type, - i = e.initSegment, - n = e.map, - r = e.playlist; - if (n) { - e = Su(n); - if (this.activeInitSegmentId_ === e) return null; - (i = this.initSegmentForMap(n, !0).bytes), - (this.activeInitSegmentId_ = e); - } - return i && this.appendInitSegment_[t] - ? ((this.playlistOfLastInitSegment_[t] = r), - (this.appendInitSegment_[t] = !1), - (this.activeInitSegmentId_ = null), - i) - : null; - }), - (t.handleQuotaExceededError_ = function (e, t) { - var i = this, - n = e.segmentInfo, - r = e.type, - a = e.bytes, - s = this.sourceUpdater_.audioBuffered(), - o = this.sourceUpdater_.videoBuffered(); - 1 < s.length && - this.logger_( - "On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: " + - jo(s).join(", "), - ), - 1 < o.length && - this.logger_( - "On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: " + - jo(o).join(", "), - ); - var u = s.length ? s.start(0) : 0, - l = s.length ? s.end(s.length - 1) : 0, - c = o.length ? o.start(0) : 0, - e = o.length ? o.end(o.length - 1) : 0; - if (l - u <= 1 && e - c <= 1) - return ( - this.logger_( - "On QUOTA_EXCEEDED_ERR, single segment too large to append to buffer, triggering an error. Appended byte length: " + - a.byteLength + - ", audio buffer: " + - jo(s).join(", ") + - ", video buffer: " + - jo(o).join(", ") + - ", ", - ), - this.error({ - message: - "Quota exceeded error with append of a single segment of content", - excludeUntil: 1 / 0, - }), - void this.trigger("error") - ); - (this.waitingOnRemove_ = !0), - this.callQueue_.push( - this.appendToSourceBuffer_.bind(this, { - segmentInfo: n, - type: r, - bytes: a, - }), - ); - a = this.currentTime_() - 1; - this.logger_( - "On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to " + a, - ), - this.remove( - 0, - a, - function () { - i.logger_("On QUOTA_EXCEEDED_ERR, retrying append in 1s"), - (i.waitingOnRemove_ = !1), - (i.quotaExceededErrorRetryTimeout_ = window.setTimeout( - function () { - i.logger_( - "On QUOTA_EXCEEDED_ERR, re-processing call queue", - ), - (i.quotaExceededErrorRetryTimeout_ = null), - i.processCallQueue_(); - }, - 1e3, - )); - }, - !0, - ); - }), - (t.handleAppendError_ = function (e, t) { - var i = e.segmentInfo, - n = e.type, - e = e.bytes; - t && - (22 !== t.code - ? (this.logger_("Received non QUOTA_EXCEEDED_ERR on append", t), - this.error( - n + - " append of " + - e.length + - "b failed for segment #" + - i.mediaIndex + - " in playlist " + - i.playlist.id, - ), - this.trigger("appenderror")) - : this.handleQuotaExceededError_({ - segmentInfo: i, - type: n, - bytes: e, - })); - }), - (t.appendToSourceBuffer_ = function (e) { - var t, - i, - n = e.segmentInfo, - r = e.type, - a = e.initSegment, - s = e.data, - o = e.bytes; - o || - ((e = [s]), - (s = s.byteLength), - a && (e.unshift(a), (s += a.byteLength)), - (i = 0), - (e = { bytes: s, segments: e }).bytes && - ((t = new Uint8Array(e.bytes)), - e.segments.forEach(function (e) { - t.set(e, i), (i += e.byteLength); - })), - (o = t)), - this.sourceUpdater_.appendBuffer( - { segmentInfo: n, type: r, bytes: o }, - this.handleAppendError_.bind(this, { - segmentInfo: n, - type: r, - bytes: o, - }), - ); - }), - (t.handleSegmentTimingInfo_ = function (e, t, i) { - this.pendingSegment_ && - t === this.pendingSegment_.requestId && - ((t = this.pendingSegment_.segment)[(e = e + "TimingInfo")] || - (t[e] = {}), - (t[e].transmuxerPrependedSeconds = i.prependedContentDuration || 0), - (t[e].transmuxedPresentationStart = i.start.presentation), - (t[e].transmuxedDecodeStart = i.start.decode), - (t[e].transmuxedPresentationEnd = i.end.presentation), - (t[e].transmuxedDecodeEnd = i.end.decode), - (t[e].baseMediaDecodeTime = i.baseMediaDecodeTime)); - }), - (t.appendData_ = function (e, t) { - var i = t.type, - n = t.data; - n && - n.byteLength && - (("audio" === i && this.audioDisabled_) || - ((t = this.getInitSegmentAndUpdateState_({ - type: i, - initSegment: t.initSegment, - playlist: e.playlist, - map: e.isFmp4 ? e.segment.map : null, - })), - this.appendToSourceBuffer_({ - segmentInfo: e, - type: i, - initSegment: t, - data: n, - }))); - }), - (t.loadSegment_ = function (t) { - var i = this; - (this.state = "WAITING"), - (this.pendingSegment_ = t), - this.trimBackBuffer_(t), - "number" == typeof t.timestampOffset && - this.transmuxer_ && - this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }), - this.hasEnoughInfoToLoad_() - ? this.updateTransmuxerAndRequestSegment_(t) - : this.loadQueue_.push(function () { - var e = g({}, t, { forceTimestampOffset: !0 }); - g(t, i.generateSegmentInfo_(e)), - (i.isPendingTimestampOffset_ = !1), - i.updateTransmuxerAndRequestSegment_(t); - }); - }), - (t.updateTransmuxerAndRequestSegment_ = function (n) { - var r = this; - this.shouldUpdateTransmuxerTimestampOffset_(n.timestampOffset) && - ((this.gopBuffer_.length = 0), - (n.gopsToAlignWith = []), - (this.timeMapping_ = 0), - this.transmuxer_.postMessage({ action: "reset" }), - this.transmuxer_.postMessage({ - action: "setTimestampOffset", - timestampOffset: n.timestampOffset, - })); - var e = this.createSimplifiedSegmentObj_(n), - t = this.isEndOfStream_(n.mediaIndex, n.playlist, n.partIndex), - i = null !== this.mediaIndex, - a = n.timeline !== this.currentTimeline_ && 0 < n.timeline, - a = t || (i && a); - this.logger_("Requesting " + sl(n)), - e.map && - !e.map.bytes && - (this.logger_("going to request init segment."), - (this.appendInitSegment_ = { video: !0, audio: !0 })), - (n.abortRequests = Xu({ - xhr: this.vhs_.xhr, - xhrOptions: this.xhrOptions_, - decryptionWorker: this.decrypter_, - segment: e, - abortFn: this.handleAbort_.bind(this, n), - progressFn: this.handleProgress_.bind(this), - trackInfoFn: this.handleTrackInfo_.bind(this), - timingInfoFn: this.handleTimingInfo_.bind(this), - videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind( - this, - "video", - n.requestId, - ), - audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind( - this, - "audio", - n.requestId, - ), - captionsFn: this.handleCaptions_.bind(this), - isEndOfTimeline: a, - endedTimelineFn: function () { - r.logger_("received endedtimeline callback"); - }, - id3Fn: this.handleId3_.bind(this), - dataFn: this.handleData_.bind(this), - doneFn: this.segmentRequestFinished_.bind(this), - onTransmuxerLog: function (e) { - var t = e.message, - i = e.level, - e = e.stream; - r.logger_( - sl(n) + - " logged from transmuxer stream " + - e + - " as a " + - i + - ": " + - t, - ); - }, - })); - }), - (t.trimBackBuffer_ = function (e) { - var t, - i, - n, - r, - r = - ((t = this.seekable_()), - (i = this.currentTime_()), - (n = this.playlist_.targetDuration || 10), - (r = i - El.BACK_BUFFER_LENGTH), - t.length && (r = Math.max(r, t.start(0))), - Math.min(i - n, r)); - 0 < r && this.remove(0, r); - }), - (t.createSimplifiedSegmentObj_ = function (e) { - var t = e.segment, - i = e.part, - n = { - resolvedUri: (i || t).resolvedUri, - byterange: (i || t).byterange, - requestId: e.requestId, - transmuxer: e.transmuxer, - audioAppendStart: e.audioAppendStart, - gopsToAlignWith: e.gopsToAlignWith, - part: e.part, - }, - i = e.playlist.segments[e.mediaIndex - 1]; - return ( - i && - i.timeline === t.timeline && - (i.videoTimingInfo - ? (n.baseStartTime = i.videoTimingInfo.transmuxedDecodeEnd) - : i.audioTimingInfo && - (n.baseStartTime = i.audioTimingInfo.transmuxedDecodeEnd)), - t.key && - ((e = - t.key.iv || - new Uint32Array([ - 0, - 0, - 0, - e.mediaIndex + e.playlist.mediaSequence, - ])), - (n.key = this.segmentKey(t.key)), - (n.key.iv = e)), - t.map && (n.map = this.initSegmentForMap(t.map)), - n - ); - }), - (t.saveTransferStats_ = function (e) { - (this.mediaRequests += 1), - e && - ((this.mediaBytesTransferred += e.bytesReceived), - (this.mediaTransferDuration += e.roundTripTime)); - }), - (t.saveBandwidthRelatedStats_ = function (e, t) { - (this.pendingSegment_.byteLength = t.bytesReceived), - e < 1 / 60 - ? this.logger_( - "Ignoring segment's bandwidth because its duration of " + - e + - " is less than the min to record " + - 1 / 60, - ) - : ((this.bandwidth = t.bandwidth), - (this.roundTrip = t.roundTripTime)); - }), - (t.handleTimeout_ = function () { - (this.mediaRequestsTimedout += 1), - (this.bandwidth = 1), - (this.roundTrip = NaN), - this.trigger("bandwidthupdate"); - }), - (t.segmentRequestFinished_ = function (e, t, i) { - if (this.callQueue_.length) - this.callQueue_.push( - this.segmentRequestFinished_.bind(this, e, t, i), - ); - else if ( - (this.saveTransferStats_(t.stats), - this.pendingSegment_ && - t.requestId === this.pendingSegment_.requestId) - ) { - if (e) - return ( - (this.pendingSegment_ = null), - (this.state = "READY"), - e.code === Ll - ? void 0 - : (this.pause(), - e.code === Pl - ? void this.handleTimeout_() - : ((this.mediaRequestsErrored += 1), - this.error(e), - void this.trigger("error"))) - ); - e = this.pendingSegment_; - this.saveBandwidthRelatedStats_(e.duration, t.stats), - (e.endOfAllRequests = t.endOfAllRequests), - i.gopInfo && - (this.gopBuffer_ = (function (e, t, i) { - if (!t.length) return e; - if (i) return t.slice(); - for ( - var n = t[0].pts, r = 0; - r < e.length && !(e[r].pts >= n); - r++ - ); - return e.slice(0, r).concat(t); - })(this.gopBuffer_, i.gopInfo, this.safeAppend_)), - (this.state = "APPENDING"), - this.trigger("appending"), - this.waitForAppendsToComplete_(e); - } - }), - (t.setTimeMapping_ = function (e) { - e = this.syncController_.mappingForTimeline(e); - null !== e && (this.timeMapping_ = e); - }), - (t.updateMediaSecondsLoaded_ = function (e) { - "number" == typeof e.start && "number" == typeof e.end - ? (this.mediaSecondsLoaded += e.end - e.start) - : (this.mediaSecondsLoaded += e.duration); - }), - (t.shouldUpdateTransmuxerTimestampOffset_ = function (e) { - return ( - null !== e && - (("main" === this.loaderType_ && - e !== this.sourceUpdater_.videoTimestampOffset()) || - (!this.audioDisabled_ && - e !== this.sourceUpdater_.audioTimestampOffset())) - ); - }), - (t.trueSegmentStart_ = function (e) { - var t = e.currentStart, - i = e.playlist, - n = e.mediaIndex, - r = e.firstVideoFrameTimeForData, - a = e.currentVideoTimestampOffset, - s = e.useVideoTimingInfo, - o = e.videoTimingInfo, - e = e.audioTimingInfo; - if ("undefined" != typeof t) return t; - if (!s) return e.start; - i = i.segments[n - 1]; - return 0 !== n && - i && - "undefined" != typeof i.start && - i.end === r + a - ? o.start - : r; - }), - (t.waitForAppendsToComplete_ = function (e) { - var t = this.getCurrentMediaInfo_(e); - if (!t) - return ( - this.error({ - message: - "No starting media returned, likely due to an unsupported media format.", - blacklistDuration: 1 / 0, - }), - void this.trigger("error") - ); - var i = t.hasAudio, - n = t.hasVideo, - t = t.isMuxed, - n = "main" === this.loaderType_ && n, - t = !this.audioDisabled_ && i && !t; - if (((e.waitingOnAppends = 0), !e.hasAppendedData_)) - return ( - e.timingInfo || - "number" != typeof e.timestampOffset || - (this.isPendingTimestampOffset_ = !0), - (e.timingInfo = { start: 0 }), - e.waitingOnAppends++, - this.isPendingTimestampOffset_ || - (this.updateSourceBufferTimestampOffset_(e), - this.processMetadataQueue_()), - void this.checkAppendsDone_(e) - ); - n && e.waitingOnAppends++, - t && e.waitingOnAppends++, - n && - this.sourceUpdater_.videoQueueCallback( - this.checkAppendsDone_.bind(this, e), - ), - t && - this.sourceUpdater_.audioQueueCallback( - this.checkAppendsDone_.bind(this, e), - ); - }), - (t.checkAppendsDone_ = function (e) { - this.checkForAbort_(e.requestId) || - (e.waitingOnAppends--, - 0 === e.waitingOnAppends && this.handleAppendsDone_()); - }), - (t.checkForIllegalMediaSwitch = function (e) { - var t, - i, - e = - ((t = this.loaderType_), - (i = this.getCurrentMediaInfo_()), - (e = e), - "main" === t && i && e - ? e.hasAudio || e.hasVideo - ? i.hasVideo && !e.hasVideo - ? "Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest." - : !i.hasVideo && e.hasVideo - ? "Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest." - : null - : "Neither audio nor video found in segment." - : null); - return ( - !!e && - (this.error({ message: e, blacklistDuration: 1 / 0 }), - this.trigger("error"), - !0) - ); - }), - (t.updateSourceBufferTimestampOffset_ = function (e) { - var t; - null === e.timestampOffset || - "number" != typeof e.timingInfo.start || - e.changedTimestampOffset || - "main" !== this.loaderType_ || - ((t = !1), - (e.timestampOffset -= - this.getSegmentStartTimeForTimestampOffsetCalculation_({ - videoTimingInfo: e.segment.videoTimingInfo, - audioTimingInfo: e.segment.audioTimingInfo, - timingInfo: e.timingInfo, - })), - (e.changedTimestampOffset = !0), - e.timestampOffset !== this.sourceUpdater_.videoTimestampOffset() && - (this.sourceUpdater_.videoTimestampOffset(e.timestampOffset), - (t = !0)), - e.timestampOffset !== this.sourceUpdater_.audioTimestampOffset() && - (this.sourceUpdater_.audioTimestampOffset(e.timestampOffset), - (t = !0)), - t && this.trigger("timestampoffset")); - }), - (t.getSegmentStartTimeForTimestampOffsetCalculation_ = function (e) { - var t = e.videoTimingInfo, - i = e.audioTimingInfo, - e = e.timingInfo; - return this.useDtsForTimestampOffset_ - ? t && "number" == typeof t.transmuxedDecodeStart - ? t.transmuxedDecodeStart - : i && "number" == typeof i.transmuxedDecodeStart - ? i.transmuxedDecodeStart - : e.start - : e.start; - }), - (t.updateTimingInfoEnd_ = function (e) { - e.timingInfo = e.timingInfo || {}; - var t = this.getMediaInfo_(), - t = - "main" === this.loaderType_ && - t && - t.hasVideo && - e.videoTimingInfo - ? e.videoTimingInfo - : e.audioTimingInfo; - t && - (e.timingInfo.end = - "number" == typeof t.end ? t.end : t.start + e.duration); - }), - (t.handleAppendsDone_ = function () { - if ( - (this.pendingSegment_ && this.trigger("appendsdone"), - !this.pendingSegment_) - ) - return ( - (this.state = "READY"), - void (this.paused() || this.monitorBuffer_()) - ); - var e = this.pendingSegment_; - this.updateTimingInfoEnd_(e), - this.shouldSaveSegmentTimingInfo_ && - this.syncController_.saveSegmentTimingInfo({ - segmentInfo: e, - shouldSaveTimelineMapping: "main" === this.loaderType_, - }); - var t = cl(e, this.sourceType_); - if ( - (t && - ("warn" === t.severity - ? tr.log.warn(t.message) - : this.logger_(t.message)), - this.recordThroughput_(e), - (this.pendingSegment_ = null), - (this.state = "READY"), - !e.isSyncRequest || - (this.trigger("syncinfoupdate"), e.hasAppendedData_)) - ) { - this.logger_("Appended " + sl(e)), - this.addSegmentMetadataCue_(e), - (this.fetchAtBuffer_ = !0), - this.currentTimeline_ !== e.timeline && - (this.timelineChangeController_.lastTimelineChange({ - type: this.loaderType_, - from: this.currentTimeline_, - to: e.timeline, - }), - "main" !== this.loaderType_ || - this.audioDisabled_ || - this.timelineChangeController_.lastTimelineChange({ - type: "audio", - from: this.currentTimeline_, - to: e.timeline, - })), - (this.currentTimeline_ = e.timeline), - this.trigger("syncinfoupdate"); - var i = e.segment, - t = e.part, - i = - i.end && - this.currentTime_() - i.end > 3 * e.playlist.targetDuration, - t = - t && - t.end && - this.currentTime_() - t.end > 3 * e.playlist.partTargetDuration; - if (i || t) - return ( - this.logger_("bad " + (i ? "segment" : "part") + " " + sl(e)), - void this.resetEverything() - ); - null !== this.mediaIndex && this.trigger("bandwidthupdate"), - this.trigger("progress"), - (this.mediaIndex = e.mediaIndex), - (this.partIndex = e.partIndex), - this.isEndOfStream_(e.mediaIndex, e.playlist, e.partIndex) && - this.endOfStream(), - this.trigger("appended"), - e.hasAppendedData_ && this.mediaAppends++, - this.paused() || this.monitorBuffer_(); - } else - this.logger_("Throwing away un-appended sync request " + sl(e)); - }), - (t.recordThroughput_ = function (e) { - var t, i; - e.duration < 1 / 60 - ? this.logger_( - "Ignoring segment's throughput because its duration of " + - e.duration + - " is less than the min to record " + - 1 / 60, - ) - : ((t = this.throughput.rate), - (i = Date.now() - e.endOfAllRequests + 1), - (i = Math.floor((e.byteLength / i) * 8 * 1e3)), - (this.throughput.rate += (i - t) / ++this.throughput.count)); - }), - (t.addSegmentMetadataCue_ = function (e) { - var t, i, n, r; - this.segmentMetadataTrack_ && - ((i = (t = e.segment).start), - (r = t.end), - al(i) && - al(r) && - (rl(i, r, this.segmentMetadataTrack_), - (n = window.WebKitDataCue || window.VTTCue), - (e = { - custom: t.custom, - dateTimeObject: t.dateTimeObject, - dateTimeString: t.dateTimeString, - bandwidth: e.playlist.attributes.BANDWIDTH, - resolution: e.playlist.attributes.RESOLUTION, - codecs: e.playlist.attributes.CODECS, - byteLength: e.byteLength, - uri: e.uri, - timeline: e.timeline, - playlist: e.playlist.id, - start: i, - end: r, - }), - ((r = new n(i, r, JSON.stringify(e))).value = e), - this.segmentMetadataTrack_.addCue(r))); - }), - e - ); - })(tr.EventTarget); - function Rl() {} - function Nl(e) { - return "string" != typeof e - ? e - : e.replace(/./, function (e) { - return e.toUpperCase(); - }); - } - function Ul(e, t) { - var i = t[e + "Buffer"]; - return (i && i.updating) || t.queuePending[e]; - } - function Bl(e, t) { - if (0 !== t.queue.length) { - var i = 0, - n = t.queue[i]; - if ("mediaSource" !== n.type) { - if ( - "mediaSource" !== e && - t.ready() && - "closed" !== t.mediaSource.readyState && - !Ul(e, t) - ) { - if (n.type !== e) { - if ( - null === - (i = (function (e, t) { - for (var i = 0; i < t.length; i++) { - var n = t[i]; - if ("mediaSource" === n.type) return null; - if (n.type === e) return i; - } - return null; - })(e, t.queue)) - ) - return; - n = t.queue[i]; - } - t.queue.splice(i, 1), - (t.queuePending[e] = n).action(e, t), - n.doneFn || ((t.queuePending[e] = null), Bl(e, t)); - } - } else - t.updating() || - "closed" === t.mediaSource.readyState || - (t.queue.shift(), - n.action(t), - n.doneFn && n.doneFn(), - Bl("audio", t), - Bl("video", t)); - } - } - function Fl(e, t) { - var i = t[e + "Buffer"], - n = Nl(e); - i && - (i.removeEventListener("updateend", t["on" + n + "UpdateEnd_"]), - i.removeEventListener("error", t["on" + n + "Error_"]), - (t.codecs[e] = null), - (t[e + "Buffer"] = null)); - } - function jl(e, t) { - return e && t && -1 !== Array.prototype.indexOf.call(e.sourceBuffers, t); - } - function Hl(e) { - var t = e.type, - i = e.sourceUpdater, - n = e.action, - r = e.doneFn, - e = e.name; - i.queue.push({ type: t, action: n, doneFn: r, name: e }), Bl(t, i); - } - function ql(i, n) { - return function (e) { - var t; - n.queuePending[i] && - ((t = n.queuePending[i].doneFn), - (n.queuePending[i] = null), - t && t(n[i + "Error_"])), - Bl(i, n); - }; - } - function Vl(e) { - return decodeURIComponent(escape(String.fromCharCode.apply(null, e))); - } - function Wl(e, t) { - e.abort(), - e.pause(), - t && - t.activePlaylistLoader && - (t.activePlaylistLoader.pause(), (t.activePlaylistLoader = null)); - } - function Gl(e, t) { - (t.activePlaylistLoader = e).load(); - } - function zl(e, t) { - for (var i = 0; i < e.length; i++) { - if (nu(t, e[i])) return !0; - if (e[i].playlists && zl(e[i].playlists, t)) return !0; - } - return !1; - } - function Xl(a) { - ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function (e) { - yc[e](e, a); - }); - var e, - s = a.mediaTypes, - t = a.masterPlaylistLoader, - i = a.tech, - n = a.vhs, - r = a.segmentLoaders, - o = r.AUDIO, - u = r.main; - function l() { - s.AUDIO.onTrackChanged(), - i.trigger({ type: "usage", name: "vhs-audio-change" }), - i.trigger({ type: "usage", name: "hls-audio-change" }); - } - for (e in (["AUDIO", "SUBTITLES"].forEach(function (e) { - var u, l, o, c, t, i, d, h, n, r; - (s[e].activeGroup = - ((u = e), - (l = a), - function (t) { - var e = l.masterPlaylistLoader, - i = l.mediaTypes[u].groups, - n = e.media(); - if (!n) return null; - var r = null; - n.attributes[u] && (r = i[n.attributes[u]]); - var a = Object.keys(i); - if (!r) - if ("AUDIO" === u && 1 < a.length && au(l.master)) - for (var s = 0; s < a.length; s++) { - var o = i[a[s]]; - if (zl(o, n)) { - r = o; - break; - } - } - else i.main ? (r = i.main) : 1 === a.length && (r = i[a[0]]); - return "undefined" == typeof t - ? r - : (null !== t && - r && - r.filter(function (e) { - return e.id === t.id; - })[0]) || - null; - })), - (s[e].activeTrack = vc[e](e, a)), - (s[e].onGroupChanged = - ((o = e), - (c = a), - function () { - var e = c.segmentLoaders, - t = e[o], - i = e.main, - n = c.mediaTypes[o], - r = n.activeTrack(), - a = n.getActiveGroup(), - s = n.activePlaylistLoader, - e = n.lastGroup_; - (a && e && a.id === e.id) || - ((n.lastGroup_ = a), - (n.lastTrack_ = r), - Wl(t, n), - a && - !a.isMasterPlaylist && - (a.playlistLoader - ? (t.resyncLoader(), Gl(a.playlistLoader, n)) - : s && i.resetEverything())); - })), - (s[e].onGroupChanging = - ((t = e), - (i = a), - function () { - var e = i.segmentLoaders[t]; - (i.mediaTypes[t].lastGroup_ = null), e.abort(), e.pause(); - })), - (s[e].onTrackChanged = - ((d = e), - (h = a), - function () { - var e = h.masterPlaylistLoader, - t = h.segmentLoaders, - i = t[d], - n = t.main, - r = h.mediaTypes[d], - a = r.activeTrack(), - s = r.getActiveGroup(), - o = r.activePlaylistLoader, - u = r.lastTrack_; - if ( - (!u || !a || u.id !== a.id) && - ((r.lastGroup_ = s), (r.lastTrack_ = a), Wl(i, r), s) - ) { - if (s.isMasterPlaylist) { - if (!a || !u || a.id === u.id) return; - var l = h.vhs.masterPlaylistController_, - t = l.selectPlaylist(); - return l.media() === t - ? void 0 - : (r.logger_( - "track change. Switching master audio from " + - u.id + - " to " + - a.id, - ), - e.pause(), - n.resetEverything(), - void l.fastQualityChange_(t)); - } - if ("AUDIO" === d) { - if (!s.playlistLoader) - return n.setAudio(!0), void n.resetEverything(); - i.setAudio(!0), n.setAudio(!1); - } - o !== s.playlistLoader && - (i.track && i.track(a), i.resetEverything()), - Gl(s.playlistLoader, r); - } - })), - (s[e].getActiveGroup = - ((n = e), - (r = a.mediaTypes), - function () { - var e = r[n].activeTrack(); - return e ? r[n].activeGroup(e) : null; - })); - }), - (r = s.AUDIO.activeGroup()) && - ((r = ( - r.filter(function (e) { - return e.default; - })[0] || r[0] - ).id), - (s.AUDIO.tracks[r].enabled = !0), - s.AUDIO.onGroupChanged(), - s.AUDIO.onTrackChanged(), - s.AUDIO.getActiveGroup().playlistLoader - ? (u.setAudio(!1), o.setAudio(!0)) - : u.setAudio(!0)), - t.on("mediachange", function () { - ["AUDIO", "SUBTITLES"].forEach(function (e) { - return s[e].onGroupChanged(); - }); - }), - t.on("mediachanging", function () { - ["AUDIO", "SUBTITLES"].forEach(function (e) { - return s[e].onGroupChanging(); - }); - }), - i.audioTracks().addEventListener("change", l), - i.remoteTextTracks().addEventListener("change", s.SUBTITLES.onTrackChanged), - n.on("dispose", function () { - i.audioTracks().removeEventListener("change", l), - i - .remoteTextTracks() - .removeEventListener("change", s.SUBTITLES.onTrackChanged); - }), - i.clearTracks("audio"), - s.AUDIO.tracks)) - i.audioTracks().addTrack(s.AUDIO.tracks[e]); - } - function Kl(e, t, i) { - var n, - r, - a, - s, - o = e.masterPlaylistController_, - u = - o[ - (e.options_.smoothQualityChange ? "smooth" : "fast") + - "QualityChange_" - ].bind(o); - t.attributes && - ((n = t.attributes.RESOLUTION), - (this.width = n && n.width), - (this.height = n && n.height), - (this.bandwidth = t.attributes.BANDWIDTH)), - (this.codecs = $u(o.master(), t)), - (this.playlist = t), - (this.id = i), - (this.enabled = - ((r = e.playlists), - (a = t.id), - (s = u), - function (e) { - var t = r.master.playlists[a], - i = Zo(t), - n = eu(t); - return "undefined" == typeof e - ? n - : (e ? delete t.disabled : (t.disabled = !0), - e === n || - i || - (s(), - e - ? r.trigger("renditionenabled") - : r.trigger("renditiondisabled")), - e); - })); - } - function Yl(t, e) { - var i = 0, - n = 0, - r = tr.mergeOptions(wc, e); - function a() { - n && t.currentTime(n); - } - function s(e) { - null != e && - ((n = (t.duration() !== 1 / 0 && t.currentTime()) || 0), - t.one("loadedmetadata", a), - t.src(e), - t.trigger({ type: "usage", name: "vhs-error-reload" }), - t.trigger({ type: "usage", name: "hls-error-reload" }), - t.play()); - } - function o() { - return Date.now() - i < 1e3 * r.errorInterval - ? (t.trigger({ type: "usage", name: "vhs-error-reload-canceled" }), - void t.trigger({ type: "usage", name: "hls-error-reload-canceled" })) - : r.getSource && "function" == typeof r.getSource - ? ((i = Date.now()), r.getSource.call(t, s)) - : void tr.log.error( - "ERROR: reloadSourceOnError - The option getSource must be a function!", - ); - } - function u() { - t.off("loadedmetadata", a), t.off("error", o), t.off("dispose", u); - } - t.ready(function () { - t.trigger({ type: "usage", name: "vhs-error-reload-initialized" }), - t.trigger({ type: "usage", name: "hls-error-reload-initialized" }); - }), - t.on("error", o), - t.on("dispose", u), - (t.reloadSourceOnError = function (e) { - u(), Yl(t, e); - }); - } - var Ql, - $l = ["video", "audio"], - Jl = function (n, r, a) { - return function (t, i) { - var e = i[t + "Buffer"]; - if (jl(i.mediaSource, e)) { - i.logger_( - "Appending segment " + - r.mediaIndex + - "'s " + - n.length + - " bytes to " + - t + - "Buffer", - ); - try { - e.appendBuffer(n); - } catch (e) { - i.logger_( - "Error with code " + - e.code + - " " + - (22 === e.code ? "(QUOTA_EXCEEDED_ERR) " : "") + - "when appending segment " + - r.mediaIndex + - " to " + - t + - "Buffer", - ), - (i.queuePending[t] = null), - a(e); - } - } - }; - }, - Zl = function (n, r) { - return function (t, i) { - var e = i[t + "Buffer"]; - if (jl(i.mediaSource, e)) { - i.logger_("Removing " + n + " to " + r + " from " + t + "Buffer"); - try { - e.remove(n, r); - } catch (e) { - i.logger_( - "Remove " + n + " to " + r + " from " + t + "Buffer failed", - ); - } - } - }; - }, - ec = function (n) { - return function (e, t) { - var i = t[e + "Buffer"]; - jl(t.mediaSource, i) && - (t.logger_("Setting " + e + "timestampOffset to " + n), - (i.timestampOffset = n)); - }; - }, - tc = function (i) { - return function (e, t) { - i(); - }; - }, - ic = function (t) { - return function (e) { - if ("open" === e.mediaSource.readyState) { - e.logger_("Calling mediaSource endOfStream(" + (t || "") + ")"); - try { - e.mediaSource.endOfStream(t); - } catch (e) { - tr.log.warn("Failed to call media source endOfStream", e); - } - } - }; - }, - nc = function (t) { - return function (e) { - e.logger_("Setting mediaSource duration to " + t); - try { - e.mediaSource.duration = t; - } catch (e) { - tr.log.warn("Failed to set media source duration", e); - } - }; - }, - rc = function () { - return function (t, e) { - if ("open" === e.mediaSource.readyState) { - var i = e[t + "Buffer"]; - if (jl(e.mediaSource, i)) { - e.logger_("calling abort on " + t + "Buffer"); - try { - i.abort(); - } catch (e) { - tr.log.warn("Failed to abort on " + t + "Buffer", e); - } - } - } - }; - }, - ac = function (n, r) { - return function (e) { - var t = Nl(n), - i = mr(r); - e.logger_("Adding " + n + "Buffer with codec " + r + " to mediaSource"); - i = e.mediaSource.addSourceBuffer(i); - i.addEventListener("updateend", e["on" + t + "UpdateEnd_"]), - i.addEventListener("error", e["on" + t + "Error_"]), - (e.codecs[n] = r), - (e[n + "Buffer"] = i); - }; - }, - sc = function (i) { - return function (e) { - var t = e[i + "Buffer"]; - if ((Fl(i, e), jl(e.mediaSource, t))) { - e.logger_( - "Removing " + - i + - "Buffer with codec " + - e.codecs[i] + - " from mediaSource", - ); - try { - e.mediaSource.removeSourceBuffer(t); - } catch (e) { - tr.log.warn("Failed to removeSourceBuffer " + i + "Buffer", e); - } - } - }; - }, - oc = function (r) { - return function (e, t) { - var i = t[e + "Buffer"], - n = mr(r); - jl(t.mediaSource, i) && - t.codecs[e] !== r && - (t.logger_( - "changing " + e + "Buffer codec from " + t.codecs[e] + " to " + r, - ), - i.changeType(n), - (t.codecs[e] = r)); - }; - }, - uc = (function (i) { - function e(e) { - var t = i.call(this) || this; - return ( - (t.mediaSource = e), - (t.sourceopenListener_ = function () { - return Bl("mediaSource", ft(t)); - }), - t.mediaSource.addEventListener("sourceopen", t.sourceopenListener_), - (t.logger_ = Ro("SourceUpdater")), - (t.audioTimestampOffset_ = 0), - (t.videoTimestampOffset_ = 0), - (t.queue = []), - (t.queuePending = { audio: null, video: null }), - (t.delayedAudioAppendQueue_ = []), - (t.videoAppendQueued_ = !1), - (t.codecs = {}), - (t.onVideoUpdateEnd_ = ql("video", ft(t))), - (t.onAudioUpdateEnd_ = ql("audio", ft(t))), - (t.onVideoError_ = function (e) { - t.videoError_ = e; - }), - (t.onAudioError_ = function (e) { - t.audioError_ = e; - }), - (t.createdSourceBuffers_ = !1), - (t.initializedEme_ = !1), - (t.triggeredReady_ = !1), - t - ); - } - mt(e, i); - var t = e.prototype; - return ( - (t.initializedEme = function () { - (this.initializedEme_ = !0), this.triggerReady(); - }), - (t.hasCreatedSourceBuffers = function () { - return this.createdSourceBuffers_; - }), - (t.hasInitializedAnyEme = function () { - return this.initializedEme_; - }), - (t.ready = function () { - return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme(); - }), - (t.createSourceBuffers = function (e) { - this.hasCreatedSourceBuffers() || - (this.addOrChangeSourceBuffers(e), - (this.createdSourceBuffers_ = !0), - this.trigger("createdsourcebuffers"), - this.triggerReady()); - }), - (t.triggerReady = function () { - this.ready() && - !this.triggeredReady_ && - ((this.triggeredReady_ = !0), this.trigger("ready")); - }), - (t.addSourceBuffer = function (e, t) { - Hl({ - type: "mediaSource", - sourceUpdater: this, - action: ac(e, t), - name: "addSourceBuffer", - }); - }), - (t.abort = function (e) { - Hl({ type: e, sourceUpdater: this, action: rc(e), name: "abort" }); - }), - (t.removeSourceBuffer = function (e) { - this.canRemoveSourceBuffer() - ? Hl({ - type: "mediaSource", - sourceUpdater: this, - action: sc(e), - name: "removeSourceBuffer", - }) - : tr.log.error("removeSourceBuffer is not supported!"); - }), - (t.canRemoveSourceBuffer = function () { - return ( - !tr.browser.IE_VERSION && - !tr.browser.IS_FIREFOX && - window.MediaSource && - window.MediaSource.prototype && - "function" == typeof window.MediaSource.prototype.removeSourceBuffer - ); - }), - (e.canChangeType = function () { - return ( - window.SourceBuffer && - window.SourceBuffer.prototype && - "function" == typeof window.SourceBuffer.prototype.changeType - ); - }), - (t.canChangeType = function () { - return this.constructor.canChangeType(); - }), - (t.changeType = function (e, t) { - this.canChangeType() - ? Hl({ - type: e, - sourceUpdater: this, - action: oc(t), - name: "changeType", - }) - : tr.log.error("changeType is not supported!"); - }), - (t.addOrChangeSourceBuffers = function (i) { - var n = this; - if (!i || "object" != typeof i || 0 === Object.keys(i).length) - throw new Error( - "Cannot addOrChangeSourceBuffers to undefined codecs", - ); - Object.keys(i).forEach(function (e) { - var t = i[e]; - if (!n.hasCreatedSourceBuffers()) return n.addSourceBuffer(e, t); - n.canChangeType() && n.changeType(e, t); - }); - }), - (t.appendBuffer = function (e, t) { - var i = this, - n = e.segmentInfo, - r = e.type, - a = e.bytes; - if ( - ((this.processedAppend_ = !0), - "audio" === r && this.videoBuffer && !this.videoAppendQueued_) - ) - return ( - this.delayedAudioAppendQueue_.push([e, t]), - void this.logger_( - "delayed audio append of " + a.length + " until video append", - ) - ); - Hl({ - type: r, - sourceUpdater: this, - action: Jl(a, n || { mediaIndex: -1 }, t), - doneFn: t, - name: "appendBuffer", - }), - "video" === r && - ((this.videoAppendQueued_ = !0), - this.delayedAudioAppendQueue_.length && - ((r = this.delayedAudioAppendQueue_.slice()), - this.logger_( - "queuing delayed audio " + r.length + " appendBuffers", - ), - (this.delayedAudioAppendQueue_.length = 0), - r.forEach(function (e) { - i.appendBuffer.apply(i, e); - }))); - }), - (t.audioBuffered = function () { - return ( - (jl(this.mediaSource, this.audioBuffer) && - this.audioBuffer.buffered) || - tr.createTimeRange() - ); - }), - (t.videoBuffered = function () { - return ( - (jl(this.mediaSource, this.videoBuffer) && - this.videoBuffer.buffered) || - tr.createTimeRange() - ); - }), - (t.buffered = function () { - var e = jl(this.mediaSource, this.videoBuffer) - ? this.videoBuffer - : null, - t = jl(this.mediaSource, this.audioBuffer) - ? this.audioBuffer - : null; - return t && !e - ? this.audioBuffered() - : e && !t - ? this.videoBuffered() - : (function (e, t) { - var i = null, - n = null, - r = 0, - a = [], - s = []; - if (!(e && e.length && t && t.length)) - return tr.createTimeRange(); - for (var o = e.length; o--; ) - a.push({ time: e.start(o), type: "start" }), - a.push({ time: e.end(o), type: "end" }); - for (o = t.length; o--; ) - a.push({ time: t.start(o), type: "start" }), - a.push({ time: t.end(o), type: "end" }); - for ( - a.sort(function (e, t) { - return e.time - t.time; - }), - o = 0; - o < a.length; - o++ - ) - "start" === a[o].type - ? 2 === ++r && (i = a[o].time) - : "end" === a[o].type && 1 === --r && (n = a[o].time), - null !== i && - null !== n && - (s.push([i, n]), (n = i = null)); - return tr.createTimeRanges(s); - })(this.audioBuffered(), this.videoBuffered()); - }), - (t.setDuration = function (e, t) { - void 0 === t && (t = Rl), - Hl({ - type: "mediaSource", - sourceUpdater: this, - action: nc(e), - name: "duration", - doneFn: t, - }); - }), - (t.endOfStream = function (e, t) { - void 0 === t && (t = Rl), - Hl({ - type: "mediaSource", - sourceUpdater: this, - action: ic( - (e = - "string" != typeof (e = void 0 === e ? null : e) - ? void 0 - : e), - ), - name: "endOfStream", - doneFn: t, - }); - }), - (t.removeAudio = function (e, t, i) { - void 0 === i && (i = Rl), - this.audioBuffered().length && 0 !== this.audioBuffered().end(0) - ? Hl({ - type: "audio", - sourceUpdater: this, - action: Zl(e, t), - doneFn: i, - name: "remove", - }) - : i(); - }), - (t.removeVideo = function (e, t, i) { - void 0 === i && (i = Rl), - this.videoBuffered().length && 0 !== this.videoBuffered().end(0) - ? Hl({ - type: "video", - sourceUpdater: this, - action: Zl(e, t), - doneFn: i, - name: "remove", - }) - : i(); - }), - (t.updating = function () { - return !(!Ul("audio", this) && !Ul("video", this)); - }), - (t.audioTimestampOffset = function (e) { - return ( - "undefined" != typeof e && - this.audioBuffer && - this.audioTimestampOffset_ !== e && - (Hl({ - type: "audio", - sourceUpdater: this, - action: ec(e), - name: "timestampOffset", - }), - (this.audioTimestampOffset_ = e)), - this.audioTimestampOffset_ - ); - }), - (t.videoTimestampOffset = function (e) { - return ( - "undefined" != typeof e && - this.videoBuffer && - this.videoTimestampOffset !== e && - (Hl({ - type: "video", - sourceUpdater: this, - action: ec(e), - name: "timestampOffset", - }), - (this.videoTimestampOffset_ = e)), - this.videoTimestampOffset_ - ); - }), - (t.audioQueueCallback = function (e) { - this.audioBuffer && - Hl({ - type: "audio", - sourceUpdater: this, - action: tc(e), - name: "callback", - }); - }), - (t.videoQueueCallback = function (e) { - this.videoBuffer && - Hl({ - type: "video", - sourceUpdater: this, - action: tc(e), - name: "callback", - }); - }), - (t.dispose = function () { - var t = this; - this.trigger("dispose"), - $l.forEach(function (e) { - t.abort(e), - t.canRemoveSourceBuffer() - ? t.removeSourceBuffer(e) - : t[e + "QueueCallback"](function () { - return Fl(e, t); - }); - }), - (this.videoAppendQueued_ = !1), - (this.delayedAudioAppendQueue_.length = 0), - this.sourceopenListener_ && - this.mediaSource.removeEventListener( - "sourceopen", - this.sourceopenListener_, - ), - this.off(); - }), - e - ); - })(tr.EventTarget), - lc = new Uint8Array( - "\n\n".split("").map(function (e) { - return e.charCodeAt(0); - }), - ), - cc = (function (i) { - function e(e, t) { - return ( - ((t = - i.call(this, e, (t = void 0 === t ? {} : t)) || this).mediaSource_ = - null), - (t.subtitlesTrack_ = null), - (t.loaderType_ = "subtitle"), - (t.featuresNativeTextTracks_ = e.featuresNativeTextTracks), - (t.shouldSaveSegmentTimingInfo_ = !1), - t - ); - } - mt(e, i); - var t = e.prototype; - return ( - (t.createTransmuxer_ = function () { - return null; - }), - (t.buffered_ = function () { - if ( - !this.subtitlesTrack_ || - !this.subtitlesTrack_.cues || - !this.subtitlesTrack_.cues.length - ) - return tr.createTimeRanges(); - var e = this.subtitlesTrack_.cues, - t = e[0].startTime, - e = e[e.length - 1].startTime; - return tr.createTimeRanges([[t, e]]); - }), - (t.initSegmentForMap = function (e, t) { - if ((void 0 === t && (t = !1), !e)) return null; - var i = Su(e), - n = this.initSegments_[i]; - return ( - t && - !n && - e.bytes && - ((t = lc.byteLength + e.bytes.byteLength), - (t = new Uint8Array(t)).set(e.bytes), - t.set(lc, e.bytes.byteLength), - (this.initSegments_[i] = n = - { - resolvedUri: e.resolvedUri, - byterange: e.byterange, - bytes: t, - })), - n || e - ); - }), - (t.couldBeginLoading_ = function () { - return this.playlist_ && this.subtitlesTrack_ && !this.paused(); - }), - (t.init_ = function () { - return ( - (this.state = "READY"), - this.resetEverything(), - this.monitorBuffer_() - ); - }), - (t.track = function (e) { - return ( - "undefined" == typeof e || - ((this.subtitlesTrack_ = e), - "INIT" === this.state && - this.couldBeginLoading_() && - this.init_()), - this.subtitlesTrack_ - ); - }), - (t.remove = function (e, t) { - rl(e, t, this.subtitlesTrack_); - }), - (t.fillBuffer_ = function () { - var e = this, - t = this.chooseNextRequest_(); - if (t) { - if ( - null === - this.syncController_.timestampOffsetForTimeline(t.timeline) - ) - return ( - this.syncController_.one("timestampoffset", function () { - (e.state = "READY"), e.paused() || e.monitorBuffer_(); - }), - void (this.state = "WAITING_ON_TIMELINE") - ); - this.loadSegment_(t); - } - }), - (t.timestampOffsetForSegment_ = function () { - return null; - }), - (t.chooseNextRequest_ = function () { - return this.skipEmptySegments_( - i.prototype.chooseNextRequest_.call(this), - ); - }), - (t.skipEmptySegments_ = function (e) { - for (; e && e.segment.empty; ) { - if (e.mediaIndex + 1 >= e.playlist.segments.length) { - e = null; - break; - } - e = this.generateSegmentInfo_({ - playlist: e.playlist, - mediaIndex: e.mediaIndex + 1, - startOfSegment: e.startOfSegment + e.duration, - isSyncRequest: e.isSyncRequest, - }); - } - return e; - }), - (t.stopForError = function (e) { - this.error(e), - (this.state = "READY"), - this.pause(), - this.trigger("error"); - }), - (t.segmentRequestFinished_ = function (e, t, i) { - var n = this; - if (this.subtitlesTrack_) { - if ((this.saveTransferStats_(t.stats), !this.pendingSegment_)) - return ( - (this.state = "READY"), void (this.mediaRequestsAborted += 1) - ); - if (e) - return ( - e.code === Pl && this.handleTimeout_(), - e.code === Ll - ? (this.mediaRequestsAborted += 1) - : (this.mediaRequestsErrored += 1), - void this.stopForError(e) - ); - var r = this.pendingSegment_; - this.saveBandwidthRelatedStats_(r.duration, t.stats), - (this.state = "APPENDING"), - this.trigger("appending"); - var a = r.segment; - if ( - (a.map && (a.map.bytes = t.map.bytes), - (r.bytes = t.bytes), - "function" != typeof window.WebVTT && - this.subtitlesTrack_ && - this.subtitlesTrack_.tech_) - ) { - var s = function () { - n.subtitlesTrack_.tech_.off("vttjsloaded", o), - n.stopForError({ message: "Error loading vtt.js" }); - }, - o = function () { - n.subtitlesTrack_.tech_.off("vttjserror", s), - n.segmentRequestFinished_(e, t, i); - }; - return ( - (this.state = "WAITING_ON_VTTJS"), - this.subtitlesTrack_.tech_.one("vttjsloaded", o), - void this.subtitlesTrack_.tech_.one("vttjserror", s) - ); - } - a.requested = !0; - try { - this.parseVTTCues_(r); - } catch (e) { - return void this.stopForError({ message: e.message }); - } - if ( - (this.updateTimeMapping_( - r, - this.syncController_.timelines[r.timeline], - this.playlist_, - ), - r.cues.length - ? (r.timingInfo = { - start: r.cues[0].startTime, - end: r.cues[r.cues.length - 1].endTime, - }) - : (r.timingInfo = { - start: r.startOfSegment, - end: r.startOfSegment + r.duration, - }), - r.isSyncRequest) - ) - return ( - this.trigger("syncinfoupdate"), - (this.pendingSegment_ = null), - void (this.state = "READY") - ); - (r.byteLength = r.bytes.byteLength), - (this.mediaSecondsLoaded += a.duration), - r.cues.forEach(function (e) { - n.subtitlesTrack_.addCue( - n.featuresNativeTextTracks_ - ? new window.VTTCue(e.startTime, e.endTime, e.text) - : e, - ); - }), - (function (t) { - var e = t.cues; - if (e) - for (var i = 0; i < e.length; i++) { - for (var n = [], r = 0, a = 0; a < e.length; a++) - e[i].startTime === e[a].startTime && - e[i].endTime === e[a].endTime && - e[i].text === e[a].text && - 1 < ++r && - n.push(e[a]); - n.length && - n.forEach(function (e) { - return t.removeCue(e); - }); - } - })(this.subtitlesTrack_), - this.handleAppendsDone_(); - } else this.state = "READY"; - }), - (t.handleData_ = function () {}), - (t.updateTimingInfoEnd_ = function () {}), - (t.parseVTTCues_ = function (t) { - var e = !1; - "function" == typeof window.TextDecoder - ? (i = new window.TextDecoder("utf8")) - : ((i = window.WebVTT.StringDecoder()), (e = !0)); - var i = new window.WebVTT.Parser(window, window.vttjs, i); - (t.cues = []), - (t.timestampmap = { MPEGTS: 0, LOCAL: 0 }), - (i.oncue = t.cues.push.bind(t.cues)), - (i.ontimestampmap = function (e) { - t.timestampmap = e; - }), - (i.onparsingerror = function (e) { - tr.log.warn("Error encountered when parsing cues: " + e.message); - }), - t.segment.map && - ((n = t.segment.map.bytes), e && (n = Vl(n)), i.parse(n)); - var n = t.bytes; - e && (n = Vl(n)), i.parse(n), i.flush(); - }), - (t.updateTimeMapping_ = function (e, t, i) { - var n, - r, - a = e.segment; - t && - (e.cues.length - ? ((r = e.timestampmap), - (n = r.MPEGTS / hl - r.LOCAL + t.mapping), - e.cues.forEach(function (e) { - (e.startTime += n), (e.endTime += n); - }), - i.syncInfo || - ((r = e.cues[0].startTime), - (t = e.cues[e.cues.length - 1].startTime), - (i.syncInfo = { - mediaSequence: i.mediaSequence + e.mediaIndex, - time: Math.min(r, t - a.duration), - }))) - : (a.empty = !0)); - }), - e - ); - })(Ml), - dc = [ - { - name: "VOD", - run: function (e, t, i, n, r) { - if (i === 1 / 0) return null; - return { time: 0, segmentIndex: 0, partIndex: null }; - }, - }, - { - name: "ProgramDateTime", - run: function (e, t, i, n, r) { - if (!Object.keys(e.timelineToDatetimeMappings).length) return null; - var a = null, - s = null, - o = Wo(t); - r = r || 0; - for (var u = 0; u < o.length; u++) { - var l = o[t.endList || 0 === r ? u : o.length - (u + 1)], - c = l.segment, - d = e.timelineToDatetimeMappings[c.timeline]; - if (d && c.dateTimeObject) { - var h = c.dateTimeObject.getTime() / 1e3 + d; - if (c.parts && "number" == typeof l.partIndex) - for (var p = 0; p < l.partIndex; p++) h += c.parts[p].duration; - d = Math.abs(r - h); - if (null !== s && (0 === d || s < d)) break; - (s = d), - (a = { - time: h, - segmentIndex: l.segmentIndex, - partIndex: l.partIndex, - }); - } - } - return a; - }, - }, - { - name: "Segment", - run: function (e, t, i, n, r) { - var a = null, - s = null; - r = r || 0; - for (var o = Wo(t), u = 0; u < o.length; u++) { - var l = o[t.endList || 0 === r ? u : o.length - (u + 1)], - c = l.segment, - d = (l.part && l.part.start) || (c && c.start); - if (c.timeline === n && "undefined" != typeof d) { - c = Math.abs(r - d); - if (null !== s && s < c) break; - (!a || null === s || c <= s) && - ((s = c), - (a = { - time: d, - segmentIndex: l.segmentIndex, - partIndex: l.partIndex, - })); - } - } - return a; - }, - }, - { - name: "Discontinuity", - run: function (e, t, i, n, r) { - var a = null; - if ( - ((r = r || 0), - t.discontinuityStarts && t.discontinuityStarts.length) - ) - for (var s = null, o = 0; o < t.discontinuityStarts.length; o++) { - var u = t.discontinuityStarts[o], - l = t.discontinuitySequence + o + 1, - c = e.discontinuities[l]; - if (c) { - l = Math.abs(r - c.time); - if (null !== s && s < l) break; - (!a || null === s || l <= s) && - ((s = l), - (a = { time: c.time, segmentIndex: u, partIndex: null })); - } - } - return a; - }, - }, - { - name: "Playlist", - run: function (e, t, i, n, r) { - return t.syncInfo - ? { - time: t.syncInfo.time, - segmentIndex: t.syncInfo.mediaSequence - t.mediaSequence, - partIndex: null, - } - : null; - }, - }, - ], - hc = (function (i) { - function e(e) { - var t = i.call(this) || this; - return ( - (t.timelines = []), - (t.discontinuities = []), - (t.timelineToDatetimeMappings = {}), - (t.logger_ = Ro("SyncController")), - t - ); - } - mt(e, i); - var t = e.prototype; - return ( - (t.getSyncPoint = function (e, t, i, n) { - i = this.runStrategies_(e, t, i, n); - return i.length - ? this.selectSyncPoint_(i, { key: "time", value: n }) - : null; - }), - (t.getExpiredTime = function (e, t) { - if (!e || !e.segments) return null; - t = this.runStrategies_(e, t, e.discontinuitySequence, 0); - if (!t.length) return null; - t = this.selectSyncPoint_(t, { key: "segmentIndex", value: 0 }); - return ( - 0 < t.segmentIndex && (t.time *= -1), - Math.abs( - t.time + - Qo({ - defaultDuration: e.targetDuration, - durationList: e.segments, - startIndex: t.segmentIndex, - endIndex: 0, - }), - ) - ); - }), - (t.runStrategies_ = function (e, t, i, n) { - for (var r = [], a = 0; a < dc.length; a++) { - var s = dc[a], - o = s.run(this, e, t, i, n); - o && - ((o.strategy = s.name), - r.push({ strategy: s.name, syncPoint: o })); - } - return r; - }), - (t.selectSyncPoint_ = function (e, t) { - for ( - var i = e[0].syncPoint, - n = Math.abs(e[0].syncPoint[t.key] - t.value), - r = e[0].strategy, - a = 1; - a < e.length; - a++ - ) { - var s = Math.abs(e[a].syncPoint[t.key] - t.value); - s < n && ((n = s), (i = e[a].syncPoint), (r = e[a].strategy)); - } - return ( - this.logger_( - "syncPoint for [" + - t.key + - ": " + - t.value + - "] chosen with strategy [" + - r + - "]: [time:" + - i.time + - ", segmentIndex:" + - i.segmentIndex + - ("number" == typeof i.partIndex - ? ",partIndex:" + i.partIndex - : "") + - "]", - ), - i - ); - }), - (t.saveExpiredSegmentInfo = function (e, t) { - var i = t.mediaSequence - e.mediaSequence; - if (86400 < i) - tr.log.warn( - "Not saving expired segment info. Media sequence gap " + - i + - " is too large.", - ); - else - for (var n = i - 1; 0 <= n; n--) { - var r = e.segments[n]; - if (r && "undefined" != typeof r.start) { - (t.syncInfo = { - mediaSequence: e.mediaSequence + n, - time: r.start, - }), - this.logger_( - "playlist refresh sync: [time:" + - t.syncInfo.time + - ", mediaSequence: " + - t.syncInfo.mediaSequence + - "]", - ), - this.trigger("syncinfoupdate"); - break; - } - } - }), - (t.setDateTimeMappingForStart = function (e) { - var t; - (this.timelineToDatetimeMappings = {}), - e.segments && - e.segments.length && - e.segments[0].dateTimeObject && - ((e = (t = e.segments[0]).dateTimeObject.getTime() / 1e3), - (this.timelineToDatetimeMappings[t.timeline] = -e)); - }), - (t.saveSegmentTimingInfo = function (e) { - var t = e.segmentInfo, - i = e.shouldSaveTimelineMapping, - n = this.calculateSegmentTimeMapping_(t, t.timingInfo, i), - e = t.segment; - n && - (this.saveDiscontinuitySyncInfo_(t), - t.playlist.syncInfo || - (t.playlist.syncInfo = { - mediaSequence: t.playlist.mediaSequence + t.mediaIndex, - time: e.start, - })); - t = e.dateTimeObject; - e.discontinuity && - i && - t && - (this.timelineToDatetimeMappings[e.timeline] = -t.getTime() / 1e3); - }), - (t.timestampOffsetForTimeline = function (e) { - return "undefined" == typeof this.timelines[e] - ? null - : this.timelines[e].time; - }), - (t.mappingForTimeline = function (e) { - return "undefined" == typeof this.timelines[e] - ? null - : this.timelines[e].mapping; - }), - (t.calculateSegmentTimeMapping_ = function (e, t, i) { - var n, - r, - a = e.segment, - s = e.part, - o = this.timelines[e.timeline]; - if ("number" == typeof e.timestampOffset) - (o = { - time: e.startOfSegment, - mapping: e.startOfSegment - t.start, - }), - i && - ((this.timelines[e.timeline] = o), - this.trigger("timestampoffset"), - this.logger_( - "time mapping for timeline " + - e.timeline + - ": [time: " + - o.time + - "] [mapping: " + - o.mapping + - "]", - )), - (n = e.startOfSegment), - (r = t.end + o.mapping); - else { - if (!o) return !1; - (n = t.start + o.mapping), (r = t.end + o.mapping); - } - return ( - s && ((s.start = n), (s.end = r)), - (!a.start || n < a.start) && (a.start = n), - (a.end = r), - !0 - ); - }), - (t.saveDiscontinuitySyncInfo_ = function (e) { - var t = e.playlist, - i = e.segment; - if (i.discontinuity) - this.discontinuities[i.timeline] = { time: i.start, accuracy: 0 }; - else if (t.discontinuityStarts && t.discontinuityStarts.length) - for (var n = 0; n < t.discontinuityStarts.length; n++) { - var r, - a = t.discontinuityStarts[n], - s = t.discontinuitySequence + n + 1, - o = a - e.mediaIndex, - u = Math.abs(o); - (!this.discontinuities[s] || - this.discontinuities[s].accuracy > u) && - ((r = void 0), - (r = - o < 0 - ? i.start - - Qo({ - defaultDuration: t.targetDuration, - durationList: t.segments, - startIndex: e.mediaIndex, - endIndex: a, - }) - : i.end + - Qo({ - defaultDuration: t.targetDuration, - durationList: t.segments, - startIndex: e.mediaIndex + 1, - endIndex: a, - })), - (this.discontinuities[s] = { time: r, accuracy: u })); - } - }), - (t.dispose = function () { - this.trigger("dispose"), this.off(); - }), - e - ); - })(tr.EventTarget), - pc = (function (t) { - function e() { - var e = t.call(this) || this; - return ( - (e.pendingTimelineChanges_ = {}), (e.lastTimelineChanges_ = {}), e - ); - } - mt(e, t); - var i = e.prototype; - return ( - (i.clearPendingTimelineChange = function (e) { - (this.pendingTimelineChanges_[e] = null), - this.trigger("pendingtimelinechange"); - }), - (i.pendingTimelineChange = function (e) { - var t = e.type, - i = e.from, - e = e.to; - return ( - "number" == typeof i && - "number" == typeof e && - ((this.pendingTimelineChanges_[t] = { type: t, from: i, to: e }), - this.trigger("pendingtimelinechange")), - this.pendingTimelineChanges_[t] - ); - }), - (i.lastTimelineChange = function (e) { - var t = e.type, - i = e.from, - e = e.to; - return ( - "number" == typeof i && - "number" == typeof e && - ((this.lastTimelineChanges_[t] = { type: t, from: i, to: e }), - delete this.pendingTimelineChanges_[t], - this.trigger("timelinechange")), - this.lastTimelineChanges_[t] - ); - }), - (i.dispose = function () { - this.trigger("dispose"), - (this.pendingTimelineChanges_ = {}), - (this.lastTimelineChanges_ = {}), - this.off(); - }), - e - ); - })(tr.EventTarget), - fc = x( - U( - W(function () { - var e = - "undefined" != typeof globalThis - ? globalThis - : "undefined" != typeof window - ? window - : "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : {}; - function t(e, t, i) { - return ( - e( - (i = { - path: t, - exports: {}, - require: function (e, t) { - return (function () { - throw new Error( - "Dynamic requires are not currently supported by @rollup/plugin-commonjs", - ); - })(null == t && i.path); - }, - }), - i.exports, - ), - i.exports - ); - } - var i = t(function (e) { - function n(e, t) { - for (var i = 0; i < t.length; i++) { - var n = t[i]; - (n.enumerable = n.enumerable || !1), - (n.configurable = !0), - "value" in n && (n.writable = !0), - Object.defineProperty(e, n.key, n); - } - } - (e.exports = function (e, t, i) { - return t && n(e.prototype, t), i && n(e, i), e; - }), - (e.exports.default = e.exports), - (e.exports.__esModule = !0); - }), - n = t(function (i) { - function n(e, t) { - return ( - (i.exports = n = - Object.setPrototypeOf || - function (e, t) { - return (e.__proto__ = t), e; - }), - (i.exports.default = i.exports), - (i.exports.__esModule = !0), - n(e, t) - ); - } - (i.exports = n), - (i.exports.default = i.exports), - (i.exports.__esModule = !0); - }), - r = t(function (e) { - (e.exports = function (e, t) { - (e.prototype = Object.create(t.prototype)), - (e.prototype.constructor = e), - n(e, t); - }), - (e.exports.default = e.exports), - (e.exports.__esModule = !0); - }), - a = (function () { - function e() { - this.listeners = {}; - } - var t = e.prototype; - return ( - (t.on = function (e, t) { - this.listeners[e] || (this.listeners[e] = []), - this.listeners[e].push(t); - }), - (t.off = function (e, t) { - if (!this.listeners[e]) return !1; - t = this.listeners[e].indexOf(t); - return ( - (this.listeners[e] = this.listeners[e].slice(0)), - this.listeners[e].splice(t, 1), - -1 < t - ); - }), - (t.trigger = function (e) { - var t = this.listeners[e]; - if (t) - if (2 === arguments.length) - for (var i = t.length, n = 0; n < i; ++n) - t[n].call(this, arguments[1]); - else - for ( - var r = Array.prototype.slice.call(arguments, 1), - a = t.length, - s = 0; - s < a; - ++s - ) - t[s].apply(this, r); - }), - (t.dispose = function () { - this.listeners = {}; - }), - (t.pipe = function (t) { - this.on("data", function (e) { - t.push(e); - }); - }), - e - ); - })(); - /*! @name aes-decrypter @version 3.1.3 @license Apache-2.0 */ - var c = null, - m = (function () { - function e(e) { - var t, i, n; - (c = - c || - (function () { - for ( - var e, - t, - i, - n, - r, - a, - s, - o = [ - [[], [], [], [], []], - [[], [], [], [], []], - ], - u = o[0], - l = o[1], - c = u[4], - d = l[4], - h = [], - p = [], - f = 0; - f < 256; - f++ - ) - p[(h[f] = (f << 1) ^ (283 * (f >> 7))) ^ f] = f; - for (e = t = 0; !c[e]; e ^= i || 1, t = p[t] || 1) - for ( - s = - (16843009 * - h[ - (n = - h[ - (i = - h[ - (d[ - (c[e] = r = - ((r = - t ^ - (t << 1) ^ - (t << 2) ^ - (t << 3) ^ - (t << 4)) >> - 8) ^ - (255 & r) ^ - 99) - ] = e) - ]) - ]) - ]) ^ - (65537 * n) ^ - (257 * i) ^ - (16843008 * e), - a = (257 * h[r]) ^ (16843008 * r), - f = 0; - f < 4; - f++ - ) - (u[f][e] = a = (a << 24) ^ (a >>> 8)), - (l[f][r] = s = (s << 24) ^ (s >>> 8)); - for (f = 0; f < 5; f++) - (u[f] = u[f].slice(0)), (l[f] = l[f].slice(0)); - return o; - })()), - (this._tables = [ - [ - c[0][0].slice(), - c[0][1].slice(), - c[0][2].slice(), - c[0][3].slice(), - c[0][4].slice(), - ], - [ - c[1][0].slice(), - c[1][1].slice(), - c[1][2].slice(), - c[1][3].slice(), - c[1][4].slice(), - ], - ]); - var r = this._tables[0][4], - a = this._tables[1], - s = e.length, - o = 1; - if (4 !== s && 6 !== s && 8 !== s) - throw new Error("Invalid aes key size"); - var u = e.slice(0), - l = []; - for (this._key = [u, l], t = s; t < 4 * s + 28; t++) - (n = u[t - 1]), - (t % s == 0 || (8 === s && t % s == 4)) && - ((n = - (r[n >>> 24] << 24) ^ - (r[(n >> 16) & 255] << 16) ^ - (r[(n >> 8) & 255] << 8) ^ - r[255 & n]), - t % s == 0 && - ((n = (n << 8) ^ (n >>> 24) ^ (o << 24)), - (o = (o << 1) ^ (283 * (o >> 7))))), - (u[t] = u[t - s] ^ n); - for (i = 0; t; i++, t--) - (n = u[3 & i ? t : t - 4]), - (l[i] = - t <= 4 || i < 4 - ? n - : a[0][r[n >>> 24]] ^ - a[1][r[(n >> 16) & 255]] ^ - a[2][r[(n >> 8) & 255]] ^ - a[3][r[255 & n]]); - } - return ( - (e.prototype.decrypt = function (e, t, i, n, r, a) { - for ( - var s, - o, - u, - l = this._key[1], - c = e ^ l[0], - d = n ^ l[1], - h = i ^ l[2], - p = t ^ l[3], - f = l.length / 4 - 2, - m = 4, - t = this._tables[1], - g = t[0], - y = t[1], - v = t[2], - _ = t[3], - b = t[4], - T = 0; - T < f; - T++ - ) - (s = - g[c >>> 24] ^ - y[(d >> 16) & 255] ^ - v[(h >> 8) & 255] ^ - _[255 & p] ^ - l[m]), - (o = - g[d >>> 24] ^ - y[(h >> 16) & 255] ^ - v[(p >> 8) & 255] ^ - _[255 & c] ^ - l[m + 1]), - (u = - g[h >>> 24] ^ - y[(p >> 16) & 255] ^ - v[(c >> 8) & 255] ^ - _[255 & d] ^ - l[m + 2]), - (p = - g[p >>> 24] ^ - y[(c >> 16) & 255] ^ - v[(d >> 8) & 255] ^ - _[255 & h] ^ - l[m + 3]), - (m += 4), - (c = s), - (d = o), - (h = u); - for (T = 0; T < 4; T++) - (r[(3 & -T) + a] = - (b[c >>> 24] << 24) ^ - (b[(d >> 16) & 255] << 16) ^ - (b[(h >> 8) & 255] << 8) ^ - b[255 & p] ^ - l[m++]), - (s = c), - (c = d), - (d = h), - (h = p), - (p = s); - }), - e - ); - })(), - l = (function (t) { - function e() { - var e = t.call(this, a) || this; - return (e.jobs = []), (e.delay = 1), (e.timeout_ = null), e; - } - r(e, t); - var i = e.prototype; - return ( - (i.processJob_ = function () { - this.jobs.shift()(), - this.jobs.length - ? (this.timeout_ = setTimeout( - this.processJob_.bind(this), - this.delay, - )) - : (this.timeout_ = null); - }), - (i.push = function (e) { - this.jobs.push(e), - this.timeout_ || - (this.timeout_ = setTimeout( - this.processJob_.bind(this), - this.delay, - )); - }), - e - ); - })(a), - g = function (e) { - return ( - (e << 24) | - ((65280 & e) << 8) | - ((16711680 & e) >> 8) | - (e >>> 24) - ); - }, - s = (function () { - function u(e, t, i, n) { - var r = u.STEP, - a = new Int32Array(e.buffer), - s = new Uint8Array(e.byteLength), - o = 0; - for ( - this.asyncStream_ = new l(), - this.asyncStream_.push( - this.decryptChunk_(a.subarray(o, o + r), t, i, s), - ), - o = r; - o < a.length; - o += r - ) - (i = new Uint32Array([ - g(a[o - 4]), - g(a[o - 3]), - g(a[o - 2]), - g(a[o - 1]), - ])), - this.asyncStream_.push( - this.decryptChunk_(a.subarray(o, o + r), t, i, s), - ); - this.asyncStream_.push(function () { - /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */ - var e; - n( - null, - (e = s).subarray(0, e.byteLength - e[e.byteLength - 1]), - ); - }); - } - return ( - (u.prototype.decryptChunk_ = function (t, i, n, r) { - return function () { - var e = (function (e, t, i) { - for ( - var n, - r, - a, - s, - o = new Int32Array( - e.buffer, - e.byteOffset, - e.byteLength >> 2, - ), - u = new m(Array.prototype.slice.call(t)), - e = new Uint8Array(e.byteLength), - l = new Int32Array(e.buffer), - c = i[0], - d = i[1], - h = i[2], - p = i[3], - f = 0; - f < o.length; - f += 4 - ) - (n = g(o[f])), - (r = g(o[f + 1])), - (a = g(o[f + 2])), - (s = g(o[f + 3])), - u.decrypt(n, r, a, s, l, f), - (l[f] = g(l[f] ^ c)), - (l[f + 1] = g(l[f + 1] ^ d)), - (l[f + 2] = g(l[f + 2] ^ h)), - (l[f + 3] = g(l[f + 3] ^ p)), - (c = n), - (d = r), - (h = a), - (p = s); - return e; - })(t, i, n); - r.set(e, t.byteOffset); - }; - }), - i(u, null, [ - { - key: "STEP", - get: function () { - return 32e3; - }, - }, - ]), - u - ); - })(), - e = - "undefined" != typeof window - ? window - : "undefined" != typeof e - ? e - : "undefined" != typeof self - ? self - : {}, - e = e.BigInt || Number; - e("0x1"), - e("0x100"), - e("0x10000"), - e("0x1000000"), - e("0x100000000"), - e("0x10000000000"), - e("0x1000000000000"), - e("0x100000000000000"), - e("0x10000000000000000"); - function o(n) { - var r = {}; - return ( - Object.keys(n).forEach(function (e) { - var t, - i = n[e]; - (t = i), - ( - "function" === ArrayBuffer.isView - ? ArrayBuffer.isView(t) - : t && t.buffer instanceof ArrayBuffer - ) - ? (r[e] = { - bytes: i.buffer, - byteOffset: i.byteOffset, - byteLength: i.byteLength, - }) - : (r[e] = i); - }), - r - ); - } - self.onmessage = function (e) { - var i = e.data, - t = new Uint8Array( - i.encrypted.bytes, - i.encrypted.byteOffset, - i.encrypted.byteLength, - ), - n = new Uint32Array( - i.key.bytes, - i.key.byteOffset, - i.key.byteLength / 4, - ), - e = new Uint32Array( - i.iv.bytes, - i.iv.byteOffset, - i.iv.byteLength / 4, - ); - new s(t, n, e, function (e, t) { - self.postMessage(o({ source: i.source, decrypted: t }), [ - t.buffer, - ]); - }); - }; - }), - ), - ), - mc = { - AUDIO: function (s, o) { - return function () { - var e = o.segmentLoaders[s], - t = o.mediaTypes[s], - i = o.blacklistCurrentPlaylist; - Wl(e, t); - var n = t.activeTrack(), - e = t.activeGroup(), - e = ( - e.filter(function (e) { - return e.default; - })[0] || e[0] - ).id, - r = t.tracks[e]; - if (n !== r) { - for (var a in (tr.log.warn( - "Problem encountered loading the alternate audio track.Switching back to default.", - ), - t.tracks)) - t.tracks[a].enabled = t.tracks[a] === r; - t.onTrackChanged(); - } else - i({ - message: "Problem encountered loading the default audio track.", - }); - }; - }, - SUBTITLES: function (i, n) { - return function () { - var e = n.segmentLoaders[i], - t = n.mediaTypes[i]; - tr.log.warn( - "Problem encountered loading the subtitle track.Disabling subtitle track.", - ), - Wl(e, t); - e = t.activeTrack(); - e && (e.mode = "disabled"), t.onTrackChanged(); - }; - }, - }, - gc = { - AUDIO: function (e, t, i) { - var n, r, a; - t && - ((n = i.tech), - (r = i.requestOptions), - (a = i.segmentLoaders[e]), - t.on("loadedmetadata", function () { - var e = t.media(); - a.playlist(e, r), - (!n.paused() || (e.endList && "none" !== n.preload())) && - a.load(); - }), - t.on("loadedplaylist", function () { - a.playlist(t.media(), r), n.paused() || a.load(); - }), - t.on("error", mc[e](e, i))); - }, - SUBTITLES: function (e, t, i) { - var n = i.tech, - r = i.requestOptions, - a = i.segmentLoaders[e], - s = i.mediaTypes[e]; - t.on("loadedmetadata", function () { - var e = t.media(); - a.playlist(e, r), - a.track(s.activeTrack()), - (!n.paused() || (e.endList && "none" !== n.preload())) && a.load(); - }), - t.on("loadedplaylist", function () { - a.playlist(t.media(), r), n.paused() || a.load(); - }), - t.on("error", mc[e](e, i)); - }, - }, - yc = { - AUDIO: function (e, t) { - var i, - n, - r = t.vhs, - a = t.sourceType, - s = t.segmentLoaders[e], - o = t.requestOptions, - u = t.master.mediaGroups, - l = t.mediaTypes[e], - c = l.groups, - d = l.tracks, - h = l.logger_, - p = t.masterPlaylistLoader, - f = au(p.master); - for (i in ((u[e] && 0 !== Object.keys(u[e]).length) || - ((u[e] = { main: { default: { default: !0 } } }), - f && (u[e].main.default.playlists = p.master.playlists)), - u[e])) - for (var m in (c[i] || (c[i] = []), u[e][i])) { - var g = u[e][i][m], - y = void 0, - y = f - ? (h( - "AUDIO group '" + - i + - "' label '" + - m + - "' is a master playlist", - ), - (g.isMasterPlaylist = !0), - null) - : "vhs-json" === a && g.playlists - ? new _l(g.playlists[0], r, o) - : g.resolvedUri - ? new _l(g.resolvedUri, r, o) - : g.playlists && "dash" === a - ? new wl(g.playlists[0], r, o, p) - : null, - g = tr.mergeOptions({ id: m, playlistLoader: y }, g); - gc[e](e, g.playlistLoader, t), - c[i].push(g), - "undefined" == typeof d[m] && - ((g = new tr.AudioTrack({ - id: m, - kind: - ((n = void 0), - (n = (y = g).default ? "main" : "alternative"), - (n = - y.characteristics && - 0 <= - y.characteristics.indexOf( - "public.accessibility.describes-video", - ) - ? "main-desc" - : n)), - enabled: !1, - language: g.language, - default: g.default, - label: m, - })), - (d[m] = g)); - } - s.on("error", mc[e](e, t)); - }, - SUBTITLES: function (e, t) { - var i, - n = t.tech, - r = t.vhs, - a = t.sourceType, - s = t.segmentLoaders[e], - o = t.requestOptions, - u = t.master.mediaGroups, - l = t.mediaTypes[e], - c = l.groups, - d = l.tracks, - h = t.masterPlaylistLoader; - for (i in u[e]) - for (var p in (c[i] || (c[i] = []), u[e][i])) - if (!u[e][i][p].forced) { - var f = u[e][i][p], - m = void 0; - if ("hls" === a) m = new _l(f.resolvedUri, r, o); - else if ("dash" === a) { - if ( - !f.playlists.filter(function (e) { - return e.excludeUntil !== 1 / 0; - }).length - ) - return; - m = new wl(f.playlists[0], r, o, h); - } else - "vhs-json" === a && - (m = new _l( - f.playlists ? f.playlists[0] : f.resolvedUri, - r, - o, - )); - (f = tr.mergeOptions({ id: p, playlistLoader: m }, f)), - gc[e](e, f.playlistLoader, t), - c[i].push(f), - "undefined" == typeof d[p] && - ((f = n.addRemoteTextTrack( - { - id: p, - kind: "subtitles", - default: f.default && f.autoselect, - language: f.language, - label: p, - }, - !1, - ).track), - (d[p] = f)); - } - s.on("error", mc[e](e, t)); - }, - "CLOSED-CAPTIONS": function (e, t) { - var i, - n = t.tech, - r = t.master.mediaGroups, - t = t.mediaTypes[e], - a = t.groups, - s = t.tracks; - for (i in r[e]) - for (var o in (a[i] || (a[i] = []), r[e][i])) { - var u, - l, - c = r[e][i][o]; - /^(?:CC|SERVICE)/.test(c.instreamId) && - (void 0 === - (l = (u = - (n.options_.vhs && n.options_.vhs.captionServices) || {})[ - (l = { - label: o, - language: c.language, - instreamId: c.instreamId, - default: c.default && c.autoselect, - }).instreamId - ] - ? tr.mergeOptions(l, u[l.instreamId]) - : l).default && delete l.default, - a[i].push(tr.mergeOptions({ id: o }, c)), - "undefined" == typeof s[o] && - ((l = n.addRemoteTextTrack( - { - id: l.instreamId, - kind: "captions", - default: l.default, - language: l.language, - label: l.label, - }, - !1, - ).track), - (s[o] = l))); - } - }, - }, - vc = { - AUDIO: function (i, n) { - return function () { - var e, - t = n.mediaTypes[i].tracks; - for (e in t) if (t[e].enabled) return t[e]; - return null; - }; - }, - SUBTITLES: function (i, n) { - return function () { - var e, - t = n.mediaTypes[i].tracks; - for (e in t) - if ("showing" === t[e].mode || "hidden" === t[e].mode) return t[e]; - return null; - }; - }, - }, - _c = [ - "mediaRequests", - "mediaRequestsAborted", - "mediaRequestsTimedout", - "mediaRequestsErrored", - "mediaTransferDuration", - "mediaBytesTransferred", - "mediaAppends", - ], - bc = (function (v) { - function e(e) { - var t = v.call(this) || this, - i = e.src, - n = e.handleManifestRedirects, - r = e.withCredentials, - a = e.tech, - s = e.bandwidth, - o = e.externVhs, - u = e.useCueTags, - l = e.blacklistDuration, - c = e.enableLowInitialPlaylist, - d = e.sourceType, - h = e.cacheEncryptionKeys, - p = e.experimentalBufferBasedABR, - f = e.experimentalLeastPixelDiffSelector, - m = e.captionServices; - if (!i) - throw new Error( - "A non-empty playlist URL or JSON manifest string is required", - ); - var g, - y = e.maxPlaylistRetries; - (null !== y && "undefined" != typeof y) || (y = 1 / 0), - (Ql = o), - (t.experimentalBufferBasedABR = Boolean(p)), - (t.experimentalLeastPixelDiffSelector = Boolean(f)), - (t.withCredentials = r), - (t.tech_ = a), - (t.vhs_ = a.vhs), - (t.sourceType_ = d), - (t.useCueTags_ = u), - (t.blacklistDuration = l), - (t.maxPlaylistRetries = y), - (t.enableLowInitialPlaylist = c), - t.useCueTags_ && - ((t.cueTagsTrack_ = t.tech_.addTextTrack("metadata", "ad-cues")), - (t.cueTagsTrack_.inBandMetadataTrackDispatchType = "")), - (t.requestOptions_ = { - withCredentials: r, - handleManifestRedirects: n, - maxPlaylistRetries: y, - timeout: null, - }), - t.on("error", t.pauseLoading), - (t.mediaTypes_ = - ((g = {}), - ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function (e) { - g[e] = { - groups: {}, - tracks: {}, - activePlaylistLoader: null, - activeGroup: Rl, - activeTrack: Rl, - getActiveGroup: Rl, - onGroupChanged: Rl, - onTrackChanged: Rl, - lastTrack_: null, - logger_: Ro("MediaGroups[" + e + "]"), - }; - }), - g)), - (t.mediaSource = new window.MediaSource()), - (t.handleDurationChange_ = t.handleDurationChange_.bind(ft(t))), - (t.handleSourceOpen_ = t.handleSourceOpen_.bind(ft(t))), - (t.handleSourceEnded_ = t.handleSourceEnded_.bind(ft(t))), - t.mediaSource.addEventListener( - "durationchange", - t.handleDurationChange_, - ), - t.mediaSource.addEventListener("sourceopen", t.handleSourceOpen_), - t.mediaSource.addEventListener("sourceended", t.handleSourceEnded_), - (t.seekable_ = tr.createTimeRanges()), - (t.hasPlayed_ = !1), - (t.syncController_ = new hc(e)), - (t.segmentMetadataTrack_ = a.addRemoteTextTrack( - { kind: "metadata", label: "segment-metadata" }, - !1, - ).track), - (t.decrypter_ = new fc()), - (t.sourceUpdater_ = new uc(t.mediaSource)), - (t.inbandTextTracks_ = {}), - (t.timelineChangeController_ = new pc()); - h = { - vhs: t.vhs_, - parse708captions: e.parse708captions, - useDtsForTimestampOffset: e.useDtsForTimestampOffset, - captionServices: m, - mediaSource: t.mediaSource, - currentTime: t.tech_.currentTime.bind(t.tech_), - seekable: function () { - return t.seekable(); - }, - seeking: function () { - return t.tech_.seeking(); - }, - duration: function () { - return t.duration(); - }, - hasPlayed: function () { - return t.hasPlayed_; - }, - goalBufferLength: function () { - return t.goalBufferLength(); - }, - bandwidth: s, - syncController: t.syncController_, - decrypter: t.decrypter_, - sourceType: t.sourceType_, - inbandTextTracks: t.inbandTextTracks_, - cacheEncryptionKeys: h, - sourceUpdater: t.sourceUpdater_, - timelineChangeController: t.timelineChangeController_, - experimentalExactManifestTimings: e.experimentalExactManifestTimings, - }; - (t.masterPlaylistLoader_ = new ("dash" === t.sourceType_ ? wl : _l)( - i, - t.vhs_, - t.requestOptions_, - )), - t.setupMasterPlaylistLoaderListeners_(), - (t.mainSegmentLoader_ = new Ml( - tr.mergeOptions(h, { - segmentMetadataTrack: t.segmentMetadataTrack_, - loaderType: "main", - }), - e, - )), - (t.audioSegmentLoader_ = new Ml( - tr.mergeOptions(h, { loaderType: "audio" }), - e, - )), - (t.subtitleSegmentLoader_ = new cc( - tr.mergeOptions(h, { - loaderType: "vtt", - featuresNativeTextTracks: t.tech_.featuresNativeTextTracks, - }), - e, - )), - t.setupSegmentLoaderListeners_(), - t.experimentalBufferBasedABR && - (t.masterPlaylistLoader_.one("loadedplaylist", function () { - return t.startABRTimer_(); - }), - t.tech_.on("pause", function () { - return t.stopABRTimer_(); - }), - t.tech_.on("play", function () { - return t.startABRTimer_(); - })), - _c.forEach(function (e) { - t[e + "_"] = function (e) { - return this.audioSegmentLoader_[e] + this.mainSegmentLoader_[e]; - }.bind(ft(t), e); - }), - (t.logger_ = Ro("MPC")), - (t.triggeredFmp4Usage = !1), - "none" === t.tech_.preload() - ? ((t.loadOnPlay_ = function () { - (t.loadOnPlay_ = null), t.masterPlaylistLoader_.load(); - }), - t.tech_.one("play", t.loadOnPlay_)) - : t.masterPlaylistLoader_.load(), - (t.timeToLoadedData__ = -1), - (t.mainAppendsToLoadedData__ = -1), - (t.audioAppendsToLoadedData__ = -1); - e = "none" === t.tech_.preload() ? "play" : "loadstart"; - return ( - t.tech_.one(e, function () { - var e = Date.now(); - t.tech_.one("loadeddata", function () { - (t.timeToLoadedData__ = Date.now() - e), - (t.mainAppendsToLoadedData__ = - t.mainSegmentLoader_.mediaAppends), - (t.audioAppendsToLoadedData__ = - t.audioSegmentLoader_.mediaAppends); - }); - }), - t - ); - } - mt(e, v); - var t = e.prototype; - return ( - (t.mainAppendsToLoadedData_ = function () { - return this.mainAppendsToLoadedData__; - }), - (t.audioAppendsToLoadedData_ = function () { - return this.audioAppendsToLoadedData__; - }), - (t.appendsToLoadedData_ = function () { - var e = this.mainAppendsToLoadedData_(), - t = this.audioAppendsToLoadedData_(); - return -1 === e || -1 === t ? -1 : e + t; - }), - (t.timeToLoadedData_ = function () { - return this.timeToLoadedData__; - }), - (t.checkABR_ = function () { - var e = this.selectPlaylist(); - e && this.shouldSwitchToMedia_(e) && this.switchMedia_(e, "abr"); - }), - (t.switchMedia_ = function (e, t, i) { - var n = this.media(), - r = n && (n.id || n.uri), - n = e.id || e.uri; - r && - r !== n && - (this.logger_("switch media " + r + " -> " + n + " from " + t), - this.tech_.trigger({ - type: "usage", - name: "vhs-rendition-change-" + t, - })), - this.masterPlaylistLoader_.media(e, i); - }), - (t.startABRTimer_ = function () { - var e = this; - this.stopABRTimer_(), - (this.abrTimer_ = window.setInterval(function () { - return e.checkABR_(); - }, 250)); - }), - (t.stopABRTimer_ = function () { - (this.tech_.scrubbing && this.tech_.scrubbing()) || - (window.clearInterval(this.abrTimer_), (this.abrTimer_ = null)); - }), - (t.getAudioTrackPlaylists_ = function () { - var e = this.master(), - t = (e && e.playlists) || []; - if (!e || !e.mediaGroups || !e.mediaGroups.AUDIO) return t; - var i, - n = e.mediaGroups.AUDIO, - r = Object.keys(n); - if (Object.keys(this.mediaTypes_.AUDIO.groups).length) - i = this.mediaTypes_.AUDIO.activeTrack(); - else { - var a, - s = n.main || (r.length && n[r[0]]); - for (a in s) - if (s[a].default) { - i = { label: a }; - break; - } - } - if (!i) return t; - var o, - u = []; - for (o in n) - if (n[o][i.label]) { - var l = n[o][i.label]; - if (l.playlists && l.playlists.length) - u.push.apply(u, l.playlists); - else if (l.uri) u.push(l); - else if (e.playlists.length) - for (var c = 0; c < e.playlists.length; c++) { - var d = e.playlists[c]; - d.attributes && - d.attributes.AUDIO && - d.attributes.AUDIO === o && - u.push(d); - } - } - return u.length ? u : t; - }), - (t.setupMasterPlaylistLoaderListeners_ = function () { - var i = this; - this.masterPlaylistLoader_.on("loadedmetadata", function () { - var e = i.masterPlaylistLoader_.media(), - t = 1.5 * e.targetDuration * 1e3; - iu(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) - ? (i.requestOptions_.timeout = 0) - : (i.requestOptions_.timeout = t), - e.endList && - "none" !== i.tech_.preload() && - (i.mainSegmentLoader_.playlist(e, i.requestOptions_), - i.mainSegmentLoader_.load()), - Xl({ - sourceType: i.sourceType_, - segmentLoaders: { - AUDIO: i.audioSegmentLoader_, - SUBTITLES: i.subtitleSegmentLoader_, - main: i.mainSegmentLoader_, - }, - tech: i.tech_, - requestOptions: i.requestOptions_, - masterPlaylistLoader: i.masterPlaylistLoader_, - vhs: i.vhs_, - master: i.master(), - mediaTypes: i.mediaTypes_, - blacklistCurrentPlaylist: i.blacklistCurrentPlaylist.bind(i), - }), - i.triggerPresenceUsage_(i.master(), e), - i.setupFirstPlay(), - !i.mediaTypes_.AUDIO.activePlaylistLoader || - i.mediaTypes_.AUDIO.activePlaylistLoader.media() - ? i.trigger("selectedinitialmedia") - : i.mediaTypes_.AUDIO.activePlaylistLoader.one( - "loadedmetadata", - function () { - i.trigger("selectedinitialmedia"); - }, - ); - }), - this.masterPlaylistLoader_.on("loadedplaylist", function () { - i.loadOnPlay_ && i.tech_.off("play", i.loadOnPlay_); - var e, - t = i.masterPlaylistLoader_.media(); - if (!t) { - if ( - (i.excludeUnsupportedVariants_(), - !(e = - (e = i.enableLowInitialPlaylist - ? i.selectInitialPlaylist() - : e) || i.selectPlaylist()) || !i.shouldSwitchToMedia_(e)) - ) - return; - if ( - ((i.initialMedia_ = e), - i.switchMedia_(i.initialMedia_, "initial"), - !("vhs-json" === i.sourceType_ && i.initialMedia_.segments)) - ) - return; - t = i.initialMedia_; - } - i.handleUpdatedMediaPlaylist(t); - }), - this.masterPlaylistLoader_.on("error", function () { - i.blacklistCurrentPlaylist(i.masterPlaylistLoader_.error); - }), - this.masterPlaylistLoader_.on("mediachanging", function () { - i.mainSegmentLoader_.abort(), i.mainSegmentLoader_.pause(); - }), - this.masterPlaylistLoader_.on("mediachange", function () { - var e = i.masterPlaylistLoader_.media(), - t = 1.5 * e.targetDuration * 1e3; - iu( - i.masterPlaylistLoader_.master, - i.masterPlaylistLoader_.media(), - ) - ? (i.requestOptions_.timeout = 0) - : (i.requestOptions_.timeout = t), - i.mainSegmentLoader_.playlist(e, i.requestOptions_), - i.mainSegmentLoader_.load(), - i.tech_.trigger({ type: "mediachange", bubbles: !0 }); - }), - this.masterPlaylistLoader_.on("playlistunchanged", function () { - var e = i.masterPlaylistLoader_.media(); - "playlist-unchanged" !== e.lastExcludeReason_ && - i.stuckAtPlaylistEnd_(e) && - (i.blacklistCurrentPlaylist({ - message: "Playlist no longer updating.", - reason: "playlist-unchanged", - }), - i.tech_.trigger("playliststuck")); - }), - this.masterPlaylistLoader_.on("renditiondisabled", function () { - i.tech_.trigger({ - type: "usage", - name: "vhs-rendition-disabled", - }), - i.tech_.trigger({ - type: "usage", - name: "hls-rendition-disabled", - }); - }), - this.masterPlaylistLoader_.on("renditionenabled", function () { - i.tech_.trigger({ type: "usage", name: "vhs-rendition-enabled" }), - i.tech_.trigger({ - type: "usage", - name: "hls-rendition-enabled", - }); - }); - }), - (t.handleUpdatedMediaPlaylist = function (e) { - this.useCueTags_ && this.updateAdCues_(e), - this.mainSegmentLoader_.playlist(e, this.requestOptions_), - this.updateDuration(!e.endList), - this.tech_.paused() || - (this.mainSegmentLoader_.load(), - this.audioSegmentLoader_ && this.audioSegmentLoader_.load()); - }), - (t.triggerPresenceUsage_ = function (e, t) { - var i, - n = e.mediaGroups || {}, - r = !0, - e = Object.keys(n.AUDIO); - for (i in n.AUDIO) - for (var a in n.AUDIO[i]) n.AUDIO[i][a].uri || (r = !1); - r && - (this.tech_.trigger({ type: "usage", name: "vhs-demuxed" }), - this.tech_.trigger({ type: "usage", name: "hls-demuxed" })), - Object.keys(n.SUBTITLES).length && - (this.tech_.trigger({ type: "usage", name: "vhs-webvtt" }), - this.tech_.trigger({ type: "usage", name: "hls-webvtt" })), - Ql.Playlist.isAes(t) && - (this.tech_.trigger({ type: "usage", name: "vhs-aes" }), - this.tech_.trigger({ type: "usage", name: "hls-aes" })), - e.length && - 1 < Object.keys(n.AUDIO[e[0]]).length && - (this.tech_.trigger({ - type: "usage", - name: "vhs-alternate-audio", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-alternate-audio", - })), - this.useCueTags_ && - (this.tech_.trigger({ - type: "usage", - name: "vhs-playlist-cue-tags", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-playlist-cue-tags", - })); - }), - (t.shouldSwitchToMedia_ = function (e) { - var t = - this.masterPlaylistLoader_.media() || - this.masterPlaylistLoader_.pendingMedia_, - i = this.tech_.currentTime(), - n = this.bufferLowWaterLine(), - r = this.bufferHighWaterLine(); - return (function (e) { - var t = e.currentPlaylist, - i = e.buffered, - n = e.currentTime, - r = e.nextPlaylist, - a = e.bufferLowWaterLine, - s = e.bufferHighWaterLine, - o = e.duration, - u = e.experimentalBufferBasedABR, - l = e.log; - if (!r) - return ( - tr.log.warn( - "We received no playlist to switch to. Please check your stream.", - ), - !1 - ); - var c = - "allowing switch " + ((t && t.id) || "null") + " -> " + r.id; - if (!t) return l(c + " as current playlist is not set"), !0; - if (r.id === t.id) return !1; - e = Boolean(Uo(i, n).length); - if (!t.endList) - return e || "number" != typeof t.partTargetDuration - ? (l(c + " as current playlist is live"), !0) - : (l( - "not " + - c + - " as current playlist is live llhls, but currentTime isn't in buffered.", - ), - !1); - (i = qo(i, n)), - (n = u - ? El.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE - : El.MAX_BUFFER_LOW_WATER_LINE); - if (o < n) - return ( - l( - c + - " as duration < max low water line (" + - o + - " < " + - n + - ")", - ), - !0 - ); - (n = r.attributes.BANDWIDTH), (r = t.attributes.BANDWIDTH); - if (n < r && (!u || i < s)) { - t = - c + - " as next bandwidth < current bandwidth (" + - n + - " < " + - r + - ")"; - return ( - u && - (t += - " and forwardBuffer < bufferHighWaterLine (" + - i + - " < " + - s + - ")"), - l(t), - !0 - ); - } - if ((!u || r < n) && a <= i) { - a = - c + - " as forwardBuffer >= bufferLowWaterLine (" + - i + - " >= " + - a + - ")"; - return ( - u && - (a += - " and next bandwidth > current bandwidth (" + - n + - " > " + - r + - ")"), - l(a), - !0 - ); - } - return l("not " + c + " as no switching criteria met"), !1; - })({ - buffered: this.tech_.buffered(), - currentTime: i, - currentPlaylist: t, - nextPlaylist: e, - bufferLowWaterLine: n, - bufferHighWaterLine: r, - duration: this.duration(), - experimentalBufferBasedABR: this.experimentalBufferBasedABR, - log: this.logger_, - }); - }), - (t.setupSegmentLoaderListeners_ = function () { - var t = this; - this.experimentalBufferBasedABR || - (this.mainSegmentLoader_.on("bandwidthupdate", function () { - var e = t.selectPlaylist(); - t.shouldSwitchToMedia_(e) && t.switchMedia_(e, "bandwidthupdate"), - t.tech_.trigger("bandwidthupdate"); - }), - this.mainSegmentLoader_.on("progress", function () { - t.trigger("progress"); - })), - this.mainSegmentLoader_.on("error", function () { - t.blacklistCurrentPlaylist(t.mainSegmentLoader_.error()); - }), - this.mainSegmentLoader_.on("appenderror", function () { - (t.error = t.mainSegmentLoader_.error_), t.trigger("error"); - }), - this.mainSegmentLoader_.on("syncinfoupdate", function () { - t.onSyncInfoUpdate_(); - }), - this.mainSegmentLoader_.on("timestampoffset", function () { - t.tech_.trigger({ type: "usage", name: "vhs-timestamp-offset" }), - t.tech_.trigger({ - type: "usage", - name: "hls-timestamp-offset", - }); - }), - this.audioSegmentLoader_.on("syncinfoupdate", function () { - t.onSyncInfoUpdate_(); - }), - this.audioSegmentLoader_.on("appenderror", function () { - (t.error = t.audioSegmentLoader_.error_), t.trigger("error"); - }), - this.mainSegmentLoader_.on("ended", function () { - t.logger_("main segment loader ended"), t.onEndOfStream(); - }), - this.mainSegmentLoader_.on("earlyabort", function (e) { - t.experimentalBufferBasedABR || - (t.delegateLoaders_("all", ["abort"]), - t.blacklistCurrentPlaylist( - { - message: - "Aborted early because there isn't enough bandwidth to complete the request without rebuffering.", - }, - 120, - )); - }); - function e() { - if (!t.sourceUpdater_.hasCreatedSourceBuffers()) - return t.tryToCreateSourceBuffers_(); - var e = t.getCodecsOrExclude_(); - e && t.sourceUpdater_.addOrChangeSourceBuffers(e); - } - this.mainSegmentLoader_.on("trackinfo", e), - this.audioSegmentLoader_.on("trackinfo", e), - this.mainSegmentLoader_.on("fmp4", function () { - t.triggeredFmp4Usage || - (t.tech_.trigger({ type: "usage", name: "vhs-fmp4" }), - t.tech_.trigger({ type: "usage", name: "hls-fmp4" }), - (t.triggeredFmp4Usage = !0)); - }), - this.audioSegmentLoader_.on("fmp4", function () { - t.triggeredFmp4Usage || - (t.tech_.trigger({ type: "usage", name: "vhs-fmp4" }), - t.tech_.trigger({ type: "usage", name: "hls-fmp4" }), - (t.triggeredFmp4Usage = !0)); - }), - this.audioSegmentLoader_.on("ended", function () { - t.logger_("audioSegmentLoader ended"), t.onEndOfStream(); - }); - }), - (t.mediaSecondsLoaded_ = function () { - return Math.max( - this.audioSegmentLoader_.mediaSecondsLoaded + - this.mainSegmentLoader_.mediaSecondsLoaded, - ); - }), - (t.load = function () { - this.mainSegmentLoader_.load(), - this.mediaTypes_.AUDIO.activePlaylistLoader && - this.audioSegmentLoader_.load(), - this.mediaTypes_.SUBTITLES.activePlaylistLoader && - this.subtitleSegmentLoader_.load(); - }), - (t.smoothQualityChange_ = function (e) { - void 0 === e && (e = this.selectPlaylist()), - this.fastQualityChange_(e); - }), - (t.fastQualityChange_ = function (e) { - var t = this; - (e = void 0 === e ? this.selectPlaylist() : e) !== - this.masterPlaylistLoader_.media() - ? (this.switchMedia_(e, "fast-quality"), - this.mainSegmentLoader_.resetEverything(function () { - tr.browser.IE_VERSION || tr.browser.IS_EDGE - ? t.tech_.setCurrentTime(t.tech_.currentTime() + 0.04) - : t.tech_.setCurrentTime(t.tech_.currentTime()); - })) - : this.logger_( - "skipping fastQualityChange because new media is same as old", - ); - }), - (t.play = function () { - if (!this.setupFirstPlay()) { - this.tech_.ended() && this.tech_.setCurrentTime(0), - this.hasPlayed_ && this.load(); - var e = this.tech_.seekable(); - return this.tech_.duration() === 1 / 0 && - this.tech_.currentTime() < e.start(0) - ? this.tech_.setCurrentTime(e.end(e.length - 1)) - : void 0; - } - }), - (t.setupFirstPlay = function () { - var e = this, - t = this.masterPlaylistLoader_.media(); - if (!t || this.tech_.paused() || this.hasPlayed_) return !1; - if (!t.endList) { - var i = this.seekable(); - if (!i.length) return !1; - if (tr.browser.IE_VERSION && 0 === this.tech_.readyState()) - return ( - this.tech_.one("loadedmetadata", function () { - e.trigger("firstplay"), - e.tech_.setCurrentTime(i.end(0)), - (e.hasPlayed_ = !0); - }), - !1 - ); - this.trigger("firstplay"), this.tech_.setCurrentTime(i.end(0)); - } - return (this.hasPlayed_ = !0), this.load(), !0; - }), - (t.handleSourceOpen_ = function () { - var e; - this.tryToCreateSourceBuffers_(), - !this.tech_.autoplay() || - ("undefined" != typeof (e = this.tech_.play()) && - "function" == typeof e.then && - e.then(null, function (e) {})), - this.trigger("sourceopen"); - }), - (t.handleSourceEnded_ = function () { - var e, t; - !this.inbandTextTracks_.metadataTrack_ || - ((e = this.inbandTextTracks_.metadataTrack_.cues) && - e.length && - ((t = this.duration()), - (e[e.length - 1].endTime = - isNaN(t) || Math.abs(t) === 1 / 0 ? Number.MAX_VALUE : t))); - }), - (t.handleDurationChange_ = function () { - this.tech_.trigger("durationchange"); - }), - (t.onEndOfStream = function () { - var e, - t = this.mainSegmentLoader_.ended_; - (t = this.mediaTypes_.AUDIO.activePlaylistLoader - ? (((e = this.mainSegmentLoader_.getCurrentMediaInfo_()) && - !e.hasVideo) || - t) && - this.audioSegmentLoader_.ended_ - : t) && (this.stopABRTimer_(), this.sourceUpdater_.endOfStream()); - }), - (t.stuckAtPlaylistEnd_ = function (e) { - if (!this.seekable().length) return !1; - var t = this.syncController_.getExpiredTime(e, this.duration()); - if (null === t) return !1; - var i = Ql.Playlist.playlistEnd(e, t), - e = this.tech_.currentTime(), - t = this.tech_.buffered(); - if (!t.length) return i - e <= 0.1; - t = t.end(t.length - 1); - return t - e <= 0.1 && i - t <= 0.1; - }), - (t.blacklistCurrentPlaylist = function (e, t) { - var i = - (e = void 0 === e ? {} : e).playlist || - this.masterPlaylistLoader_.media(); - if (((t = t || e.blacklistDuration || this.blacklistDuration), !i)) - return ( - (this.error = e), - void ("open" !== this.mediaSource.readyState - ? this.trigger("error") - : this.sourceUpdater_.endOfStream("network")) - ); - i.playlistErrors_++; - var n, - r = this.masterPlaylistLoader_.master.playlists, - a = r.filter(eu), - s = 1 === a.length && a[0] === i; - if (1 === r.length && t !== 1 / 0) - return ( - tr.log.warn( - "Problem encountered with playlist " + - i.id + - ". Trying again since it is the only playlist.", - ), - this.tech_.trigger("retryplaylist"), - this.masterPlaylistLoader_.load(s) - ); - s && - ((n = !1), - r.forEach(function (e) { - var t; - e === i || - ("undefined" != typeof (t = e.excludeUntil) && - t !== 1 / 0 && - ((n = !0), delete e.excludeUntil)); - }), - n && - (tr.log.warn( - "Removing other playlists from the exclusion list because the last rendition is about to be excluded.", - ), - this.tech_.trigger("retryplaylist"))), - (a = - i.playlistErrors_ > this.maxPlaylistRetries - ? 1 / 0 - : Date.now() + 1e3 * t), - (i.excludeUntil = a), - e.reason && (i.lastExcludeReason_ = e.reason), - this.tech_.trigger("blacklistplaylist"), - this.tech_.trigger({ - type: "usage", - name: "vhs-rendition-blacklisted", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-rendition-blacklisted", - }); - r = this.selectPlaylist(); - if (!r) - return ( - (this.error = - "Playback cannot continue. No available working or supported playlists."), - void this.trigger("error") - ); - (t = e.internal ? this.logger_ : tr.log.warn), - (a = e.message ? " " + e.message : ""); - t( - (e.internal ? "Internal problem" : "Problem") + - " encountered with playlist " + - i.id + - "." + - a + - " Switching to playlist " + - r.id + - ".", - ), - r.attributes.AUDIO !== i.attributes.AUDIO && - this.delegateLoaders_("audio", ["abort", "pause"]), - r.attributes.SUBTITLES !== i.attributes.SUBTITLES && - this.delegateLoaders_("subtitle", ["abort", "pause"]), - this.delegateLoaders_("main", ["abort", "pause"]); - (a = (r.targetDuration / 2) * 1e3 || 5e3), - (a = - "number" == typeof r.lastRequest && - Date.now() - r.lastRequest <= a); - return this.switchMedia_(r, "exclude", s || a); - }), - (t.pauseLoading = function () { - this.delegateLoaders_("all", ["abort", "pause"]), - this.stopABRTimer_(); - }), - (t.delegateLoaders_ = function (i, e) { - var n = this, - r = [], - t = "all" === i; - (!t && "main" !== i) || r.push(this.masterPlaylistLoader_); - var a = []; - (!t && "audio" !== i) || a.push("AUDIO"), - (!t && "subtitle" !== i) || - (a.push("CLOSED-CAPTIONS"), a.push("SUBTITLES")), - a.forEach(function (e) { - e = n.mediaTypes_[e] && n.mediaTypes_[e].activePlaylistLoader; - e && r.push(e); - }), - ["main", "audio", "subtitle"].forEach(function (e) { - var t = n[e + "SegmentLoader_"]; - !t || (i !== e && "all" !== i) || r.push(t); - }), - r.forEach(function (t) { - return e.forEach(function (e) { - "function" == typeof t[e] && t[e](); - }); - }); - }), - (t.setCurrentTime = function (e) { - var t = Uo(this.tech_.buffered(), e); - return this.masterPlaylistLoader_ && - this.masterPlaylistLoader_.media() && - this.masterPlaylistLoader_.media().segments - ? t && t.length - ? e - : (this.mainSegmentLoader_.resetEverything(), - this.mainSegmentLoader_.abort(), - this.mediaTypes_.AUDIO.activePlaylistLoader && - (this.audioSegmentLoader_.resetEverything(), - this.audioSegmentLoader_.abort()), - this.mediaTypes_.SUBTITLES.activePlaylistLoader && - (this.subtitleSegmentLoader_.resetEverything(), - this.subtitleSegmentLoader_.abort()), - void this.load()) - : 0; - }), - (t.duration = function () { - if (!this.masterPlaylistLoader_) return 0; - var e = this.masterPlaylistLoader_.media(); - return e - ? e.endList - ? this.mediaSource - ? this.mediaSource.duration - : Ql.Playlist.duration(e) - : 1 / 0 - : 0; - }), - (t.seekable = function () { - return this.seekable_; - }), - (t.onSyncInfoUpdate_ = function () { - var e; - if (this.masterPlaylistLoader_) { - var t = this.masterPlaylistLoader_.media(); - if (t) { - var i = this.syncController_.getExpiredTime(t, this.duration()); - if (null !== i) { - var n, - r, - a = this.masterPlaylistLoader_.master, - s = Ql.Playlist.seekable( - t, - i, - Ql.Playlist.liveEdgeDelay(a, t), - ); - if (0 !== s.length) { - if (this.mediaTypes_.AUDIO.activePlaylistLoader) { - if ( - ((t = - this.mediaTypes_.AUDIO.activePlaylistLoader.media()), - null === - (i = this.syncController_.getExpiredTime( - t, - this.duration(), - ))) - ) - return; - if ( - 0 === - (e = Ql.Playlist.seekable( - t, - i, - Ql.Playlist.liveEdgeDelay(a, t), - )).length - ) - return; - } - this.seekable_ && - this.seekable_.length && - ((n = this.seekable_.end(0)), - (r = this.seekable_.start(0))), - !e || e.start(0) > s.end(0) || s.start(0) > e.end(0) - ? (this.seekable_ = s) - : (this.seekable_ = tr.createTimeRanges([ - [ - (e.start(0) > s.start(0) ? e : s).start(0), - (e.end(0) < s.end(0) ? e : s).end(0), - ], - ])), - (this.seekable_ && - this.seekable_.length && - this.seekable_.end(0) === n && - this.seekable_.start(0) === r) || - (this.logger_( - "seekable updated [" + Fo(this.seekable_) + "]", - ), - this.tech_.trigger("seekablechanged")); - } - } - } - } - }), - (t.updateDuration = function (e) { - if ( - (this.updateDuration_ && - (this.mediaSource.removeEventListener( - "sourceopen", - this.updateDuration_, - ), - (this.updateDuration_ = null)), - "open" !== this.mediaSource.readyState) - ) - return ( - (this.updateDuration_ = this.updateDuration.bind(this, e)), - void this.mediaSource.addEventListener( - "sourceopen", - this.updateDuration_, - ) - ); - if (e) { - var t = this.seekable(); - return t.length - ? void ( - (isNaN(this.mediaSource.duration) || - this.mediaSource.duration < t.end(t.length - 1)) && - this.sourceUpdater_.setDuration(t.end(t.length - 1)) - ) - : void 0; - } - (e = this.tech_.buffered()), - (t = Ql.Playlist.duration(this.masterPlaylistLoader_.media())); - 0 < e.length && (t = Math.max(t, e.end(e.length - 1))), - this.mediaSource.duration !== t && - this.sourceUpdater_.setDuration(t); - }), - (t.dispose = function () { - var n = this; - this.trigger("dispose"), - this.decrypter_.terminate(), - this.masterPlaylistLoader_.dispose(), - this.mainSegmentLoader_.dispose(), - this.loadOnPlay_ && this.tech_.off("play", this.loadOnPlay_), - ["AUDIO", "SUBTITLES"].forEach(function (e) { - var t, - i = n.mediaTypes_[e].groups; - for (t in i) - i[t].forEach(function (e) { - e.playlistLoader && e.playlistLoader.dispose(); - }); - }), - this.audioSegmentLoader_.dispose(), - this.subtitleSegmentLoader_.dispose(), - this.sourceUpdater_.dispose(), - this.timelineChangeController_.dispose(), - this.stopABRTimer_(), - this.updateDuration_ && - this.mediaSource.removeEventListener( - "sourceopen", - this.updateDuration_, - ), - this.mediaSource.removeEventListener( - "durationchange", - this.handleDurationChange_, - ), - this.mediaSource.removeEventListener( - "sourceopen", - this.handleSourceOpen_, - ), - this.mediaSource.removeEventListener( - "sourceended", - this.handleSourceEnded_, - ), - this.off(); - }), - (t.master = function () { - return this.masterPlaylistLoader_.master; - }), - (t.media = function () { - return this.masterPlaylistLoader_.media() || this.initialMedia_; - }), - (t.areMediaTypesKnown_ = function () { - var e = !!this.mediaTypes_.AUDIO.activePlaylistLoader, - t = !!this.mainSegmentLoader_.getCurrentMediaInfo_(), - e = !e || !!this.audioSegmentLoader_.getCurrentMediaInfo_(); - return t && e; - }), - (t.getCodecsOrExclude_ = function () { - var n = this, - r = { - main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {}, - audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {}, - }; - r.video = r.main; - var e = $u(this.master(), this.media()), - a = {}, - t = !!this.mediaTypes_.AUDIO.activePlaylistLoader; - if ( - (r.main.hasVideo && - (a.video = e.video || r.main.videoCodec || "avc1.4d400d"), - r.main.isMuxed && - (a.video += "," + (e.audio || r.main.audioCodec || Lr)), - ((r.main.hasAudio && !r.main.isMuxed) || r.audio.hasAudio || t) && - ((a.audio = - e.audio || r.main.audioCodec || r.audio.audioCodec || Lr), - (r.audio.isFmp4 = ( - r.main.hasAudio && !r.main.isMuxed ? r.main : r.audio - ).isFmp4)), - a.audio || a.video) - ) { - var s, - i, - o = {}; - if ( - (["video", "audio"].forEach(function (e) { - var t, i; - a.hasOwnProperty(e) && - ((t = r[e].isFmp4), (i = a[e]), !(t ? gr : yr)(i)) && - ((i = r[e].isFmp4 ? "browser" : "muxer"), - (o[i] = o[i] || []), - o[i].push(a[e]), - "audio" === e && (s = i)); - }), - t && - s && - this.media().attributes.AUDIO && - ((i = this.media().attributes.AUDIO), - this.master().playlists.forEach(function (e) { - (e.attributes && e.attributes.AUDIO) === i && - e !== n.media() && - (e.excludeUntil = 1 / 0); - }), - this.logger_( - "excluding audio group " + - i + - " as " + - s + - ' does not support codec(s): "' + - a.audio + - '"', - )), - !Object.keys(o).length) - ) { - if ( - this.sourceUpdater_.hasCreatedSourceBuffers() && - !this.sourceUpdater_.canChangeType() - ) { - var u = []; - if ( - (["video", "audio"].forEach(function (e) { - var t = (pr(n.sourceUpdater_.codecs[e] || "")[0] || {}) - .type, - i = (pr(a[e] || "")[0] || {}).type; - t && - i && - t.toLowerCase() !== i.toLowerCase() && - u.push( - '"' + - n.sourceUpdater_.codecs[e] + - '" -> "' + - a[e] + - '"', - ); - }), - u.length) - ) - return void this.blacklistCurrentPlaylist({ - playlist: this.media(), - message: - "Codec switching not supported: " + u.join(", ") + ".", - blacklistDuration: 1 / 0, - internal: !0, - }); - } - return a; - } - t = - Object.keys(o).reduce(function (e, t) { - return ( - e && (e += ", "), - (e += - t + ' does not support codec(s): "' + o[t].join(",") + '"') - ); - }, "") + "."; - this.blacklistCurrentPlaylist({ - playlist: this.media(), - internal: !0, - message: t, - blacklistDuration: 1 / 0, - }); - } else - this.blacklistCurrentPlaylist({ - playlist: this.media(), - message: "Could not determine codecs for playlist.", - blacklistDuration: 1 / 0, - }); - }), - (t.tryToCreateSourceBuffers_ = function () { - var e; - "open" !== this.mediaSource.readyState || - this.sourceUpdater_.hasCreatedSourceBuffers() || - !this.areMediaTypesKnown_() || - ((e = this.getCodecsOrExclude_()) && - (this.sourceUpdater_.createSourceBuffers(e), - (e = [e.video, e.audio].filter(Boolean).join(",")), - this.excludeIncompatibleVariants_(e))); - }), - (t.excludeUnsupportedVariants_ = function () { - var n = this, - r = this.master().playlists, - a = []; - Object.keys(r).forEach(function (e) { - var t, - i = r[e]; - -1 === a.indexOf(i.id) && - (a.push(i.id), - (t = []), - !(e = $u(n.master, i)).audio || - yr(e.audio) || - gr(e.audio) || - t.push("audio codec " + e.audio), - !e.video || - yr(e.video) || - gr(e.video) || - t.push("video codec " + e.video), - e.text && - "stpp.ttml.im1t" === e.text && - t.push("text codec " + e.text), - t.length && - ((i.excludeUntil = 1 / 0), - n.logger_( - "excluding " + i.id + " for unsupported: " + t.join(", "), - ))); - }); - }), - (t.excludeIncompatibleVariants_ = function (e) { - var r = this, - a = [], - s = this.master().playlists, - e = Yu(pr(e)), - o = Qu(e), - u = (e.video && pr(e.video)[0]) || null, - l = (e.audio && pr(e.audio)[0]) || null; - Object.keys(s).forEach(function (e) { - var t, - i, - n = s[e]; - -1 === a.indexOf(n.id) && - n.excludeUntil !== 1 / 0 && - (a.push(n.id), - (t = []), - (i = $u(r.masterPlaylistLoader_.master, n)), - (e = Qu(i)), - (i.audio || i.video) && - (e !== o && t.push('codec count "' + e + '" !== "' + o + '"'), - r.sourceUpdater_.canChangeType() || - ((e = (i.video && pr(i.video)[0]) || null), - (i = (i.audio && pr(i.audio)[0]) || null), - e && - u && - e.type.toLowerCase() !== u.type.toLowerCase() && - t.push('video codec "' + e.type + '" !== "' + u.type + '"'), - i && - l && - i.type.toLowerCase() !== l.type.toLowerCase() && - t.push( - 'audio codec "' + i.type + '" !== "' + l.type + '"', - )), - t.length && - ((n.excludeUntil = 1 / 0), - r.logger_("blacklisting " + n.id + ": " + t.join(" && "))))); - }); - }), - (t.updateAdCues_ = function (e) { - var t = 0, - i = this.seekable(); - i.length && (t = i.start(0)), - (function (e, t, i) { - if ((void 0 === i && (i = 0), e.segments)) - for (var n = i, r = 0; r < e.segments.length; r++) { - var a, - s, - o, - u = e.segments[r]; - if ( - (o = - o || - (function (e, t) { - for (var i = e.cues, n = 0; n < i.length; n++) { - var r = i[n]; - if (t >= r.adStartTime && t <= r.adEndTime) return r; - } - return null; - })(t, n + u.duration / 2)) - ) { - if ("cueIn" in u) { - (o.endTime = n), - (o.adEndTime = n), - (n += u.duration), - (o = null); - continue; - } - if (n < o.endTime) { - n += u.duration; - continue; - } - o.endTime += u.duration; - } else - "cueOut" in u && - (((o = new window.VTTCue( - n, - n + u.duration, - u.cueOut, - )).adStartTime = n), - (o.adEndTime = n + parseFloat(u.cueOut)), - t.addCue(o)), - "cueOutCont" in u && - ((a = (s = u.cueOutCont.split("/").map(parseFloat))[0]), - (s = s[1]), - ((o = new window.VTTCue( - n, - n + u.duration, - "", - )).adStartTime = n - a), - (o.adEndTime = o.adStartTime + s), - t.addCue(o)); - n += u.duration; - } - })(e, this.cueTagsTrack_, t); - }), - (t.goalBufferLength = function () { - var e = this.tech_.currentTime(), - t = El.GOAL_BUFFER_LENGTH, - i = El.GOAL_BUFFER_LENGTH_RATE, - n = Math.max(t, El.MAX_GOAL_BUFFER_LENGTH); - return Math.min(t + e * i, n); - }), - (t.bufferLowWaterLine = function () { - var e = this.tech_.currentTime(), - t = El.BUFFER_LOW_WATER_LINE, - i = El.BUFFER_LOW_WATER_LINE_RATE, - n = Math.max(t, El.MAX_BUFFER_LOW_WATER_LINE), - r = Math.max(t, El.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE); - return Math.min(t + e * i, this.experimentalBufferBasedABR ? r : n); - }), - (t.bufferHighWaterLine = function () { - return El.BUFFER_HIGH_WATER_LINE; - }), - e - ); - })(tr.EventTarget), - Tc = ["seeking", "seeked", "pause", "playing", "error"], - Sc = (function () { - function e(e) { - var i = this; - (this.masterPlaylistController_ = e.masterPlaylistController), - (this.tech_ = e.tech), - (this.seekable = e.seekable), - (this.allowSeeksWithinUnsafeLiveWindow = - e.allowSeeksWithinUnsafeLiveWindow), - (this.liveRangeSafeTimeDelta = e.liveRangeSafeTimeDelta), - (this.media = e.media), - (this.consecutiveUpdates = 0), - (this.lastRecordedTime = null), - (this.timer_ = null), - (this.checkCurrentTimeTimeout_ = null), - (this.logger_ = Ro("PlaybackWatcher")), - this.logger_("initialize"); - function t() { - return i.monitorCurrentTime_(); - } - function n() { - return i.monitorCurrentTime_(); - } - function r() { - return i.techWaiting_(); - } - function a() { - return i.cancelTimer_(); - } - var s = this.masterPlaylistController_, - o = ["main", "subtitle", "audio"], - u = {}; - o.forEach(function (e) { - (u[e] = { - reset: function () { - return i.resetSegmentDownloads_(e); - }, - updateend: function () { - return i.checkSegmentDownloads_(e); - }, - }), - s[e + "SegmentLoader_"].on("appendsdone", u[e].updateend), - s[e + "SegmentLoader_"].on("playlistupdate", u[e].reset), - i.tech_.on(["seeked", "seeking"], u[e].reset); - }); - function l(t) { - ["main", "audio"].forEach(function (e) { - s[e + "SegmentLoader_"][t]("appended", i.seekingAppendCheck_); - }); - } - (this.seekingAppendCheck_ = function () { - i.fixesBadSeeks_() && - ((i.consecutiveUpdates = 0), - (i.lastRecordedTime = i.tech_.currentTime()), - l("off")); - }), - (this.clearSeekingAppendCheck_ = function () { - return l("off"); - }), - (this.watchForBadSeeking_ = function () { - i.clearSeekingAppendCheck_(), l("on"); - }), - this.tech_.on("seeked", this.clearSeekingAppendCheck_), - this.tech_.on("seeking", this.watchForBadSeeking_), - this.tech_.on("waiting", r), - this.tech_.on(Tc, a), - this.tech_.on("canplay", n), - this.tech_.one("play", t), - (this.dispose = function () { - i.clearSeekingAppendCheck_(), - i.logger_("dispose"), - i.tech_.off("waiting", r), - i.tech_.off(Tc, a), - i.tech_.off("canplay", n), - i.tech_.off("play", t), - i.tech_.off("seeking", i.watchForBadSeeking_), - i.tech_.off("seeked", i.clearSeekingAppendCheck_), - o.forEach(function (e) { - s[e + "SegmentLoader_"].off("appendsdone", u[e].updateend), - s[e + "SegmentLoader_"].off("playlistupdate", u[e].reset), - i.tech_.off(["seeked", "seeking"], u[e].reset); - }), - i.checkCurrentTimeTimeout_ && - window.clearTimeout(i.checkCurrentTimeTimeout_), - i.cancelTimer_(); - }); - } - var t = e.prototype; - return ( - (t.monitorCurrentTime_ = function () { - this.checkCurrentTime_(), - this.checkCurrentTimeTimeout_ && - window.clearTimeout(this.checkCurrentTimeTimeout_), - (this.checkCurrentTimeTimeout_ = window.setTimeout( - this.monitorCurrentTime_.bind(this), - 250, - )); - }), - (t.resetSegmentDownloads_ = function (e) { - var t = this.masterPlaylistController_[e + "SegmentLoader_"]; - 0 < this[e + "StalledDownloads_"] && - this.logger_( - "resetting possible stalled download count for " + e + " loader", - ), - (this[e + "StalledDownloads_"] = 0), - (this[e + "Buffered_"] = t.buffered_()); - }), - (t.checkSegmentDownloads_ = function (e) { - var t = this.masterPlaylistController_, - i = t[e + "SegmentLoader_"], - n = i.buffered_(), - r = (function (e, t) { - if (e === t) return !1; - if ((!e && t) || (!t && e)) return !0; - if (e.length !== t.length) return !0; - for (var i = 0; i < e.length; i++) - if (e.start(i) !== t.start(i) || e.end(i) !== t.end(i)) - return !0; - return !1; - })(this[e + "Buffered_"], n); - (this[e + "Buffered_"] = n), - r - ? this.resetSegmentDownloads_(e) - : (this[e + "StalledDownloads_"]++, - this.logger_( - "found #" + - this[e + "StalledDownloads_"] + - " " + - e + - " appends that did not increase buffer (possible stalled download)", - { - playlistId: i.playlist_ && i.playlist_.id, - buffered: jo(n), - }, - ), - this[e + "StalledDownloads_"] < 10 || - (this.logger_(e + " loader stalled download exclusion"), - this.resetSegmentDownloads_(e), - this.tech_.trigger({ - type: "usage", - name: "vhs-" + e + "-download-exclusion", - }), - "subtitle" !== e && - t.blacklistCurrentPlaylist( - { - message: - "Excessive " + e + " segment downloading detected.", - }, - 1 / 0, - ))); - }), - (t.checkCurrentTime_ = function () { - if (!this.tech_.paused() && !this.tech_.seeking()) { - var e = this.tech_.currentTime(), - t = this.tech_.buffered(); - if ( - this.lastRecordedTime === e && - (!t.length || e + 0.1 >= t.end(t.length - 1)) - ) - return this.techWaiting_(); - 5 <= this.consecutiveUpdates && e === this.lastRecordedTime - ? (this.consecutiveUpdates++, this.waiting_()) - : e === this.lastRecordedTime - ? this.consecutiveUpdates++ - : ((this.consecutiveUpdates = 0), (this.lastRecordedTime = e)); - } - }), - (t.cancelTimer_ = function () { - (this.consecutiveUpdates = 0), - this.timer_ && - (this.logger_("cancelTimer_"), clearTimeout(this.timer_)), - (this.timer_ = null); - }), - (t.fixesBadSeeks_ = function () { - if (!this.tech_.seeking()) return !1; - var e, - t = this.seekable(), - i = this.tech_.currentTime(); - if ( - (this.afterSeekableWindow_( - t, - i, - this.media(), - this.allowSeeksWithinUnsafeLiveWindow, - ) && (e = t.end(t.length - 1)), - "undefined" != - typeof (e = this.beforeSeekableWindow_(t, i) - ? (a = t.start(0)) + (a === t.end(0) ? 0 : 0.1) - : e)) - ) - return ( - this.logger_( - "Trying to seek outside of seekable at time " + - i + - " with seekable range " + - Fo(t) + - ". Seeking to " + - e + - ".", - ), - this.tech_.setCurrentTime(e), - !0 - ); - for ( - var n = this.masterPlaylistController_.sourceUpdater_, - r = this.tech_.buffered(), - a = n.audioBuffer ? n.audioBuffered() : null, - t = n.videoBuffer ? n.videoBuffered() : null, - n = this.media(), - s = n.partTargetDuration || 2 * (n.targetDuration - fl), - o = [a, t], - u = 0; - u < o.length; - u++ - ) - if (o[u]) if (qo(o[u], i) < s) return !1; - r = Bo(r, i); - return ( - 0 !== r.length && - ((e = r.start(0) + 0.1), - this.logger_( - "Buffered region starts (" + - r.start(0) + - ") just beyond seek point (" + - i + - "). Seeking to " + - e + - ".", - ), - this.tech_.setCurrentTime(e), - !0) - ); - }), - (t.waiting_ = function () { - var e, t; - this.techWaiting_() || - ((e = this.tech_.currentTime()), - (t = this.tech_.buffered()), - (t = Uo(t, e)).length && - e + 3 <= t.end(0) && - (this.cancelTimer_(), - this.tech_.setCurrentTime(e), - this.logger_( - "Stopped at " + - e + - " while inside a buffered region [" + - t.start(0) + - " -> " + - t.end(0) + - "]. Attempting to resume playback by seeking to the current time.", - ), - this.tech_.trigger({ - type: "usage", - name: "vhs-unknown-waiting", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-unknown-waiting", - }))); - }), - (t.techWaiting_ = function () { - var e = this.seekable(), - t = this.tech_.currentTime(); - if (this.tech_.seeking() || null !== this.timer_) return !0; - if (this.beforeSeekableWindow_(e, t)) { - var i = e.end(e.length - 1); - return ( - this.logger_( - "Fell out of live window at time " + - t + - ". Seeking to live point (seekable end) " + - i, - ), - this.cancelTimer_(), - this.tech_.setCurrentTime(i), - this.tech_.trigger({ type: "usage", name: "vhs-live-resync" }), - this.tech_.trigger({ type: "usage", name: "hls-live-resync" }), - !0 - ); - } - (e = this.tech_.vhs.masterPlaylistController_.sourceUpdater_), - (i = this.tech_.buffered()); - if ( - this.videoUnderflow_({ - audioBuffered: e.audioBuffered(), - videoBuffered: e.videoBuffered(), - currentTime: t, - }) - ) - return ( - this.cancelTimer_(), - this.tech_.setCurrentTime(t), - this.tech_.trigger({ - type: "usage", - name: "vhs-video-underflow", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-video-underflow", - }), - !0 - ); - e = Bo(i, t); - if (0 < e.length) { - i = e.start(0) - t; - return ( - this.logger_( - "Stopped at " + - t + - ", setting timer for " + - i + - ", seeking to " + - e.start(0), - ), - this.cancelTimer_(), - (this.timer_ = setTimeout( - this.skipTheGap_.bind(this), - 1e3 * i, - t, - )), - !0 - ); - } - return !1; - }), - (t.afterSeekableWindow_ = function (e, t, i, n) { - if ((void 0 === n && (n = !1), !e.length)) return !1; - var r = e.end(e.length - 1) + 0.1; - return ( - (r = - !i.endList && n - ? e.end(e.length - 1) + 3 * i.targetDuration - : r) < t - ); - }), - (t.beforeSeekableWindow_ = function (e, t) { - return !!( - e.length && - 0 < e.start(0) && - t < e.start(0) - this.liveRangeSafeTimeDelta - ); - }), - (t.videoUnderflow_ = function (e) { - var t, - i, - n = e.videoBuffered, - r = e.audioBuffered, - a = e.currentTime; - if (n) - return ( - n.length && r.length - ? ((i = Uo(n, a - 3)), - (e = Uo(n, a)), - (r = Uo(r, a)).length && - !e.length && - i.length && - (t = { start: i.end(0), end: r.end(0) })) - : Bo(n, a).length || (t = this.gapFromVideoUnderflow_(n, a)), - !!t && - (this.logger_( - "Encountered a gap in video from " + - t.start + - " to " + - t.end + - ". Seeking to current time " + - a, - ), - !0) - ); - }), - (t.skipTheGap_ = function (e) { - var t = this.tech_.buffered(), - i = this.tech_.currentTime(), - t = Bo(t, i); - this.cancelTimer_(), - 0 !== t.length && - i === e && - (this.logger_( - "skipTheGap_:", - "currentTime:", - i, - "scheduled currentTime:", - e, - "nextRange start:", - t.start(0), - ), - this.tech_.setCurrentTime(t.start(0) + fl), - this.tech_.trigger({ type: "usage", name: "vhs-gap-skip" }), - this.tech_.trigger({ type: "usage", name: "hls-gap-skip" })); - }), - (t.gapFromVideoUnderflow_ = function (e, t) { - for ( - var i = (function (e) { - if (e.length < 2) return tr.createTimeRanges(); - for (var t = [], i = 1; i < e.length; i++) { - var n = e.end(i - 1), - r = e.start(i); - t.push([n, r]); - } - return tr.createTimeRanges(t); - })(e), - n = 0; - n < i.length; - n++ - ) { - var r = i.start(n), - a = i.end(n); - if (t - r < 4 && 2 < t - r) return { start: r, end: a }; - } - return null; - }), - e - ); - })(), - wc = { - errorInterval: 30, - getSource: function (e) { - return e( - this.tech({ IWillNotUseThisInPlugins: !0 }).currentSource_ || - this.currentSource(), - ); - }, - }, - Ec = { - PlaylistLoader: _l, - Playlist: gl, - utils: zt, - STANDARD_PLAYLIST_SELECTOR: ar, - INITIAL_PLAYLIST_SELECTOR: function () { - var t = this, - e = this.playlists.master.playlists.filter(gl.isEnabled); - return ( - el(e, tl), - e.filter(function (e) { - return !!$u(t.playlists.master, e).video; - })[0] || null - ); - }, - lastBandwidthSelector: ar, - movingAverageBandwidthSelector: function (t) { - var i = -1, - n = -1; - if (t < 0 || 1 < t) - throw new Error( - "Moving average bandwidth decay must be between 0 and 1.", - ); - return function () { - var e = (this.useDevicePixelRatio && window.devicePixelRatio) || 1; - return ( - i < 0 && ((i = this.systemBandwidth), (n = this.systemBandwidth)), - 0 < this.systemBandwidth && - this.systemBandwidth !== n && - ((i = t * this.systemBandwidth + (1 - t) * i), - (n = this.systemBandwidth)), - il( - this.playlists.master, - i, - parseInt(Zu(this.tech_.el(), "width"), 10) * e, - parseInt(Zu(this.tech_.el(), "height"), 10) * e, - this.limitRenditionByPlayerDimensions, - this.masterPlaylistController_, - ) - ); - }; - }, - comparePlaylistBandwidth: tl, - comparePlaylistResolution: function (e, t) { - var i, n; - return (i = - (i = - e.attributes.RESOLUTION && e.attributes.RESOLUTION.width - ? e.attributes.RESOLUTION.width - : i) || window.Number.MAX_VALUE) === - (n = - (n = - t.attributes.RESOLUTION && t.attributes.RESOLUTION.width - ? t.attributes.RESOLUTION.width - : n) || window.Number.MAX_VALUE) && - e.attributes.BANDWIDTH && - t.attributes.BANDWIDTH - ? e.attributes.BANDWIDTH - t.attributes.BANDWIDTH - : i - n; - }, - xhr: yu(), - }; - Object.keys(El).forEach(function (t) { - Object.defineProperty(Ec, t, { - get: function () { - return ( - tr.log.warn( - "using Vhs." + t + " is UNSAFE be sure you know what you are doing", - ), - El[t] - ); - }, - set: function (e) { - tr.log.warn( - "using Vhs." + t + " is UNSAFE be sure you know what you are doing", - ), - "number" != typeof e || e < 0 - ? tr.log.warn( - "value of Vhs." + t + " must be greater than or equal to 0", - ) - : (El[t] = e); - }, - }); - }); - function kc(e, t) { - for (var i = t.media(), n = -1, r = 0; r < e.length; r++) - if (e[r].id === i.id) { - n = r; - break; - } - (e.selectedIndex_ = n), e.trigger({ selectedIndex: n, type: "change" }); - } - var Cc = "videojs-vhs"; - Ec.canPlaySource = function () { - return tr.log.warn( - "HLS is no longer a tech. Please remove it from your player's techOrder.", - ); - }; - function Ic(e) { - var n = e.player, - t = e.sourceKeySystems, - i = e.audioMedia, - e = e.mainPlaylists; - if (!n.eme.initializeMediaKeys) return Promise.resolve(); - var r, - e = - ((e = e = i ? e.concat([i]) : e), - (r = Object.keys(t)), - e.reduce(function (e, n) { - if (!n.contentProtection) return e; - var t = r.reduce(function (e, t) { - var i = n.contentProtection[t]; - return i && i.pssh && (e[t] = { pssh: i.pssh }), e; - }, {}); - return Object.keys(t).length && e.push(t), e; - }, [])), - a = [], - s = []; - return ( - e.forEach(function (e) { - s.push( - new Promise(function (e, t) { - n.tech_.one("keysessioncreated", e); - }), - ), - a.push( - new Promise(function (t, i) { - n.eme.initializeMediaKeys({ keySystems: e }, function (e) { - e ? i(e) : t(); - }); - }), - ); - }), - Promise.race([Promise.all(a), Promise.race(s)]) - ); - } - function xc(e) { - var t = e.player; - return ( - !!(e = (function (e, t, i) { - if (!e) return e; - var n = {}; - t && - t.attributes && - t.attributes.CODECS && - (n = Yu(pr(t.attributes.CODECS))), - i && - i.attributes && - i.attributes.CODECS && - (n.audio = i.attributes.CODECS); - var r, - a = mr(n.video), - s = mr(n.audio), - o = {}; - for (r in e) - (o[r] = {}), - s && (o[r].audioContentType = s), - a && (o[r].videoContentType = a), - t.contentProtection && - t.contentProtection[r] && - t.contentProtection[r].pssh && - (o[r].pssh = t.contentProtection[r].pssh), - "string" == typeof e[r] && (o[r].url = e[r]); - return tr.mergeOptions(e, o); - })(e.sourceKeySystems, e.media, e.audioMedia)) && - (!((t.currentSource().keySystems = e) && !t.eme) || - (tr.log.warn( - "DRM encrypted source cannot be decrypted without a DRM plugin", - ), - !1)) - ); - } - function Ac() { - if (!window.localStorage) return null; - var e = window.localStorage.getItem(Cc); - if (!e) return null; - try { - return JSON.parse(e); - } catch (e) { - return null; - } - } - (Ec.supportsNativeHls = (function () { - if (!document || !document.createElement) return !1; - var t = document.createElement("video"); - if (!tr.getTech("Html5").isSupported()) return !1; - return [ - "application/vnd.apple.mpegurl", - "audio/mpegurl", - "audio/x-mpegurl", - "application/x-mpegurl", - "video/x-mpegurl", - "video/mpegurl", - "application/mpegurl", - ].some(function (e) { - return /maybe|probably/i.test(t.canPlayType(e)); - }); - })()), - (Ec.supportsNativeDash = - !!( - document && - document.createElement && - tr.getTech("Html5").isSupported() - ) && - /maybe|probably/i.test( - document.createElement("video").canPlayType("application/dash+xml"), - )), - (Ec.supportsTypeNatively = function (e) { - return "hls" === e - ? Ec.supportsNativeHls - : "dash" === e && Ec.supportsNativeDash; - }), - (Ec.isSupported = function () { - return tr.log.warn( - "HLS is no longer a tech. Please remove it from your player's techOrder.", - ); - }); - var Pc = (function (r) { - function e(e, t, i) { - var n = r.call(this, t, tr.mergeOptions(i.hls, i.vhs)) || this; - if ( - (i.hls && - Object.keys(i.hls).length && - tr.log.warn( - "Using hls options is deprecated. Please rename `hls` to `vhs` in your options object.", - ), - "number" == typeof i.initialBandwidth && - (n.options_.bandwidth = i.initialBandwidth), - (n.logger_ = Ro("VhsHandler")), - t.options_ && - t.options_.playerId && - ((i = tr(t.options_.playerId)).hasOwnProperty("hls") || - Object.defineProperty(i, "hls", { - get: function () { - return ( - tr.log.warn( - "player.hls is deprecated. Use player.tech().vhs instead.", - ), - t.trigger({ type: "usage", name: "hls-player-access" }), - ft(n) - ); - }, - configurable: !0, - }), - i.hasOwnProperty("vhs") || - Object.defineProperty(i, "vhs", { - get: function () { - return ( - tr.log.warn( - "player.vhs is deprecated. Use player.tech().vhs instead.", - ), - t.trigger({ type: "usage", name: "vhs-player-access" }), - ft(n) - ); - }, - configurable: !0, - }), - i.hasOwnProperty("dash") || - Object.defineProperty(i, "dash", { - get: function () { - return ( - tr.log.warn( - "player.dash is deprecated. Use player.tech().vhs instead.", - ), - ft(n) - ); - }, - configurable: !0, - }), - (n.player_ = i)), - (n.tech_ = t), - (n.source_ = e), - (n.stats = {}), - (n.ignoreNextSeekingEvent_ = !1), - n.setOptions_(), - n.options_.overrideNative && - t.overrideNativeAudioTracks && - t.overrideNativeVideoTracks) - ) - t.overrideNativeAudioTracks(!0), t.overrideNativeVideoTracks(!0); - else if ( - n.options_.overrideNative && - (t.featuresNativeVideoTracks || t.featuresNativeAudioTracks) - ) - throw new Error( - "Overriding native HLS requires emulated tracks. See https://git.io/vMpjB", - ); - return ( - n.on( - document, - [ - "fullscreenchange", - "webkitfullscreenchange", - "mozfullscreenchange", - "MSFullscreenChange", - ], - function (e) { - var t = - document.fullscreenElement || - document.webkitFullscreenElement || - document.mozFullScreenElement || - document.msFullscreenElement; - t && t.contains(n.tech_.el()) - ? n.masterPlaylistController_.fastQualityChange_() - : n.masterPlaylistController_.checkABR_(); - }, - ), - n.on(n.tech_, "seeking", function () { - this.ignoreNextSeekingEvent_ - ? (this.ignoreNextSeekingEvent_ = !1) - : this.setCurrentTime(this.tech_.currentTime()); - }), - n.on(n.tech_, "error", function () { - this.tech_.error() && - this.masterPlaylistController_ && - this.masterPlaylistController_.pauseLoading(); - }), - n.on(n.tech_, "play", n.play), - n - ); - } - mt(e, r); - var t = e.prototype; - return ( - (t.setOptions_ = function () { - var e, - t = this; - (this.options_.withCredentials = this.options_.withCredentials || !1), - (this.options_.handleManifestRedirects = - !1 !== this.options_.handleManifestRedirects), - (this.options_.limitRenditionByPlayerDimensions = - !1 !== this.options_.limitRenditionByPlayerDimensions), - (this.options_.useDevicePixelRatio = - this.options_.useDevicePixelRatio || !1), - (this.options_.smoothQualityChange = - this.options_.smoothQualityChange || !1), - (this.options_.useBandwidthFromLocalStorage = - "undefined" != typeof this.source_.useBandwidthFromLocalStorage - ? this.source_.useBandwidthFromLocalStorage - : this.options_.useBandwidthFromLocalStorage || !1), - (this.options_.useNetworkInformationApi = - this.options_.useNetworkInformationApi || !1), - (this.options_.useDtsForTimestampOffset = - this.options_.useDtsForTimestampOffset || !1), - (this.options_.customTagParsers = - this.options_.customTagParsers || []), - (this.options_.customTagMappers = - this.options_.customTagMappers || []), - (this.options_.cacheEncryptionKeys = - this.options_.cacheEncryptionKeys || !1), - "number" != typeof this.options_.blacklistDuration && - (this.options_.blacklistDuration = 300), - "number" != typeof this.options_.bandwidth && - this.options_.useBandwidthFromLocalStorage && - ((e = Ac()) && - e.bandwidth && - ((this.options_.bandwidth = e.bandwidth), - this.tech_.trigger({ - type: "usage", - name: "vhs-bandwidth-from-local-storage", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-bandwidth-from-local-storage", - })), - e && - e.throughput && - ((this.options_.throughput = e.throughput), - this.tech_.trigger({ - type: "usage", - name: "vhs-throughput-from-local-storage", - }), - this.tech_.trigger({ - type: "usage", - name: "hls-throughput-from-local-storage", - }))), - "number" != typeof this.options_.bandwidth && - (this.options_.bandwidth = El.INITIAL_BANDWIDTH), - (this.options_.enableLowInitialPlaylist = - this.options_.enableLowInitialPlaylist && - this.options_.bandwidth === El.INITIAL_BANDWIDTH), - [ - "withCredentials", - "useDevicePixelRatio", - "limitRenditionByPlayerDimensions", - "bandwidth", - "smoothQualityChange", - "customTagParsers", - "customTagMappers", - "handleManifestRedirects", - "cacheEncryptionKeys", - "playlistSelector", - "initialPlaylistSelector", - "experimentalBufferBasedABR", - "liveRangeSafeTimeDelta", - "experimentalLLHLS", - "useNetworkInformationApi", - "useDtsForTimestampOffset", - "experimentalExactManifestTimings", - "experimentalLeastPixelDiffSelector", - ].forEach(function (e) { - "undefined" != typeof t.source_[e] && - (t.options_[e] = t.source_[e]); - }), - (this.limitRenditionByPlayerDimensions = - this.options_.limitRenditionByPlayerDimensions), - (this.useDevicePixelRatio = this.options_.useDevicePixelRatio); - }), - (t.src = function (e, t) { - var n = this; - e && - (this.setOptions_(), - (this.options_.src = - 0 === - (e = this.source_.src) - .toLowerCase() - .indexOf("data:application/vnd.videojs.vhs+json,") - ? JSON.parse(e.substring(e.indexOf(",") + 1)) - : e), - (this.options_.tech = this.tech_), - (this.options_.externVhs = Ec), - (this.options_.sourceType = vr(t)), - (this.options_.seekTo = function (e) { - n.tech_.setCurrentTime(e); - }), - this.options_.smoothQualityChange && - tr.log.warn( - "smoothQualityChange is deprecated and will be removed in the next major version", - ), - (this.masterPlaylistController_ = new bc(this.options_)), - (t = tr.mergeOptions( - { liveRangeSafeTimeDelta: 0.1 }, - this.options_, - { - seekable: function () { - return n.seekable(); - }, - media: function () { - return n.masterPlaylistController_.media(); - }, - masterPlaylistController: this.masterPlaylistController_, - }, - )), - (this.playbackWatcher_ = new Sc(t)), - this.masterPlaylistController_.on("error", function () { - var e = tr.players[n.tech_.options_.playerId], - t = n.masterPlaylistController_.error; - "object" != typeof t || t.code - ? "string" == typeof t && (t = { message: t, code: 3 }) - : (t.code = 3), - e.error(t); - }), - (t = this.options_.experimentalBufferBasedABR - ? Ec.movingAverageBandwidthSelector(0.55) - : Ec.STANDARD_PLAYLIST_SELECTOR), - (this.masterPlaylistController_.selectPlaylist = ( - this.selectPlaylist || t - ).bind(this)), - (this.masterPlaylistController_.selectInitialPlaylist = - Ec.INITIAL_PLAYLIST_SELECTOR.bind(this)), - (this.playlists = - this.masterPlaylistController_.masterPlaylistLoader_), - (this.mediaSource = this.masterPlaylistController_.mediaSource), - Object.defineProperties(this, { - selectPlaylist: { - get: function () { - return this.masterPlaylistController_.selectPlaylist; - }, - set: function (e) { - this.masterPlaylistController_.selectPlaylist = e.bind(this); - }, - }, - throughput: { - get: function () { - return this.masterPlaylistController_.mainSegmentLoader_ - .throughput.rate; - }, - set: function (e) { - (this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = - e), - (this.masterPlaylistController_.mainSegmentLoader_.throughput.count = 1); - }, - }, - bandwidth: { - get: function () { - var e = - this.masterPlaylistController_.mainSegmentLoader_ - .bandwidth, - t = - window.navigator.connection || - window.navigator.mozConnection || - window.navigator.webkitConnection; - return (e = - this.options_.useNetworkInformationApi && t - ? 1e7 <= (t = 1e3 * t.downlink * 1e3) && 1e7 <= e - ? Math.max(e, t) - : t - : e); - }, - set: function (e) { - (this.masterPlaylistController_.mainSegmentLoader_.bandwidth = - e), - (this.masterPlaylistController_.mainSegmentLoader_.throughput = - { rate: 0, count: 0 }); - }, - }, - systemBandwidth: { - get: function () { - var e = 1 / (this.bandwidth || 1), - t = 0 < this.throughput ? 1 / this.throughput : 0; - return Math.floor(1 / (e + t)); - }, - set: function () { - tr.log.error('The "systemBandwidth" property is read-only'); - }, - }, - }), - this.options_.bandwidth && - (this.bandwidth = this.options_.bandwidth), - this.options_.throughput && - (this.throughput = this.options_.throughput), - Object.defineProperties(this.stats, { - bandwidth: { - get: function () { - return n.bandwidth || 0; - }, - enumerable: !0, - }, - mediaRequests: { - get: function () { - return n.masterPlaylistController_.mediaRequests_() || 0; - }, - enumerable: !0, - }, - mediaRequestsAborted: { - get: function () { - return ( - n.masterPlaylistController_.mediaRequestsAborted_() || 0 - ); - }, - enumerable: !0, - }, - mediaRequestsTimedout: { - get: function () { - return ( - n.masterPlaylistController_.mediaRequestsTimedout_() || 0 - ); - }, - enumerable: !0, - }, - mediaRequestsErrored: { - get: function () { - return ( - n.masterPlaylistController_.mediaRequestsErrored_() || 0 - ); - }, - enumerable: !0, - }, - mediaTransferDuration: { - get: function () { - return ( - n.masterPlaylistController_.mediaTransferDuration_() || 0 - ); - }, - enumerable: !0, - }, - mediaBytesTransferred: { - get: function () { - return ( - n.masterPlaylistController_.mediaBytesTransferred_() || 0 - ); - }, - enumerable: !0, - }, - mediaSecondsLoaded: { - get: function () { - return n.masterPlaylistController_.mediaSecondsLoaded_() || 0; - }, - enumerable: !0, - }, - mediaAppends: { - get: function () { - return n.masterPlaylistController_.mediaAppends_() || 0; - }, - enumerable: !0, - }, - mainAppendsToLoadedData: { - get: function () { - return ( - n.masterPlaylistController_.mainAppendsToLoadedData_() || 0 - ); - }, - enumerable: !0, - }, - audioAppendsToLoadedData: { - get: function () { - return ( - n.masterPlaylistController_.audioAppendsToLoadedData_() || 0 - ); - }, - enumerable: !0, - }, - appendsToLoadedData: { - get: function () { - return ( - n.masterPlaylistController_.appendsToLoadedData_() || 0 - ); - }, - enumerable: !0, - }, - timeToLoadedData: { - get: function () { - return n.masterPlaylistController_.timeToLoadedData_() || 0; - }, - enumerable: !0, - }, - buffered: { - get: function () { - return jo(n.tech_.buffered()); - }, - enumerable: !0, - }, - currentTime: { - get: function () { - return n.tech_.currentTime(); - }, - enumerable: !0, - }, - currentSource: { - get: function () { - return n.tech_.currentSource_; - }, - enumerable: !0, - }, - currentTech: { - get: function () { - return n.tech_.name_; - }, - enumerable: !0, - }, - duration: { - get: function () { - return n.tech_.duration(); - }, - enumerable: !0, - }, - master: { - get: function () { - return n.playlists.master; - }, - enumerable: !0, - }, - playerDimensions: { - get: function () { - return n.tech_.currentDimensions(); - }, - enumerable: !0, - }, - seekable: { - get: function () { - return jo(n.tech_.seekable()); - }, - enumerable: !0, - }, - timestamp: { - get: function () { - return Date.now(); - }, - enumerable: !0, - }, - videoPlaybackQuality: { - get: function () { - return n.tech_.getVideoPlaybackQuality(); - }, - enumerable: !0, - }, - }), - this.tech_.one( - "canplay", - this.masterPlaylistController_.setupFirstPlay.bind( - this.masterPlaylistController_, - ), - ), - this.tech_.on("bandwidthupdate", function () { - n.options_.useBandwidthFromLocalStorage && - (function (e) { - if (!window.localStorage) return; - var t = (t = Ac()) ? tr.mergeOptions(t, e) : e; - try { - window.localStorage.setItem(Cc, JSON.stringify(t)); - } catch (e) { - return; - } - })({ - bandwidth: n.bandwidth, - throughput: Math.round(n.throughput), - }); - }), - this.masterPlaylistController_.on( - "selectedinitialmedia", - function () { - var i; - (i = n).representations = function () { - var e = i.masterPlaylistController_.master(), - e = au(e) - ? i.masterPlaylistController_.getAudioTrackPlaylists_() - : e.playlists; - return e - ? e - .filter(function (e) { - return !Zo(e); - }) - .map(function (e, t) { - return new Kl(i, e, e.id); - }) - : []; - }; - }, - ), - this.masterPlaylistController_.sourceUpdater_.on( - "createdsourcebuffers", - function () { - n.setupEme_(); - }, - ), - this.on(this.masterPlaylistController_, "progress", function () { - this.tech_.trigger("progress"); - }), - this.on(this.masterPlaylistController_, "firstplay", function () { - this.ignoreNextSeekingEvent_ = !0; - }), - this.setupQualityLevels_(), - this.tech_.el() && - ((this.mediaSourceUrl_ = window.URL.createObjectURL( - this.masterPlaylistController_.mediaSource, - )), - this.tech_.src(this.mediaSourceUrl_))); - }), - (t.createKeySessions_ = function () { - var t = this, - e = - this.masterPlaylistController_.mediaTypes_.AUDIO - .activePlaylistLoader; - this.logger_("waiting for EME key session creation"), - Ic({ - player: this.player_, - sourceKeySystems: this.source_.keySystems, - audioMedia: e && e.media(), - mainPlaylists: this.playlists.master.playlists, - }) - .then(function () { - t.logger_("created EME key session"), - t.masterPlaylistController_.sourceUpdater_.initializedEme(); - }) - .catch(function (e) { - t.logger_("error while creating EME key session", e), - t.player_.error({ - message: "Failed to initialize media keys for EME", - code: 3, - }); - }); - }), - (t.handleWaitingForKey_ = function () { - this.logger_( - "waitingforkey fired, attempting to create any new key sessions", - ), - this.createKeySessions_(); - }), - (t.setupEme_ = function () { - var t = this, - e = - this.masterPlaylistController_.mediaTypes_.AUDIO - .activePlaylistLoader, - e = xc({ - player: this.player_, - sourceKeySystems: this.source_.keySystems, - media: this.playlists.media(), - audioMedia: e && e.media(), - }); - this.player_.tech_.on("keystatuschange", function (e) { - "output-restricted" === e.status && - t.masterPlaylistController_.blacklistCurrentPlaylist({ - playlist: t.masterPlaylistController_.media(), - message: - "DRM keystatus changed to " + - e.status + - ". Playlist will fail to play. Check for HDCP content.", - blacklistDuration: 1 / 0, - }); - }), - (this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this)), - this.player_.tech_.on("waitingforkey", this.handleWaitingForKey_), - 11 !== tr.browser.IE_VERSION && e - ? this.createKeySessions_() - : this.masterPlaylistController_.sourceUpdater_.initializedEme(); - }), - (t.setupQualityLevels_ = function () { - var i = this, - e = tr.players[this.tech_.options_.playerId]; - e && - e.qualityLevels && - !this.qualityLevels_ && - ((this.qualityLevels_ = e.qualityLevels()), - this.masterPlaylistController_.on( - "selectedinitialmedia", - function () { - var t, e; - (t = i.qualityLevels_), - (e = i).representations().forEach(function (e) { - t.addQualityLevel(e); - }), - kc(t, e.playlists); - }, - ), - this.playlists.on("mediachange", function () { - kc(i.qualityLevels_, i.playlists); - })); - }), - (e.version = function () { - return { - "@videojs/http-streaming": "2.14.2", - "mux.js": "6.0.1", - "mpd-parser": "0.21.1", - "m3u8-parser": "4.7.1", - "aes-decrypter": "3.1.3", - }; - }), - (t.version = function () { - return this.constructor.version(); - }), - (t.canChangeType = function () { - return uc.canChangeType(); - }), - (t.play = function () { - this.masterPlaylistController_.play(); - }), - (t.setCurrentTime = function (e) { - this.masterPlaylistController_.setCurrentTime(e); - }), - (t.duration = function () { - return this.masterPlaylistController_.duration(); - }), - (t.seekable = function () { - return this.masterPlaylistController_.seekable(); - }), - (t.dispose = function () { - this.playbackWatcher_ && this.playbackWatcher_.dispose(), - this.masterPlaylistController_ && - this.masterPlaylistController_.dispose(), - this.qualityLevels_ && this.qualityLevels_.dispose(), - this.player_ && - (delete this.player_.vhs, - delete this.player_.dash, - delete this.player_.hls), - this.tech_ && this.tech_.vhs && delete this.tech_.vhs, - this.tech_ && delete this.tech_.hls, - this.mediaSourceUrl_ && - window.URL.revokeObjectURL && - (window.URL.revokeObjectURL(this.mediaSourceUrl_), - (this.mediaSourceUrl_ = null)), - this.tech_ && - this.tech_.off("waitingforkey", this.handleWaitingForKey_), - r.prototype.dispose.call(this); - }), - (t.convertToProgramTime = function (e, t) { - return ku({ - playlist: this.masterPlaylistController_.media(), - time: e, - callback: t, - }); - }), - (t.seekToProgramTime = function (e, t, i, n) { - return ( - void 0 === i && (i = !0), - void 0 === n && (n = 2), - Cu({ - programTime: e, - playlist: this.masterPlaylistController_.media(), - retryCount: n, - pauseAfterSeek: i, - seekTo: this.options_.seekTo, - tech: this.options_.tech, - callback: t, - }) - ); - }), - e - ); - })(tr.getComponent("Component")), - Lc = { - name: "videojs-http-streaming", - VERSION: "2.14.2", - canHandleSource: function (e, t) { - t = tr.mergeOptions(tr.options, (t = void 0 === t ? {} : t)); - return Lc.canPlayType(e.type, t); - }, - handleSource: function (e, t, i) { - i = tr.mergeOptions(tr.options, (i = void 0 === i ? {} : i)); - return ( - (t.vhs = new Pc(e, t, i)), - tr.hasOwnProperty("hls") || - Object.defineProperty(t, "hls", { - get: function () { - return ( - tr.log.warn( - "player.tech().hls is deprecated. Use player.tech().vhs instead.", - ), - t.vhs - ); - }, - configurable: !0, - }), - (t.vhs.xhr = yu()), - t.vhs.src(e.src, e.type), - t.vhs - ); - }, - canPlayType: function (e, t) { - var i = tr.mergeOptions(tr.options, (t = void 0 === t ? {} : t)), - t = i.vhs, - t = (t = void 0 === t ? {} : t).overrideNative, - t = void 0 === t ? !tr.browser.IS_ANY_SAFARI : t, - i = i.hls, - i = (i = void 0 === i ? {} : i).overrideNative, - i = void 0 !== i && i, - e = vr(e); - return e && (!Ec.supportsTypeNatively(e) || i || t) ? "maybe" : ""; - }, - }; - return ( - gr("avc1.4d400d,mp4a.40.2") && - tr.getTech("Html5").registerSourceHandler(Lc, 0), - (tr.VhsHandler = Pc), - Object.defineProperty(tr, "HlsHandler", { - get: function () { - return ( - tr.log.warn( - "videojs.HlsHandler is deprecated. Use videojs.VhsHandler instead.", - ), - Pc - ); - }, - configurable: !0, - }), - (tr.VhsSourceHandler = Lc), - Object.defineProperty(tr, "HlsSourceHandler", { - get: function () { - return ( - tr.log.warn( - "videojs.HlsSourceHandler is deprecated. Use videojs.VhsSourceHandler instead.", - ), - Lc - ); - }, - configurable: !0, - }), - (tr.Vhs = Ec), - Object.defineProperty(tr, "Hls", { - get: function () { - return ( - tr.log.warn("videojs.Hls is deprecated. Use videojs.Vhs instead."), Ec - ); - }, - configurable: !0, - }), - tr.use || - (tr.registerComponent("Hls", Ec), tr.registerComponent("Vhs", Ec)), - (tr.options.vhs = tr.options.vhs || {}), - (tr.options.hls = tr.options.hls || {}), - (tr.getPlugin && tr.getPlugin("reloadSourceOnError")) || - (tr.registerPlugin || tr.plugin)("reloadSourceOnError", function (e) { - Yl(this, e); - }), - tr - ); -}); diff --git a/docs/index_files/libs/quarto-html/light-border.css b/docs/index_files/libs/quarto-html/light-border.css deleted file mode 100644 index 96de242e..00000000 --- a/docs/index_files/libs/quarto-html/light-border.css +++ /dev/null @@ -1,111 +0,0 @@ -.tippy-box[data-theme~="light-border"] { - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 8, 16, 0.15); - color: #333; - box-shadow: 0 4px 14px -2px rgba(0, 8, 16, 0.08); -} -.tippy-box[data-theme~="light-border"] > .tippy-backdrop { - background-color: #fff; -} -.tippy-box[data-theme~="light-border"] > .tippy-arrow:after, -.tippy-box[data-theme~="light-border"] > .tippy-svg-arrow:after { - content: ""; - position: absolute; - z-index: -1; -} -.tippy-box[data-theme~="light-border"] > .tippy-arrow:after { - border-color: transparent; - border-style: solid; -} -.tippy-box[data-theme~="light-border"][data-placement^="top"] - > .tippy-arrow:before { - border-top-color: #fff; -} -.tippy-box[data-theme~="light-border"][data-placement^="top"] - > .tippy-arrow:after { - border-top-color: rgba(0, 8, 16, 0.2); - border-width: 7px 7px 0; - top: 17px; - left: 1px; -} -.tippy-box[data-theme~="light-border"][data-placement^="top"] - > .tippy-svg-arrow - > svg { - top: 16px; -} -.tippy-box[data-theme~="light-border"][data-placement^="top"] - > .tippy-svg-arrow:after { - top: 17px; -} -.tippy-box[data-theme~="light-border"][data-placement^="bottom"] - > .tippy-arrow:before { - border-bottom-color: #fff; - bottom: 16px; -} -.tippy-box[data-theme~="light-border"][data-placement^="bottom"] - > .tippy-arrow:after { - border-bottom-color: rgba(0, 8, 16, 0.2); - border-width: 0 7px 7px; - bottom: 17px; - left: 1px; -} -.tippy-box[data-theme~="light-border"][data-placement^="bottom"] - > .tippy-svg-arrow - > svg { - bottom: 16px; -} -.tippy-box[data-theme~="light-border"][data-placement^="bottom"] - > .tippy-svg-arrow:after { - bottom: 17px; -} -.tippy-box[data-theme~="light-border"][data-placement^="left"] - > .tippy-arrow:before { - border-left-color: #fff; -} -.tippy-box[data-theme~="light-border"][data-placement^="left"] - > .tippy-arrow:after { - border-left-color: rgba(0, 8, 16, 0.2); - border-width: 7px 0 7px 7px; - left: 17px; - top: 1px; -} -.tippy-box[data-theme~="light-border"][data-placement^="left"] - > .tippy-svg-arrow - > svg { - left: 11px; -} -.tippy-box[data-theme~="light-border"][data-placement^="left"] - > .tippy-svg-arrow:after { - left: 12px; -} -.tippy-box[data-theme~="light-border"][data-placement^="right"] - > .tippy-arrow:before { - border-right-color: #fff; - right: 16px; -} -.tippy-box[data-theme~="light-border"][data-placement^="right"] - > .tippy-arrow:after { - border-width: 7px 7px 7px 0; - right: 17px; - top: 1px; - border-right-color: rgba(0, 8, 16, 0.2); -} -.tippy-box[data-theme~="light-border"][data-placement^="right"] - > .tippy-svg-arrow - > svg { - right: 11px; -} -.tippy-box[data-theme~="light-border"][data-placement^="right"] - > .tippy-svg-arrow:after { - right: 12px; -} -.tippy-box[data-theme~="light-border"] > .tippy-svg-arrow { - fill: #fff; -} -.tippy-box[data-theme~="light-border"] > .tippy-svg-arrow:after { - background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=); - background-size: 16px 6px; - width: 16px; - height: 6px; -} diff --git a/docs/index_files/libs/quarto-html/popper.min.js b/docs/index_files/libs/quarto-html/popper.min.js deleted file mode 100644 index d0ae11b8..00000000 --- a/docs/index_files/libs/quarto-html/popper.min.js +++ /dev/null @@ -1,1306 +0,0 @@ -/** - * @popperjs/core v2.11.7 - MIT License - */ - -!(function (e, t) { - "object" == typeof exports && "undefined" != typeof module - ? t(exports) - : "function" == typeof define && define.amd - ? define(["exports"], t) - : t( - ((e = - "undefined" != typeof globalThis ? globalThis : e || self).Popper = - {}), - ); -})(this, function (e) { - "use strict"; - function t(e) { - if (null == e) return window; - if ("[object Window]" !== e.toString()) { - var t = e.ownerDocument; - return (t && t.defaultView) || window; - } - return e; - } - function n(e) { - return e instanceof t(e).Element || e instanceof Element; - } - function r(e) { - return e instanceof t(e).HTMLElement || e instanceof HTMLElement; - } - function o(e) { - return ( - "undefined" != typeof ShadowRoot && - (e instanceof t(e).ShadowRoot || e instanceof ShadowRoot) - ); - } - var i = Math.max, - a = Math.min, - s = Math.round; - function f() { - var e = navigator.userAgentData; - return null != e && e.brands && Array.isArray(e.brands) - ? e.brands - .map(function (e) { - return e.brand + "/" + e.version; - }) - .join(" ") - : navigator.userAgent; - } - function c() { - return !/^((?!chrome|android).)*safari/i.test(f()); - } - function p(e, o, i) { - void 0 === o && (o = !1), void 0 === i && (i = !1); - var a = e.getBoundingClientRect(), - f = 1, - p = 1; - o && - r(e) && - ((f = (e.offsetWidth > 0 && s(a.width) / e.offsetWidth) || 1), - (p = (e.offsetHeight > 0 && s(a.height) / e.offsetHeight) || 1)); - var u = (n(e) ? t(e) : window).visualViewport, - l = !c() && i, - d = (a.left + (l && u ? u.offsetLeft : 0)) / f, - h = (a.top + (l && u ? u.offsetTop : 0)) / p, - m = a.width / f, - v = a.height / p; - return { - width: m, - height: v, - top: h, - right: d + m, - bottom: h + v, - left: d, - x: d, - y: h, - }; - } - function u(e) { - var n = t(e); - return { scrollLeft: n.pageXOffset, scrollTop: n.pageYOffset }; - } - function l(e) { - return e ? (e.nodeName || "").toLowerCase() : null; - } - function d(e) { - return ((n(e) ? e.ownerDocument : e.document) || window.document) - .documentElement; - } - function h(e) { - return p(d(e)).left + u(e).scrollLeft; - } - function m(e) { - return t(e).getComputedStyle(e); - } - function v(e) { - var t = m(e), - n = t.overflow, - r = t.overflowX, - o = t.overflowY; - return /auto|scroll|overlay|hidden/.test(n + o + r); - } - function y(e, n, o) { - void 0 === o && (o = !1); - var i, - a, - f = r(n), - c = - r(n) && - (function (e) { - var t = e.getBoundingClientRect(), - n = s(t.width) / e.offsetWidth || 1, - r = s(t.height) / e.offsetHeight || 1; - return 1 !== n || 1 !== r; - })(n), - m = d(n), - y = p(e, c, o), - g = { scrollLeft: 0, scrollTop: 0 }, - b = { x: 0, y: 0 }; - return ( - (f || (!f && !o)) && - (("body" !== l(n) || v(m)) && - (g = - (i = n) !== t(i) && r(i) - ? { scrollLeft: (a = i).scrollLeft, scrollTop: a.scrollTop } - : u(i)), - r(n) - ? (((b = p(n, !0)).x += n.clientLeft), (b.y += n.clientTop)) - : m && (b.x = h(m))), - { - x: y.left + g.scrollLeft - b.x, - y: y.top + g.scrollTop - b.y, - width: y.width, - height: y.height, - } - ); - } - function g(e) { - var t = p(e), - n = e.offsetWidth, - r = e.offsetHeight; - return ( - Math.abs(t.width - n) <= 1 && (n = t.width), - Math.abs(t.height - r) <= 1 && (r = t.height), - { x: e.offsetLeft, y: e.offsetTop, width: n, height: r } - ); - } - function b(e) { - return "html" === l(e) - ? e - : e.assignedSlot || e.parentNode || (o(e) ? e.host : null) || d(e); - } - function x(e) { - return ["html", "body", "#document"].indexOf(l(e)) >= 0 - ? e.ownerDocument.body - : r(e) && v(e) - ? e - : x(b(e)); - } - function w(e, n) { - var r; - void 0 === n && (n = []); - var o = x(e), - i = o === (null == (r = e.ownerDocument) ? void 0 : r.body), - a = t(o), - s = i ? [a].concat(a.visualViewport || [], v(o) ? o : []) : o, - f = n.concat(s); - return i ? f : f.concat(w(b(s))); - } - function O(e) { - return ["table", "td", "th"].indexOf(l(e)) >= 0; - } - function j(e) { - return r(e) && "fixed" !== m(e).position ? e.offsetParent : null; - } - function E(e) { - for (var n = t(e), i = j(e); i && O(i) && "static" === m(i).position; ) - i = j(i); - return i && - ("html" === l(i) || ("body" === l(i) && "static" === m(i).position)) - ? n - : i || - (function (e) { - var t = /firefox/i.test(f()); - if (/Trident/i.test(f()) && r(e) && "fixed" === m(e).position) - return null; - var n = b(e); - for ( - o(n) && (n = n.host); - r(n) && ["html", "body"].indexOf(l(n)) < 0; - - ) { - var i = m(n); - if ( - "none" !== i.transform || - "none" !== i.perspective || - "paint" === i.contain || - -1 !== ["transform", "perspective"].indexOf(i.willChange) || - (t && "filter" === i.willChange) || - (t && i.filter && "none" !== i.filter) - ) - return n; - n = n.parentNode; - } - return null; - })(e) || - n; - } - var D = "top", - A = "bottom", - L = "right", - P = "left", - M = "auto", - k = [D, A, L, P], - W = "start", - B = "end", - H = "viewport", - T = "popper", - R = k.reduce(function (e, t) { - return e.concat([t + "-" + W, t + "-" + B]); - }, []), - S = [].concat(k, [M]).reduce(function (e, t) { - return e.concat([t, t + "-" + W, t + "-" + B]); - }, []), - V = [ - "beforeRead", - "read", - "afterRead", - "beforeMain", - "main", - "afterMain", - "beforeWrite", - "write", - "afterWrite", - ]; - function q(e) { - var t = new Map(), - n = new Set(), - r = []; - function o(e) { - n.add(e.name), - [] - .concat(e.requires || [], e.requiresIfExists || []) - .forEach(function (e) { - if (!n.has(e)) { - var r = t.get(e); - r && o(r); - } - }), - r.push(e); - } - return ( - e.forEach(function (e) { - t.set(e.name, e); - }), - e.forEach(function (e) { - n.has(e.name) || o(e); - }), - r - ); - } - function C(e) { - return e.split("-")[0]; - } - function N(e, t) { - var n = t.getRootNode && t.getRootNode(); - if (e.contains(t)) return !0; - if (n && o(n)) { - var r = t; - do { - if (r && e.isSameNode(r)) return !0; - r = r.parentNode || r.host; - } while (r); - } - return !1; - } - function I(e) { - return Object.assign({}, e, { - left: e.x, - top: e.y, - right: e.x + e.width, - bottom: e.y + e.height, - }); - } - function _(e, r, o) { - return r === H - ? I( - (function (e, n) { - var r = t(e), - o = d(e), - i = r.visualViewport, - a = o.clientWidth, - s = o.clientHeight, - f = 0, - p = 0; - if (i) { - (a = i.width), (s = i.height); - var u = c(); - (u || (!u && "fixed" === n)) && - ((f = i.offsetLeft), (p = i.offsetTop)); - } - return { width: a, height: s, x: f + h(e), y: p }; - })(e, o), - ) - : n(r) - ? (function (e, t) { - var n = p(e, !1, "fixed" === t); - return ( - (n.top = n.top + e.clientTop), - (n.left = n.left + e.clientLeft), - (n.bottom = n.top + e.clientHeight), - (n.right = n.left + e.clientWidth), - (n.width = e.clientWidth), - (n.height = e.clientHeight), - (n.x = n.left), - (n.y = n.top), - n - ); - })(r, o) - : I( - (function (e) { - var t, - n = d(e), - r = u(e), - o = null == (t = e.ownerDocument) ? void 0 : t.body, - a = i( - n.scrollWidth, - n.clientWidth, - o ? o.scrollWidth : 0, - o ? o.clientWidth : 0, - ), - s = i( - n.scrollHeight, - n.clientHeight, - o ? o.scrollHeight : 0, - o ? o.clientHeight : 0, - ), - f = -r.scrollLeft + h(e), - c = -r.scrollTop; - return ( - "rtl" === m(o || n).direction && - (f += i(n.clientWidth, o ? o.clientWidth : 0) - a), - { width: a, height: s, x: f, y: c } - ); - })(d(e)), - ); - } - function F(e, t, o, s) { - var f = - "clippingParents" === t - ? (function (e) { - var t = w(b(e)), - o = - ["absolute", "fixed"].indexOf(m(e).position) >= 0 && r(e) - ? E(e) - : e; - return n(o) - ? t.filter(function (e) { - return n(e) && N(e, o) && "body" !== l(e); - }) - : []; - })(e) - : [].concat(t), - c = [].concat(f, [o]), - p = c[0], - u = c.reduce( - function (t, n) { - var r = _(e, n, s); - return ( - (t.top = i(r.top, t.top)), - (t.right = a(r.right, t.right)), - (t.bottom = a(r.bottom, t.bottom)), - (t.left = i(r.left, t.left)), - t - ); - }, - _(e, p, s), - ); - return ( - (u.width = u.right - u.left), - (u.height = u.bottom - u.top), - (u.x = u.left), - (u.y = u.top), - u - ); - } - function U(e) { - return e.split("-")[1]; - } - function z(e) { - return ["top", "bottom"].indexOf(e) >= 0 ? "x" : "y"; - } - function X(e) { - var t, - n = e.reference, - r = e.element, - o = e.placement, - i = o ? C(o) : null, - a = o ? U(o) : null, - s = n.x + n.width / 2 - r.width / 2, - f = n.y + n.height / 2 - r.height / 2; - switch (i) { - case D: - t = { x: s, y: n.y - r.height }; - break; - case A: - t = { x: s, y: n.y + n.height }; - break; - case L: - t = { x: n.x + n.width, y: f }; - break; - case P: - t = { x: n.x - r.width, y: f }; - break; - default: - t = { x: n.x, y: n.y }; - } - var c = i ? z(i) : null; - if (null != c) { - var p = "y" === c ? "height" : "width"; - switch (a) { - case W: - t[c] = t[c] - (n[p] / 2 - r[p] / 2); - break; - case B: - t[c] = t[c] + (n[p] / 2 - r[p] / 2); - } - } - return t; - } - function Y(e) { - return Object.assign({}, { top: 0, right: 0, bottom: 0, left: 0 }, e); - } - function G(e, t) { - return t.reduce(function (t, n) { - return (t[n] = e), t; - }, {}); - } - function J(e, t) { - void 0 === t && (t = {}); - var r = t, - o = r.placement, - i = void 0 === o ? e.placement : o, - a = r.strategy, - s = void 0 === a ? e.strategy : a, - f = r.boundary, - c = void 0 === f ? "clippingParents" : f, - u = r.rootBoundary, - l = void 0 === u ? H : u, - h = r.elementContext, - m = void 0 === h ? T : h, - v = r.altBoundary, - y = void 0 !== v && v, - g = r.padding, - b = void 0 === g ? 0 : g, - x = Y("number" != typeof b ? b : G(b, k)), - w = m === T ? "reference" : T, - O = e.rects.popper, - j = e.elements[y ? w : m], - E = F(n(j) ? j : j.contextElement || d(e.elements.popper), c, l, s), - P = p(e.elements.reference), - M = X({ reference: P, element: O, strategy: "absolute", placement: i }), - W = I(Object.assign({}, O, M)), - B = m === T ? W : P, - R = { - top: E.top - B.top + x.top, - bottom: B.bottom - E.bottom + x.bottom, - left: E.left - B.left + x.left, - right: B.right - E.right + x.right, - }, - S = e.modifiersData.offset; - if (m === T && S) { - var V = S[i]; - Object.keys(R).forEach(function (e) { - var t = [L, A].indexOf(e) >= 0 ? 1 : -1, - n = [D, A].indexOf(e) >= 0 ? "y" : "x"; - R[e] += V[n] * t; - }); - } - return R; - } - var K = { placement: "bottom", modifiers: [], strategy: "absolute" }; - function Q() { - for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) - t[n] = arguments[n]; - return !t.some(function (e) { - return !(e && "function" == typeof e.getBoundingClientRect); - }); - } - function Z(e) { - void 0 === e && (e = {}); - var t = e, - r = t.defaultModifiers, - o = void 0 === r ? [] : r, - i = t.defaultOptions, - a = void 0 === i ? K : i; - return function (e, t, r) { - void 0 === r && (r = a); - var i, - s, - f = { - placement: "bottom", - orderedModifiers: [], - options: Object.assign({}, K, a), - modifiersData: {}, - elements: { reference: e, popper: t }, - attributes: {}, - styles: {}, - }, - c = [], - p = !1, - u = { - state: f, - setOptions: function (r) { - var i = "function" == typeof r ? r(f.options) : r; - l(), - (f.options = Object.assign({}, a, f.options, i)), - (f.scrollParents = { - reference: n(e) - ? w(e) - : e.contextElement - ? w(e.contextElement) - : [], - popper: w(t), - }); - var s, - p, - d = (function (e) { - var t = q(e); - return V.reduce(function (e, n) { - return e.concat( - t.filter(function (e) { - return e.phase === n; - }), - ); - }, []); - })( - ((s = [].concat(o, f.options.modifiers)), - (p = s.reduce(function (e, t) { - var n = e[t.name]; - return ( - (e[t.name] = n - ? Object.assign({}, n, t, { - options: Object.assign({}, n.options, t.options), - data: Object.assign({}, n.data, t.data), - }) - : t), - e - ); - }, {})), - Object.keys(p).map(function (e) { - return p[e]; - })), - ); - return ( - (f.orderedModifiers = d.filter(function (e) { - return e.enabled; - })), - f.orderedModifiers.forEach(function (e) { - var t = e.name, - n = e.options, - r = void 0 === n ? {} : n, - o = e.effect; - if ("function" == typeof o) { - var i = o({ state: f, name: t, instance: u, options: r }), - a = function () {}; - c.push(i || a); - } - }), - u.update() - ); - }, - forceUpdate: function () { - if (!p) { - var e = f.elements, - t = e.reference, - n = e.popper; - if (Q(t, n)) { - (f.rects = { - reference: y(t, E(n), "fixed" === f.options.strategy), - popper: g(n), - }), - (f.reset = !1), - (f.placement = f.options.placement), - f.orderedModifiers.forEach(function (e) { - return (f.modifiersData[e.name] = Object.assign( - {}, - e.data, - )); - }); - for (var r = 0; r < f.orderedModifiers.length; r++) - if (!0 !== f.reset) { - var o = f.orderedModifiers[r], - i = o.fn, - a = o.options, - s = void 0 === a ? {} : a, - c = o.name; - "function" == typeof i && - (f = - i({ state: f, options: s, name: c, instance: u }) || f); - } else (f.reset = !1), (r = -1); - } - } - }, - update: - ((i = function () { - return new Promise(function (e) { - u.forceUpdate(), e(f); - }); - }), - function () { - return ( - s || - (s = new Promise(function (e) { - Promise.resolve().then(function () { - (s = void 0), e(i()); - }); - })), - s - ); - }), - destroy: function () { - l(), (p = !0); - }, - }; - if (!Q(e, t)) return u; - function l() { - c.forEach(function (e) { - return e(); - }), - (c = []); - } - return ( - u.setOptions(r).then(function (e) { - !p && r.onFirstUpdate && r.onFirstUpdate(e); - }), - u - ); - }; - } - var $ = { passive: !0 }; - var ee = { - name: "eventListeners", - enabled: !0, - phase: "write", - fn: function () {}, - effect: function (e) { - var n = e.state, - r = e.instance, - o = e.options, - i = o.scroll, - a = void 0 === i || i, - s = o.resize, - f = void 0 === s || s, - c = t(n.elements.popper), - p = [].concat(n.scrollParents.reference, n.scrollParents.popper); - return ( - a && - p.forEach(function (e) { - e.addEventListener("scroll", r.update, $); - }), - f && c.addEventListener("resize", r.update, $), - function () { - a && - p.forEach(function (e) { - e.removeEventListener("scroll", r.update, $); - }), - f && c.removeEventListener("resize", r.update, $); - } - ); - }, - data: {}, - }; - var te = { - name: "popperOffsets", - enabled: !0, - phase: "read", - fn: function (e) { - var t = e.state, - n = e.name; - t.modifiersData[n] = X({ - reference: t.rects.reference, - element: t.rects.popper, - strategy: "absolute", - placement: t.placement, - }); - }, - data: {}, - }, - ne = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; - function re(e) { - var n, - r = e.popper, - o = e.popperRect, - i = e.placement, - a = e.variation, - f = e.offsets, - c = e.position, - p = e.gpuAcceleration, - u = e.adaptive, - l = e.roundOffsets, - h = e.isFixed, - v = f.x, - y = void 0 === v ? 0 : v, - g = f.y, - b = void 0 === g ? 0 : g, - x = "function" == typeof l ? l({ x: y, y: b }) : { x: y, y: b }; - (y = x.x), (b = x.y); - var w = f.hasOwnProperty("x"), - O = f.hasOwnProperty("y"), - j = P, - M = D, - k = window; - if (u) { - var W = E(r), - H = "clientHeight", - T = "clientWidth"; - if ( - (W === t(r) && - "static" !== m((W = d(r))).position && - "absolute" === c && - ((H = "scrollHeight"), (T = "scrollWidth")), - (W = W), - i === D || ((i === P || i === L) && a === B)) - ) - (M = A), - (b -= - (h && W === k && k.visualViewport - ? k.visualViewport.height - : W[H]) - o.height), - (b *= p ? 1 : -1); - if (i === P || ((i === D || i === A) && a === B)) - (j = L), - (y -= - (h && W === k && k.visualViewport ? k.visualViewport.width : W[T]) - - o.width), - (y *= p ? 1 : -1); - } - var R, - S = Object.assign({ position: c }, u && ne), - V = - !0 === l - ? (function (e, t) { - var n = e.x, - r = e.y, - o = t.devicePixelRatio || 1; - return { x: s(n * o) / o || 0, y: s(r * o) / o || 0 }; - })({ x: y, y: b }, t(r)) - : { x: y, y: b }; - return ( - (y = V.x), - (b = V.y), - p - ? Object.assign( - {}, - S, - (((R = {})[M] = O ? "0" : ""), - (R[j] = w ? "0" : ""), - (R.transform = - (k.devicePixelRatio || 1) <= 1 - ? "translate(" + y + "px, " + b + "px)" - : "translate3d(" + y + "px, " + b + "px, 0)"), - R), - ) - : Object.assign( - {}, - S, - (((n = {})[M] = O ? b + "px" : ""), - (n[j] = w ? y + "px" : ""), - (n.transform = ""), - n), - ) - ); - } - var oe = { - name: "computeStyles", - enabled: !0, - phase: "beforeWrite", - fn: function (e) { - var t = e.state, - n = e.options, - r = n.gpuAcceleration, - o = void 0 === r || r, - i = n.adaptive, - a = void 0 === i || i, - s = n.roundOffsets, - f = void 0 === s || s, - c = { - placement: C(t.placement), - variation: U(t.placement), - popper: t.elements.popper, - popperRect: t.rects.popper, - gpuAcceleration: o, - isFixed: "fixed" === t.options.strategy, - }; - null != t.modifiersData.popperOffsets && - (t.styles.popper = Object.assign( - {}, - t.styles.popper, - re( - Object.assign({}, c, { - offsets: t.modifiersData.popperOffsets, - position: t.options.strategy, - adaptive: a, - roundOffsets: f, - }), - ), - )), - null != t.modifiersData.arrow && - (t.styles.arrow = Object.assign( - {}, - t.styles.arrow, - re( - Object.assign({}, c, { - offsets: t.modifiersData.arrow, - position: "absolute", - adaptive: !1, - roundOffsets: f, - }), - ), - )), - (t.attributes.popper = Object.assign({}, t.attributes.popper, { - "data-popper-placement": t.placement, - })); - }, - data: {}, - }; - var ie = { - name: "applyStyles", - enabled: !0, - phase: "write", - fn: function (e) { - var t = e.state; - Object.keys(t.elements).forEach(function (e) { - var n = t.styles[e] || {}, - o = t.attributes[e] || {}, - i = t.elements[e]; - r(i) && - l(i) && - (Object.assign(i.style, n), - Object.keys(o).forEach(function (e) { - var t = o[e]; - !1 === t - ? i.removeAttribute(e) - : i.setAttribute(e, !0 === t ? "" : t); - })); - }); - }, - effect: function (e) { - var t = e.state, - n = { - popper: { - position: t.options.strategy, - left: "0", - top: "0", - margin: "0", - }, - arrow: { position: "absolute" }, - reference: {}, - }; - return ( - Object.assign(t.elements.popper.style, n.popper), - (t.styles = n), - t.elements.arrow && Object.assign(t.elements.arrow.style, n.arrow), - function () { - Object.keys(t.elements).forEach(function (e) { - var o = t.elements[e], - i = t.attributes[e] || {}, - a = Object.keys( - t.styles.hasOwnProperty(e) ? t.styles[e] : n[e], - ).reduce(function (e, t) { - return (e[t] = ""), e; - }, {}); - r(o) && - l(o) && - (Object.assign(o.style, a), - Object.keys(i).forEach(function (e) { - o.removeAttribute(e); - })); - }); - } - ); - }, - requires: ["computeStyles"], - }; - var ae = { - name: "offset", - enabled: !0, - phase: "main", - requires: ["popperOffsets"], - fn: function (e) { - var t = e.state, - n = e.options, - r = e.name, - o = n.offset, - i = void 0 === o ? [0, 0] : o, - a = S.reduce(function (e, n) { - return ( - (e[n] = (function (e, t, n) { - var r = C(e), - o = [P, D].indexOf(r) >= 0 ? -1 : 1, - i = - "function" == typeof n - ? n(Object.assign({}, t, { placement: e })) - : n, - a = i[0], - s = i[1]; - return ( - (a = a || 0), - (s = (s || 0) * o), - [P, L].indexOf(r) >= 0 ? { x: s, y: a } : { x: a, y: s } - ); - })(n, t.rects, i)), - e - ); - }, {}), - s = a[t.placement], - f = s.x, - c = s.y; - null != t.modifiersData.popperOffsets && - ((t.modifiersData.popperOffsets.x += f), - (t.modifiersData.popperOffsets.y += c)), - (t.modifiersData[r] = a); - }, - }, - se = { left: "right", right: "left", bottom: "top", top: "bottom" }; - function fe(e) { - return e.replace(/left|right|bottom|top/g, function (e) { - return se[e]; - }); - } - var ce = { start: "end", end: "start" }; - function pe(e) { - return e.replace(/start|end/g, function (e) { - return ce[e]; - }); - } - function ue(e, t) { - void 0 === t && (t = {}); - var n = t, - r = n.placement, - o = n.boundary, - i = n.rootBoundary, - a = n.padding, - s = n.flipVariations, - f = n.allowedAutoPlacements, - c = void 0 === f ? S : f, - p = U(r), - u = p - ? s - ? R - : R.filter(function (e) { - return U(e) === p; - }) - : k, - l = u.filter(function (e) { - return c.indexOf(e) >= 0; - }); - 0 === l.length && (l = u); - var d = l.reduce(function (t, n) { - return ( - (t[n] = J(e, { - placement: n, - boundary: o, - rootBoundary: i, - padding: a, - })[C(n)]), - t - ); - }, {}); - return Object.keys(d).sort(function (e, t) { - return d[e] - d[t]; - }); - } - var le = { - name: "flip", - enabled: !0, - phase: "main", - fn: function (e) { - var t = e.state, - n = e.options, - r = e.name; - if (!t.modifiersData[r]._skip) { - for ( - var o = n.mainAxis, - i = void 0 === o || o, - a = n.altAxis, - s = void 0 === a || a, - f = n.fallbackPlacements, - c = n.padding, - p = n.boundary, - u = n.rootBoundary, - l = n.altBoundary, - d = n.flipVariations, - h = void 0 === d || d, - m = n.allowedAutoPlacements, - v = t.options.placement, - y = C(v), - g = - f || - (y === v || !h - ? [fe(v)] - : (function (e) { - if (C(e) === M) return []; - var t = fe(e); - return [pe(e), t, pe(t)]; - })(v)), - b = [v].concat(g).reduce(function (e, n) { - return e.concat( - C(n) === M - ? ue(t, { - placement: n, - boundary: p, - rootBoundary: u, - padding: c, - flipVariations: h, - allowedAutoPlacements: m, - }) - : n, - ); - }, []), - x = t.rects.reference, - w = t.rects.popper, - O = new Map(), - j = !0, - E = b[0], - k = 0; - k < b.length; - k++ - ) { - var B = b[k], - H = C(B), - T = U(B) === W, - R = [D, A].indexOf(H) >= 0, - S = R ? "width" : "height", - V = J(t, { - placement: B, - boundary: p, - rootBoundary: u, - altBoundary: l, - padding: c, - }), - q = R ? (T ? L : P) : T ? A : D; - x[S] > w[S] && (q = fe(q)); - var N = fe(q), - I = []; - if ( - (i && I.push(V[H] <= 0), - s && I.push(V[q] <= 0, V[N] <= 0), - I.every(function (e) { - return e; - })) - ) { - (E = B), (j = !1); - break; - } - O.set(B, I); - } - if (j) - for ( - var _ = function (e) { - var t = b.find(function (t) { - var n = O.get(t); - if (n) - return n.slice(0, e).every(function (e) { - return e; - }); - }); - if (t) return (E = t), "break"; - }, - F = h ? 3 : 1; - F > 0; - F-- - ) { - if ("break" === _(F)) break; - } - t.placement !== E && - ((t.modifiersData[r]._skip = !0), (t.placement = E), (t.reset = !0)); - } - }, - requiresIfExists: ["offset"], - data: { _skip: !1 }, - }; - function de(e, t, n) { - return i(e, a(t, n)); - } - var he = { - name: "preventOverflow", - enabled: !0, - phase: "main", - fn: function (e) { - var t = e.state, - n = e.options, - r = e.name, - o = n.mainAxis, - s = void 0 === o || o, - f = n.altAxis, - c = void 0 !== f && f, - p = n.boundary, - u = n.rootBoundary, - l = n.altBoundary, - d = n.padding, - h = n.tether, - m = void 0 === h || h, - v = n.tetherOffset, - y = void 0 === v ? 0 : v, - b = J(t, { boundary: p, rootBoundary: u, padding: d, altBoundary: l }), - x = C(t.placement), - w = U(t.placement), - O = !w, - j = z(x), - M = "x" === j ? "y" : "x", - k = t.modifiersData.popperOffsets, - B = t.rects.reference, - H = t.rects.popper, - T = - "function" == typeof y - ? y(Object.assign({}, t.rects, { placement: t.placement })) - : y, - R = - "number" == typeof T - ? { mainAxis: T, altAxis: T } - : Object.assign({ mainAxis: 0, altAxis: 0 }, T), - S = t.modifiersData.offset ? t.modifiersData.offset[t.placement] : null, - V = { x: 0, y: 0 }; - if (k) { - if (s) { - var q, - N = "y" === j ? D : P, - I = "y" === j ? A : L, - _ = "y" === j ? "height" : "width", - F = k[j], - X = F + b[N], - Y = F - b[I], - G = m ? -H[_] / 2 : 0, - K = w === W ? B[_] : H[_], - Q = w === W ? -H[_] : -B[_], - Z = t.elements.arrow, - $ = m && Z ? g(Z) : { width: 0, height: 0 }, - ee = t.modifiersData["arrow#persistent"] - ? t.modifiersData["arrow#persistent"].padding - : { top: 0, right: 0, bottom: 0, left: 0 }, - te = ee[N], - ne = ee[I], - re = de(0, B[_], $[_]), - oe = O - ? B[_] / 2 - G - re - te - R.mainAxis - : K - re - te - R.mainAxis, - ie = O - ? -B[_] / 2 + G + re + ne + R.mainAxis - : Q + re + ne + R.mainAxis, - ae = t.elements.arrow && E(t.elements.arrow), - se = ae ? ("y" === j ? ae.clientTop || 0 : ae.clientLeft || 0) : 0, - fe = null != (q = null == S ? void 0 : S[j]) ? q : 0, - ce = F + ie - fe, - pe = de(m ? a(X, F + oe - fe - se) : X, F, m ? i(Y, ce) : Y); - (k[j] = pe), (V[j] = pe - F); - } - if (c) { - var ue, - le = "x" === j ? D : P, - he = "x" === j ? A : L, - me = k[M], - ve = "y" === M ? "height" : "width", - ye = me + b[le], - ge = me - b[he], - be = -1 !== [D, P].indexOf(x), - xe = null != (ue = null == S ? void 0 : S[M]) ? ue : 0, - we = be ? ye : me - B[ve] - H[ve] - xe + R.altAxis, - Oe = be ? me + B[ve] + H[ve] - xe - R.altAxis : ge, - je = - m && be - ? (function (e, t, n) { - var r = de(e, t, n); - return r > n ? n : r; - })(we, me, Oe) - : de(m ? we : ye, me, m ? Oe : ge); - (k[M] = je), (V[M] = je - me); - } - t.modifiersData[r] = V; - } - }, - requiresIfExists: ["offset"], - }; - var me = { - name: "arrow", - enabled: !0, - phase: "main", - fn: function (e) { - var t, - n = e.state, - r = e.name, - o = e.options, - i = n.elements.arrow, - a = n.modifiersData.popperOffsets, - s = C(n.placement), - f = z(s), - c = [P, L].indexOf(s) >= 0 ? "height" : "width"; - if (i && a) { - var p = (function (e, t) { - return Y( - "number" != - typeof (e = - "function" == typeof e - ? e(Object.assign({}, t.rects, { placement: t.placement })) - : e) - ? e - : G(e, k), - ); - })(o.padding, n), - u = g(i), - l = "y" === f ? D : P, - d = "y" === f ? A : L, - h = - n.rects.reference[c] + - n.rects.reference[f] - - a[f] - - n.rects.popper[c], - m = a[f] - n.rects.reference[f], - v = E(i), - y = v ? ("y" === f ? v.clientHeight || 0 : v.clientWidth || 0) : 0, - b = h / 2 - m / 2, - x = p[l], - w = y - u[c] - p[d], - O = y / 2 - u[c] / 2 + b, - j = de(x, O, w), - M = f; - n.modifiersData[r] = (((t = {})[M] = j), (t.centerOffset = j - O), t); - } - }, - effect: function (e) { - var t = e.state, - n = e.options.element, - r = void 0 === n ? "[data-popper-arrow]" : n; - null != r && - ("string" != typeof r || (r = t.elements.popper.querySelector(r))) && - N(t.elements.popper, r) && - (t.elements.arrow = r); - }, - requires: ["popperOffsets"], - requiresIfExists: ["preventOverflow"], - }; - function ve(e, t, n) { - return ( - void 0 === n && (n = { x: 0, y: 0 }), - { - top: e.top - t.height - n.y, - right: e.right - t.width + n.x, - bottom: e.bottom - t.height + n.y, - left: e.left - t.width - n.x, - } - ); - } - function ye(e) { - return [D, L, A, P].some(function (t) { - return e[t] >= 0; - }); - } - var ge = { - name: "hide", - enabled: !0, - phase: "main", - requiresIfExists: ["preventOverflow"], - fn: function (e) { - var t = e.state, - n = e.name, - r = t.rects.reference, - o = t.rects.popper, - i = t.modifiersData.preventOverflow, - a = J(t, { elementContext: "reference" }), - s = J(t, { altBoundary: !0 }), - f = ve(a, r), - c = ve(s, o, i), - p = ye(f), - u = ye(c); - (t.modifiersData[n] = { - referenceClippingOffsets: f, - popperEscapeOffsets: c, - isReferenceHidden: p, - hasPopperEscaped: u, - }), - (t.attributes.popper = Object.assign({}, t.attributes.popper, { - "data-popper-reference-hidden": p, - "data-popper-escaped": u, - })); - }, - }, - be = Z({ defaultModifiers: [ee, te, oe, ie] }), - xe = [ee, te, oe, ie, ae, le, he, me, ge], - we = Z({ defaultModifiers: xe }); - (e.applyStyles = ie), - (e.arrow = me), - (e.computeStyles = oe), - (e.createPopper = we), - (e.createPopperLite = be), - (e.defaultModifiers = xe), - (e.detectOverflow = J), - (e.eventListeners = ee), - (e.flip = le), - (e.hide = ge), - (e.offset = ae), - (e.popperGenerator = Z), - (e.popperOffsets = te), - (e.preventOverflow = he), - Object.defineProperty(e, "__esModule", { value: !0 }); -}); diff --git a/docs/index_files/libs/quarto-html/quarto-html.min.css b/docs/index_files/libs/quarto-html/quarto-html.min.css deleted file mode 100644 index 8b137891..00000000 --- a/docs/index_files/libs/quarto-html/quarto-html.min.css +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/index_files/libs/quarto-html/quarto-syntax-highlighting.css b/docs/index_files/libs/quarto-html/quarto-syntax-highlighting.css deleted file mode 100644 index 5e099e1b..00000000 --- a/docs/index_files/libs/quarto-html/quarto-syntax-highlighting.css +++ /dev/null @@ -1,206 +0,0 @@ -/* quarto syntax highlight colors */ -:root { - --quarto-hl-ot-color: #003b4f; - --quarto-hl-at-color: #657422; - --quarto-hl-ss-color: #20794d; - --quarto-hl-an-color: #5e5e5e; - --quarto-hl-fu-color: #4758ab; - --quarto-hl-st-color: #20794d; - --quarto-hl-cf-color: #003b4f; - --quarto-hl-op-color: #5e5e5e; - --quarto-hl-er-color: #ad0000; - --quarto-hl-bn-color: #ad0000; - --quarto-hl-al-color: #ad0000; - --quarto-hl-va-color: #111111; - --quarto-hl-bu-color: inherit; - --quarto-hl-ex-color: inherit; - --quarto-hl-pp-color: #ad0000; - --quarto-hl-in-color: #5e5e5e; - --quarto-hl-vs-color: #20794d; - --quarto-hl-wa-color: #5e5e5e; - --quarto-hl-do-color: #5e5e5e; - --quarto-hl-im-color: #00769e; - --quarto-hl-ch-color: #20794d; - --quarto-hl-dt-color: #ad0000; - --quarto-hl-fl-color: #ad0000; - --quarto-hl-co-color: #5e5e5e; - --quarto-hl-cv-color: #5e5e5e; - --quarto-hl-cn-color: #8f5902; - --quarto-hl-sc-color: #5e5e5e; - --quarto-hl-dv-color: #ad0000; - --quarto-hl-kw-color: #003b4f; -} - -/* other quarto variables */ -:root { - --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", "Courier New", monospace; -} - -pre > code.sourceCode > span { - color: #003b4f; -} - -code span { - color: #003b4f; -} - -code.sourceCode > span { - color: #003b4f; -} - -div.sourceCode, -div.sourceCode pre.sourceCode { - color: #003b4f; -} - -code span.ot { - color: #003b4f; - font-style: inherit; -} - -code span.at { - color: #657422; - font-style: inherit; -} - -code span.ss { - color: #20794d; - font-style: inherit; -} - -code span.an { - color: #5e5e5e; - font-style: inherit; -} - -code span.fu { - color: #4758ab; - font-style: inherit; -} - -code span.st { - color: #20794d; - font-style: inherit; -} - -code span.cf { - color: #003b4f; - font-weight: bold; - font-style: inherit; -} - -code span.op { - color: #5e5e5e; - font-style: inherit; -} - -code span.er { - color: #ad0000; - font-style: inherit; -} - -code span.bn { - color: #ad0000; - font-style: inherit; -} - -code span.al { - color: #ad0000; - font-style: inherit; -} - -code span.va { - color: #111111; - font-style: inherit; -} - -code span.bu { - font-style: inherit; -} - -code span.ex { - font-style: inherit; -} - -code span.pp { - color: #ad0000; - font-style: inherit; -} - -code span.in { - color: #5e5e5e; - font-style: inherit; -} - -code span.vs { - color: #20794d; - font-style: inherit; -} - -code span.wa { - color: #5e5e5e; - font-style: italic; -} - -code span.do { - color: #5e5e5e; - font-style: italic; -} - -code span.im { - color: #00769e; - font-style: inherit; -} - -code span.ch { - color: #20794d; - font-style: inherit; -} - -code span.dt { - color: #ad0000; - font-style: inherit; -} - -code span.fl { - color: #ad0000; - font-style: inherit; -} - -code span.co { - color: #5e5e5e; - font-style: inherit; -} - -code span.cv { - color: #5e5e5e; - font-style: italic; -} - -code span.cn { - color: #8f5902; - font-style: inherit; -} - -code span.sc { - color: #5e5e5e; - font-style: inherit; -} - -code span.dv { - color: #ad0000; - font-style: inherit; -} - -code span.kw { - color: #003b4f; - font-weight: bold; - font-style: inherit; -} - -.prevent-inlining { - content: " !el.hasAttribute("disabled") && !el.getAttribute("aria-hidden"), - ); - }; - - /** - * Remove roles and attributes from a tab and its content - * @param {Node} tab The tab - * @param {Node} content The tab content - * @param {Object} settings User settings and options - */ - var destroyTab = function (tab, content, settings) { - // Remove the generated ID - if (tab.id.slice(0, settings.idPrefix.length) === settings.idPrefix) { - tab.id = ""; - } - - // remove event listener - tab.removeEventListener("focus", focusHandler, true); - - // Remove roles - tab.removeAttribute("role"); - tab.removeAttribute("aria-controls"); - tab.removeAttribute("aria-selected"); - tab.removeAttribute("tabindex"); - tab.closest("li").removeAttribute("role"); - content.removeAttribute("role"); - content.removeAttribute("aria-labelledby"); - content.removeAttribute("hidden"); - }; - - /** - * Add the required roles and attributes to a tab and its content - * @param {Node} tab The tab - * @param {Node} content The tab content - * @param {Object} settings User settings and options - */ - var setupTab = function (tab, content, settings) { - // Give tab an ID if it doesn't already have one - if (!tab.id) { - tab.id = settings.idPrefix + content.id; - } - - // Add roles - tab.setAttribute("role", "tab"); - tab.setAttribute("aria-controls", content.id); - tab.closest("li").setAttribute("role", "presentation"); - content.setAttribute("role", "tabpanel"); - content.setAttribute("aria-labelledby", tab.id); - - // Add selected state - if (tab.matches(settings.default)) { - tab.setAttribute("aria-selected", "true"); - } else { - tab.setAttribute("aria-selected", "false"); - content.setAttribute("hidden", "hidden"); - } - - // add focus event listender - tab.addEventListener("focus", focusHandler); - }; - - /** - * Hide a tab and its content - * @param {Node} newTab The new tab that's replacing it - */ - var hide = function (newTab) { - // Variables - var tabGroup = newTab.closest('[role="tablist"]'); - if (!tabGroup) return {}; - var tab = tabGroup.querySelector('[role="tab"][aria-selected="true"]'); - if (!tab) return {}; - var content = document.querySelector(tab.hash); - - // Hide the tab - tab.setAttribute("aria-selected", "false"); - - // Hide the content - if (!content) return { previousTab: tab }; - content.setAttribute("hidden", "hidden"); - - // Return the hidden tab and content - return { - previousTab: tab, - previousContent: content, - }; - }; - - /** - * Show a tab and its content - * @param {Node} tab The tab - * @param {Node} content The tab content - */ - var show = function (tab, content) { - tab.setAttribute("aria-selected", "true"); - content.removeAttribute("hidden"); - tab.focus(); - }; - - /** - * Toggle a new tab - * @param {Node} tab The tab to show - */ - var toggle = function (tab) { - // Make sure there's a tab to toggle and it's not already active - if (!tab || tab.getAttribute("aria-selected") == "true") return; - - // Variables - var content = document.querySelector(tab.hash); - if (!content) return; - - // Hide active tab and content - var details = hide(tab); - - // Show new tab and content - show(tab, content); - - // Add event details - details.tab = tab; - details.content = content; - - // Emit a custom event - emitEvent(tab, details); - }; - - /** - * Get all of the tabs in a tablist - * @param {Node} tab A tab from the list - * @return {Object} The tabs and the index of the currently active one - */ - var getTabsMap = function (tab) { - var tabGroup = tab.closest('[role="tablist"]'); - var tabs = tabGroup ? tabGroup.querySelectorAll('[role="tab"]') : null; - if (!tabs) return; - return { - tabs: tabs, - index: Array.prototype.indexOf.call(tabs, tab), - }; - }; - - /** - * Switch the active tab based on keyboard activity - * @param {Node} tab The currently active tab - * @param {Key} key The key that was pressed - */ - var switchTabs = function (tab, key) { - // Get a map of tabs - var map = getTabsMap(tab); - if (!map) return; - var length = map.tabs.length - 1; - var index; - - // Go to previous tab - if (["ArrowUp", "ArrowLeft", "Up", "Left"].indexOf(key) > -1) { - index = map.index < 1 ? length : map.index - 1; - } - - // Go to next tab - else if (["ArrowDown", "ArrowRight", "Down", "Right"].indexOf(key) > -1) { - index = map.index === length ? 0 : map.index + 1; - } - - // Go to home - else if (key === "Home") { - index = 0; - } - - // Go to end - else if (key === "End") { - index = length; - } - - // Toggle the tab - toggle(map.tabs[index]); - }; - - /** - * Create the Constructor object - */ - var Constructor = function (selector, options) { - // - // Variables - // - - var publicAPIs = {}; - var settings, tabWrapper; - - // - // Methods - // - - publicAPIs.destroy = function () { - // Get all tabs - var tabs = tabWrapper.querySelectorAll("a"); - - // Add roles to tabs - Array.prototype.forEach.call(tabs, function (tab) { - // Get the tab content - var content = document.querySelector(tab.hash); - if (!content) return; - - // Setup the tab - destroyTab(tab, content, settings); - }); - - // Remove role from wrapper - tabWrapper.removeAttribute("role"); - - // Remove event listeners - document.documentElement.removeEventListener( - "click", - clickHandler, - true, - ); - tabWrapper.removeEventListener("keydown", keyHandler, true); - - // Reset variables - settings = null; - tabWrapper = null; - }; - - /** - * Setup the DOM with the proper attributes - */ - publicAPIs.setup = function () { - // Variables - tabWrapper = document.querySelector(selector); - if (!tabWrapper) return; - var tabs = tabWrapper.querySelectorAll("a"); - - // Add role to wrapper - tabWrapper.setAttribute("role", "tablist"); - - // Add roles to tabs. provide dynanmic tab indexes if we are within reveal - var contentTabindexes = - window.document.body.classList.contains("reveal-viewport"); - var nextTabindex = 1; - Array.prototype.forEach.call(tabs, function (tab) { - if (contentTabindexes) { - tab.setAttribute("tabindex", "" + nextTabindex++); - } else { - tab.setAttribute("tabindex", "0"); - } - - // Get the tab content - var content = document.querySelector(tab.hash); - if (!content) return; - - // set tab indexes for content - if (contentTabindexes) { - getKeyboardFocusableElements(content).forEach(function (el) { - el.setAttribute("tabindex", "" + nextTabindex++); - }); - } - - // Setup the tab - setupTab(tab, content, settings); - }); - }; - - /** - * Toggle a tab based on an ID - * @param {String|Node} id The tab to toggle - */ - publicAPIs.toggle = function (id) { - // Get the tab - var tab = id; - if (typeof id === "string") { - tab = document.querySelector( - selector + ' [role="tab"][href*="' + id + '"]', - ); - } - - // Toggle the tab - toggle(tab); - }; - - /** - * Handle click events - */ - var clickHandler = function (event) { - // Only run on toggles - var tab = event.target.closest(selector + ' [role="tab"]'); - if (!tab) return; - - // Prevent link behavior - event.preventDefault(); - - // Toggle the tab - toggle(tab); - }; - - /** - * Handle keydown events - */ - var keyHandler = function (event) { - // Only run if a tab is in focus - var tab = document.activeElement; - if (!tab.matches(selector + ' [role="tab"]')) return; - - // Only run for specific keys - if (["Home", "End"].indexOf(event.key) < 0) return; - - // Switch tabs - switchTabs(tab, event.key); - }; - - /** - * Initialize the instance - */ - var init = function () { - // Merge user options with defaults - settings = extend(defaults, options || {}); - - // Setup the DOM - publicAPIs.setup(); - - // Add event listeners - document.documentElement.addEventListener("click", clickHandler, true); - tabWrapper.addEventListener("keydown", keyHandler, true); - }; - - // - // Initialize and return the Public APIs - // - - init(); - return publicAPIs; - }; - - // - // Return the Constructor - // - - return Constructor; - }, -); diff --git a/docs/index_files/libs/quarto-html/tippy.css b/docs/index_files/libs/quarto-html/tippy.css deleted file mode 100644 index 116782ac..00000000 --- a/docs/index_files/libs/quarto-html/tippy.css +++ /dev/null @@ -1,74 +0,0 @@ -.tippy-box[data-animation="fade"][data-state="hidden"] { - opacity: 0; -} -[data-tippy-root] { - max-width: calc(100vw - 10px); -} -.tippy-box { - position: relative; - background-color: #333; - color: #fff; - border-radius: 4px; - font-size: 14px; - line-height: 1.4; - white-space: normal; - outline: 0; - transition-property: transform, visibility, opacity; -} -.tippy-box[data-placement^="top"] > .tippy-arrow { - bottom: 0; -} -.tippy-box[data-placement^="top"] > .tippy-arrow:before { - bottom: -7px; - left: 0; - border-width: 8px 8px 0; - border-top-color: initial; - transform-origin: center top; -} -.tippy-box[data-placement^="bottom"] > .tippy-arrow { - top: 0; -} -.tippy-box[data-placement^="bottom"] > .tippy-arrow:before { - top: -7px; - left: 0; - border-width: 0 8px 8px; - border-bottom-color: initial; - transform-origin: center bottom; -} -.tippy-box[data-placement^="left"] > .tippy-arrow { - right: 0; -} -.tippy-box[data-placement^="left"] > .tippy-arrow:before { - border-width: 8px 0 8px 8px; - border-left-color: initial; - right: -7px; - transform-origin: center left; -} -.tippy-box[data-placement^="right"] > .tippy-arrow { - left: 0; -} -.tippy-box[data-placement^="right"] > .tippy-arrow:before { - left: -7px; - border-width: 8px 8px 8px 0; - border-right-color: initial; - transform-origin: center right; -} -.tippy-box[data-inertia][data-state="visible"] { - transition-timing-function: cubic-bezier(0.54, 1.5, 0.38, 1.11); -} -.tippy-arrow { - width: 16px; - height: 16px; - color: #333; -} -.tippy-arrow:before { - content: ""; - position: absolute; - border-color: transparent; - border-style: solid; -} -.tippy-content { - position: relative; - padding: 5px 9px; - z-index: 1; -} diff --git a/docs/index_files/libs/quarto-html/tippy.umd.min.js b/docs/index_files/libs/quarto-html/tippy.umd.min.js deleted file mode 100644 index 42f818fa..00000000 --- a/docs/index_files/libs/quarto-html/tippy.umd.min.js +++ /dev/null @@ -1,1496 +0,0 @@ -!(function (e, t) { - "object" == typeof exports && "undefined" != typeof module - ? (module.exports = t(require("@popperjs/core"))) - : "function" == typeof define && define.amd - ? define(["@popperjs/core"], t) - : ((e = e || self).tippy = t(e.Popper)); -})(this, function (e) { - "use strict"; - var t = { passive: !0, capture: !0 }, - n = function () { - return document.body; - }; - function r(e, t, n) { - if (Array.isArray(e)) { - var r = e[t]; - return null == r ? (Array.isArray(n) ? n[t] : n) : r; - } - return e; - } - function o(e, t) { - var n = {}.toString.call(e); - return 0 === n.indexOf("[object") && n.indexOf(t + "]") > -1; - } - function i(e, t) { - return "function" == typeof e ? e.apply(void 0, t) : e; - } - function a(e, t) { - return 0 === t - ? e - : function (r) { - clearTimeout(n), - (n = setTimeout(function () { - e(r); - }, t)); - }; - var n; - } - function s(e, t) { - var n = Object.assign({}, e); - return ( - t.forEach(function (e) { - delete n[e]; - }), - n - ); - } - function u(e) { - return [].concat(e); - } - function c(e, t) { - -1 === e.indexOf(t) && e.push(t); - } - function p(e) { - return e.split("-")[0]; - } - function f(e) { - return [].slice.call(e); - } - function l(e) { - return Object.keys(e).reduce(function (t, n) { - return void 0 !== e[n] && (t[n] = e[n]), t; - }, {}); - } - function d() { - return document.createElement("div"); - } - function v(e) { - return ["Element", "Fragment"].some(function (t) { - return o(e, t); - }); - } - function m(e) { - return o(e, "MouseEvent"); - } - function g(e) { - return !(!e || !e._tippy || e._tippy.reference !== e); - } - function h(e) { - return v(e) - ? [e] - : (function (e) { - return o(e, "NodeList"); - })(e) - ? f(e) - : Array.isArray(e) - ? e - : f(document.querySelectorAll(e)); - } - function b(e, t) { - e.forEach(function (e) { - e && (e.style.transitionDuration = t + "ms"); - }); - } - function y(e, t) { - e.forEach(function (e) { - e && e.setAttribute("data-state", t); - }); - } - function w(e) { - var t, - n = u(e)[0]; - return null != n && null != (t = n.ownerDocument) && t.body - ? n.ownerDocument - : document; - } - function E(e, t, n) { - var r = t + "EventListener"; - ["transitionend", "webkitTransitionEnd"].forEach(function (t) { - e[r](t, n); - }); - } - function O(e, t) { - for (var n = t; n; ) { - var r; - if (e.contains(n)) return !0; - n = - null == n.getRootNode || null == (r = n.getRootNode()) - ? void 0 - : r.host; - } - return !1; - } - var x = { isTouch: !1 }, - C = 0; - function T() { - x.isTouch || - ((x.isTouch = !0), - window.performance && document.addEventListener("mousemove", A)); - } - function A() { - var e = performance.now(); - e - C < 20 && - ((x.isTouch = !1), document.removeEventListener("mousemove", A)), - (C = e); - } - function L() { - var e = document.activeElement; - if (g(e)) { - var t = e._tippy; - e.blur && !t.state.isVisible && e.blur(); - } - } - var D = - !!("undefined" != typeof window && "undefined" != typeof document) && - !!window.msCrypto, - R = Object.assign( - { - appendTo: n, - aria: { content: "auto", expanded: "auto" }, - delay: 0, - duration: [300, 250], - getReferenceClientRect: null, - hideOnClick: !0, - ignoreAttributes: !1, - interactive: !1, - interactiveBorder: 2, - interactiveDebounce: 0, - moveTransition: "", - offset: [0, 10], - onAfterUpdate: function () {}, - onBeforeUpdate: function () {}, - onCreate: function () {}, - onDestroy: function () {}, - onHidden: function () {}, - onHide: function () {}, - onMount: function () {}, - onShow: function () {}, - onShown: function () {}, - onTrigger: function () {}, - onUntrigger: function () {}, - onClickOutside: function () {}, - placement: "top", - plugins: [], - popperOptions: {}, - render: null, - showOnCreate: !1, - touch: !0, - trigger: "mouseenter focus", - triggerTarget: null, - }, - { animateFill: !1, followCursor: !1, inlinePositioning: !1, sticky: !1 }, - { - allowHTML: !1, - animation: "fade", - arrow: !0, - content: "", - inertia: !1, - maxWidth: 350, - role: "tooltip", - theme: "", - zIndex: 9999, - }, - ), - k = Object.keys(R); - function P(e) { - var t = (e.plugins || []).reduce(function (t, n) { - var r, - o = n.name, - i = n.defaultValue; - o && (t[o] = void 0 !== e[o] ? e[o] : null != (r = R[o]) ? r : i); - return t; - }, {}); - return Object.assign({}, e, t); - } - function j(e, t) { - var n = Object.assign( - {}, - t, - { content: i(t.content, [e]) }, - t.ignoreAttributes - ? {} - : (function (e, t) { - return ( - t ? Object.keys(P(Object.assign({}, R, { plugins: t }))) : k - ).reduce(function (t, n) { - var r = (e.getAttribute("data-tippy-" + n) || "").trim(); - if (!r) return t; - if ("content" === n) t[n] = r; - else - try { - t[n] = JSON.parse(r); - } catch (e) { - t[n] = r; - } - return t; - }, {}); - })(e, t.plugins), - ); - return ( - (n.aria = Object.assign({}, R.aria, n.aria)), - (n.aria = { - expanded: "auto" === n.aria.expanded ? t.interactive : n.aria.expanded, - content: - "auto" === n.aria.content - ? t.interactive - ? null - : "describedby" - : n.aria.content, - }), - n - ); - } - function M(e, t) { - e.innerHTML = t; - } - function V(e) { - var t = d(); - return ( - !0 === e - ? (t.className = "tippy-arrow") - : ((t.className = "tippy-svg-arrow"), - v(e) ? t.appendChild(e) : M(t, e)), - t - ); - } - function I(e, t) { - v(t.content) - ? (M(e, ""), e.appendChild(t.content)) - : "function" != typeof t.content && - (t.allowHTML ? M(e, t.content) : (e.textContent = t.content)); - } - function S(e) { - var t = e.firstElementChild, - n = f(t.children); - return { - box: t, - content: n.find(function (e) { - return e.classList.contains("tippy-content"); - }), - arrow: n.find(function (e) { - return ( - e.classList.contains("tippy-arrow") || - e.classList.contains("tippy-svg-arrow") - ); - }), - backdrop: n.find(function (e) { - return e.classList.contains("tippy-backdrop"); - }), - }; - } - function N(e) { - var t = d(), - n = d(); - (n.className = "tippy-box"), - n.setAttribute("data-state", "hidden"), - n.setAttribute("tabindex", "-1"); - var r = d(); - function o(n, r) { - var o = S(t), - i = o.box, - a = o.content, - s = o.arrow; - r.theme - ? i.setAttribute("data-theme", r.theme) - : i.removeAttribute("data-theme"), - "string" == typeof r.animation - ? i.setAttribute("data-animation", r.animation) - : i.removeAttribute("data-animation"), - r.inertia - ? i.setAttribute("data-inertia", "") - : i.removeAttribute("data-inertia"), - (i.style.maxWidth = - "number" == typeof r.maxWidth ? r.maxWidth + "px" : r.maxWidth), - r.role ? i.setAttribute("role", r.role) : i.removeAttribute("role"), - (n.content === r.content && n.allowHTML === r.allowHTML) || - I(a, e.props), - r.arrow - ? s - ? n.arrow !== r.arrow && - (i.removeChild(s), i.appendChild(V(r.arrow))) - : i.appendChild(V(r.arrow)) - : s && i.removeChild(s); - } - return ( - (r.className = "tippy-content"), - r.setAttribute("data-state", "hidden"), - I(r, e.props), - t.appendChild(n), - n.appendChild(r), - o(e.props, e.props), - { popper: t, onUpdate: o } - ); - } - N.$$tippy = !0; - var B = 1, - H = [], - U = []; - function _(o, s) { - var v, - g, - h, - C, - T, - A, - L, - k, - M = j(o, Object.assign({}, R, P(l(s)))), - V = !1, - I = !1, - N = !1, - _ = !1, - F = [], - W = a(we, M.interactiveDebounce), - X = B++, - Y = (k = M.plugins).filter(function (e, t) { - return k.indexOf(e) === t; - }), - $ = { - id: X, - reference: o, - popper: d(), - popperInstance: null, - props: M, - state: { - isEnabled: !0, - isVisible: !1, - isDestroyed: !1, - isMounted: !1, - isShown: !1, - }, - plugins: Y, - clearDelayTimeouts: function () { - clearTimeout(v), clearTimeout(g), cancelAnimationFrame(h); - }, - setProps: function (e) { - if ($.state.isDestroyed) return; - ae("onBeforeUpdate", [$, e]), be(); - var t = $.props, - n = j(o, Object.assign({}, t, l(e), { ignoreAttributes: !0 })); - ($.props = n), - he(), - t.interactiveDebounce !== n.interactiveDebounce && - (ce(), (W = a(we, n.interactiveDebounce))); - t.triggerTarget && !n.triggerTarget - ? u(t.triggerTarget).forEach(function (e) { - e.removeAttribute("aria-expanded"); - }) - : n.triggerTarget && o.removeAttribute("aria-expanded"); - ue(), ie(), J && J(t, n); - $.popperInstance && - (Ce(), - Ae().forEach(function (e) { - requestAnimationFrame(e._tippy.popperInstance.forceUpdate); - })); - ae("onAfterUpdate", [$, e]); - }, - setContent: function (e) { - $.setProps({ content: e }); - }, - show: function () { - var e = $.state.isVisible, - t = $.state.isDestroyed, - o = !$.state.isEnabled, - a = x.isTouch && !$.props.touch, - s = r($.props.duration, 0, R.duration); - if (e || t || o || a) return; - if (te().hasAttribute("disabled")) return; - if ((ae("onShow", [$], !1), !1 === $.props.onShow($))) return; - ($.state.isVisible = !0), ee() && (z.style.visibility = "visible"); - ie(), de(), $.state.isMounted || (z.style.transition = "none"); - if (ee()) { - var u = re(), - p = u.box, - f = u.content; - b([p, f], 0); - } - (A = function () { - var e; - if ($.state.isVisible && !_) { - if ( - ((_ = !0), - z.offsetHeight, - (z.style.transition = $.props.moveTransition), - ee() && $.props.animation) - ) { - var t = re(), - n = t.box, - r = t.content; - b([n, r], s), y([n, r], "visible"); - } - se(), - ue(), - c(U, $), - null == (e = $.popperInstance) || e.forceUpdate(), - ae("onMount", [$]), - $.props.animation && - ee() && - (function (e, t) { - me(e, t); - })(s, function () { - ($.state.isShown = !0), ae("onShown", [$]); - }); - } - }), - (function () { - var e, - t = $.props.appendTo, - r = te(); - e = - ($.props.interactive && t === n) || "parent" === t - ? r.parentNode - : i(t, [r]); - e.contains(z) || e.appendChild(z); - ($.state.isMounted = !0), Ce(); - })(); - }, - hide: function () { - var e = !$.state.isVisible, - t = $.state.isDestroyed, - n = !$.state.isEnabled, - o = r($.props.duration, 1, R.duration); - if (e || t || n) return; - if ((ae("onHide", [$], !1), !1 === $.props.onHide($))) return; - ($.state.isVisible = !1), - ($.state.isShown = !1), - (_ = !1), - (V = !1), - ee() && (z.style.visibility = "hidden"); - if ((ce(), ve(), ie(!0), ee())) { - var i = re(), - a = i.box, - s = i.content; - $.props.animation && (b([a, s], o), y([a, s], "hidden")); - } - se(), - ue(), - $.props.animation - ? ee() && - (function (e, t) { - me(e, function () { - !$.state.isVisible && - z.parentNode && - z.parentNode.contains(z) && - t(); - }); - })(o, $.unmount) - : $.unmount(); - }, - hideWithInteractivity: function (e) { - ne().addEventListener("mousemove", W), c(H, W), W(e); - }, - enable: function () { - $.state.isEnabled = !0; - }, - disable: function () { - $.hide(), ($.state.isEnabled = !1); - }, - unmount: function () { - $.state.isVisible && $.hide(); - if (!$.state.isMounted) return; - Te(), - Ae().forEach(function (e) { - e._tippy.unmount(); - }), - z.parentNode && z.parentNode.removeChild(z); - (U = U.filter(function (e) { - return e !== $; - })), - ($.state.isMounted = !1), - ae("onHidden", [$]); - }, - destroy: function () { - if ($.state.isDestroyed) return; - $.clearDelayTimeouts(), - $.unmount(), - be(), - delete o._tippy, - ($.state.isDestroyed = !0), - ae("onDestroy", [$]); - }, - }; - if (!M.render) return $; - var q = M.render($), - z = q.popper, - J = q.onUpdate; - z.setAttribute("data-tippy-root", ""), - (z.id = "tippy-" + $.id), - ($.popper = z), - (o._tippy = $), - (z._tippy = $); - var G = Y.map(function (e) { - return e.fn($); - }), - K = o.hasAttribute("aria-expanded"); - return ( - he(), - ue(), - ie(), - ae("onCreate", [$]), - M.showOnCreate && Le(), - z.addEventListener("mouseenter", function () { - $.props.interactive && $.state.isVisible && $.clearDelayTimeouts(); - }), - z.addEventListener("mouseleave", function () { - $.props.interactive && - $.props.trigger.indexOf("mouseenter") >= 0 && - ne().addEventListener("mousemove", W); - }), - $ - ); - function Q() { - var e = $.props.touch; - return Array.isArray(e) ? e : [e, 0]; - } - function Z() { - return "hold" === Q()[0]; - } - function ee() { - var e; - return !(null == (e = $.props.render) || !e.$$tippy); - } - function te() { - return L || o; - } - function ne() { - var e = te().parentNode; - return e ? w(e) : document; - } - function re() { - return S(z); - } - function oe(e) { - return ($.state.isMounted && !$.state.isVisible) || - x.isTouch || - (C && "focus" === C.type) - ? 0 - : r($.props.delay, e ? 0 : 1, R.delay); - } - function ie(e) { - void 0 === e && (e = !1), - (z.style.pointerEvents = $.props.interactive && !e ? "" : "none"), - (z.style.zIndex = "" + $.props.zIndex); - } - function ae(e, t, n) { - var r; - (void 0 === n && (n = !0), - G.forEach(function (n) { - n[e] && n[e].apply(n, t); - }), - n) && (r = $.props)[e].apply(r, t); - } - function se() { - var e = $.props.aria; - if (e.content) { - var t = "aria-" + e.content, - n = z.id; - u($.props.triggerTarget || o).forEach(function (e) { - var r = e.getAttribute(t); - if ($.state.isVisible) e.setAttribute(t, r ? r + " " + n : n); - else { - var o = r && r.replace(n, "").trim(); - o ? e.setAttribute(t, o) : e.removeAttribute(t); - } - }); - } - } - function ue() { - !K && - $.props.aria.expanded && - u($.props.triggerTarget || o).forEach(function (e) { - $.props.interactive - ? e.setAttribute( - "aria-expanded", - $.state.isVisible && e === te() ? "true" : "false", - ) - : e.removeAttribute("aria-expanded"); - }); - } - function ce() { - ne().removeEventListener("mousemove", W), - (H = H.filter(function (e) { - return e !== W; - })); - } - function pe(e) { - if (!x.isTouch || (!N && "mousedown" !== e.type)) { - var t = (e.composedPath && e.composedPath()[0]) || e.target; - if (!$.props.interactive || !O(z, t)) { - if ( - u($.props.triggerTarget || o).some(function (e) { - return O(e, t); - }) - ) { - if (x.isTouch) return; - if ($.state.isVisible && $.props.trigger.indexOf("click") >= 0) - return; - } else ae("onClickOutside", [$, e]); - !0 === $.props.hideOnClick && - ($.clearDelayTimeouts(), - $.hide(), - (I = !0), - setTimeout(function () { - I = !1; - }), - $.state.isMounted || ve()); - } - } - } - function fe() { - N = !0; - } - function le() { - N = !1; - } - function de() { - var e = ne(); - e.addEventListener("mousedown", pe, !0), - e.addEventListener("touchend", pe, t), - e.addEventListener("touchstart", le, t), - e.addEventListener("touchmove", fe, t); - } - function ve() { - var e = ne(); - e.removeEventListener("mousedown", pe, !0), - e.removeEventListener("touchend", pe, t), - e.removeEventListener("touchstart", le, t), - e.removeEventListener("touchmove", fe, t); - } - function me(e, t) { - var n = re().box; - function r(e) { - e.target === n && (E(n, "remove", r), t()); - } - if (0 === e) return t(); - E(n, "remove", T), E(n, "add", r), (T = r); - } - function ge(e, t, n) { - void 0 === n && (n = !1), - u($.props.triggerTarget || o).forEach(function (r) { - r.addEventListener(e, t, n), - F.push({ node: r, eventType: e, handler: t, options: n }); - }); - } - function he() { - var e; - Z() && - (ge("touchstart", ye, { passive: !0 }), - ge("touchend", Ee, { passive: !0 })), - ((e = $.props.trigger), e.split(/\s+/).filter(Boolean)).forEach( - function (e) { - if ("manual" !== e) - switch ((ge(e, ye), e)) { - case "mouseenter": - ge("mouseleave", Ee); - break; - case "focus": - ge(D ? "focusout" : "blur", Oe); - break; - case "focusin": - ge("focusout", Oe); - } - }, - ); - } - function be() { - F.forEach(function (e) { - var t = e.node, - n = e.eventType, - r = e.handler, - o = e.options; - t.removeEventListener(n, r, o); - }), - (F = []); - } - function ye(e) { - var t, - n = !1; - if ($.state.isEnabled && !xe(e) && !I) { - var r = "focus" === (null == (t = C) ? void 0 : t.type); - (C = e), - (L = e.currentTarget), - ue(), - !$.state.isVisible && - m(e) && - H.forEach(function (t) { - return t(e); - }), - "click" === e.type && - ($.props.trigger.indexOf("mouseenter") < 0 || V) && - !1 !== $.props.hideOnClick && - $.state.isVisible - ? (n = !0) - : Le(e), - "click" === e.type && (V = !n), - n && !r && De(e); - } - } - function we(e) { - var t = e.target, - n = te().contains(t) || z.contains(t); - ("mousemove" === e.type && n) || - ((function (e, t) { - var n = t.clientX, - r = t.clientY; - return e.every(function (e) { - var t = e.popperRect, - o = e.popperState, - i = e.props.interactiveBorder, - a = p(o.placement), - s = o.modifiersData.offset; - if (!s) return !0; - var u = "bottom" === a ? s.top.y : 0, - c = "top" === a ? s.bottom.y : 0, - f = "right" === a ? s.left.x : 0, - l = "left" === a ? s.right.x : 0, - d = t.top - r + u > i, - v = r - t.bottom - c > i, - m = t.left - n + f > i, - g = n - t.right - l > i; - return d || v || m || g; - }); - })( - Ae() - .concat(z) - .map(function (e) { - var t, - n = null == (t = e._tippy.popperInstance) ? void 0 : t.state; - return n - ? { - popperRect: e.getBoundingClientRect(), - popperState: n, - props: M, - } - : null; - }) - .filter(Boolean), - e, - ) && - (ce(), De(e))); - } - function Ee(e) { - xe(e) || - ($.props.trigger.indexOf("click") >= 0 && V) || - ($.props.interactive ? $.hideWithInteractivity(e) : De(e)); - } - function Oe(e) { - ($.props.trigger.indexOf("focusin") < 0 && e.target !== te()) || - ($.props.interactive && - e.relatedTarget && - z.contains(e.relatedTarget)) || - De(e); - } - function xe(e) { - return !!x.isTouch && Z() !== e.type.indexOf("touch") >= 0; - } - function Ce() { - Te(); - var t = $.props, - n = t.popperOptions, - r = t.placement, - i = t.offset, - a = t.getReferenceClientRect, - s = t.moveTransition, - u = ee() ? S(z).arrow : null, - c = a - ? { - getBoundingClientRect: a, - contextElement: a.contextElement || te(), - } - : o, - p = [ - { name: "offset", options: { offset: i } }, - { - name: "preventOverflow", - options: { padding: { top: 2, bottom: 2, left: 5, right: 5 } }, - }, - { name: "flip", options: { padding: 5 } }, - { name: "computeStyles", options: { adaptive: !s } }, - { - name: "$$tippy", - enabled: !0, - phase: "beforeWrite", - requires: ["computeStyles"], - fn: function (e) { - var t = e.state; - if (ee()) { - var n = re().box; - ["placement", "reference-hidden", "escaped"].forEach( - function (e) { - "placement" === e - ? n.setAttribute("data-placement", t.placement) - : t.attributes.popper["data-popper-" + e] - ? n.setAttribute("data-" + e, "") - : n.removeAttribute("data-" + e); - }, - ), - (t.attributes.popper = {}); - } - }, - }, - ]; - ee() && - u && - p.push({ name: "arrow", options: { element: u, padding: 3 } }), - p.push.apply(p, (null == n ? void 0 : n.modifiers) || []), - ($.popperInstance = e.createPopper( - c, - z, - Object.assign({}, n, { - placement: r, - onFirstUpdate: A, - modifiers: p, - }), - )); - } - function Te() { - $.popperInstance && - ($.popperInstance.destroy(), ($.popperInstance = null)); - } - function Ae() { - return f(z.querySelectorAll("[data-tippy-root]")); - } - function Le(e) { - $.clearDelayTimeouts(), e && ae("onTrigger", [$, e]), de(); - var t = oe(!0), - n = Q(), - r = n[0], - o = n[1]; - x.isTouch && "hold" === r && o && (t = o), - t - ? (v = setTimeout(function () { - $.show(); - }, t)) - : $.show(); - } - function De(e) { - if ( - ($.clearDelayTimeouts(), ae("onUntrigger", [$, e]), $.state.isVisible) - ) { - if ( - !( - $.props.trigger.indexOf("mouseenter") >= 0 && - $.props.trigger.indexOf("click") >= 0 && - ["mouseleave", "mousemove"].indexOf(e.type) >= 0 && - V - ) - ) { - var t = oe(!1); - t - ? (g = setTimeout(function () { - $.state.isVisible && $.hide(); - }, t)) - : (h = requestAnimationFrame(function () { - $.hide(); - })); - } - } else ve(); - } - } - function F(e, n) { - void 0 === n && (n = {}); - var r = R.plugins.concat(n.plugins || []); - document.addEventListener("touchstart", T, t), - window.addEventListener("blur", L); - var o = Object.assign({}, n, { plugins: r }), - i = h(e).reduce(function (e, t) { - var n = t && _(t, o); - return n && e.push(n), e; - }, []); - return v(e) ? i[0] : i; - } - (F.defaultProps = R), - (F.setDefaultProps = function (e) { - Object.keys(e).forEach(function (t) { - R[t] = e[t]; - }); - }), - (F.currentInput = x); - var W = Object.assign({}, e.applyStyles, { - effect: function (e) { - var t = e.state, - n = { - popper: { - position: t.options.strategy, - left: "0", - top: "0", - margin: "0", - }, - arrow: { position: "absolute" }, - reference: {}, - }; - Object.assign(t.elements.popper.style, n.popper), - (t.styles = n), - t.elements.arrow && Object.assign(t.elements.arrow.style, n.arrow); - }, - }), - X = { mouseover: "mouseenter", focusin: "focus", click: "click" }; - var Y = { - name: "animateFill", - defaultValue: !1, - fn: function (e) { - var t; - if (null == (t = e.props.render) || !t.$$tippy) return {}; - var n = S(e.popper), - r = n.box, - o = n.content, - i = e.props.animateFill - ? (function () { - var e = d(); - return (e.className = "tippy-backdrop"), y([e], "hidden"), e; - })() - : null; - return { - onCreate: function () { - i && - (r.insertBefore(i, r.firstElementChild), - r.setAttribute("data-animatefill", ""), - (r.style.overflow = "hidden"), - e.setProps({ arrow: !1, animation: "shift-away" })); - }, - onMount: function () { - if (i) { - var e = r.style.transitionDuration, - t = Number(e.replace("ms", "")); - (o.style.transitionDelay = Math.round(t / 10) + "ms"), - (i.style.transitionDuration = e), - y([i], "visible"); - } - }, - onShow: function () { - i && (i.style.transitionDuration = "0ms"); - }, - onHide: function () { - i && y([i], "hidden"); - }, - }; - }, - }; - var $ = { clientX: 0, clientY: 0 }, - q = []; - function z(e) { - var t = e.clientX, - n = e.clientY; - $ = { clientX: t, clientY: n }; - } - var J = { - name: "followCursor", - defaultValue: !1, - fn: function (e) { - var t = e.reference, - n = w(e.props.triggerTarget || t), - r = !1, - o = !1, - i = !0, - a = e.props; - function s() { - return "initial" === e.props.followCursor && e.state.isVisible; - } - function u() { - n.addEventListener("mousemove", f); - } - function c() { - n.removeEventListener("mousemove", f); - } - function p() { - (r = !0), e.setProps({ getReferenceClientRect: null }), (r = !1); - } - function f(n) { - var r = !n.target || t.contains(n.target), - o = e.props.followCursor, - i = n.clientX, - a = n.clientY, - s = t.getBoundingClientRect(), - u = i - s.left, - c = a - s.top; - (!r && e.props.interactive) || - e.setProps({ - getReferenceClientRect: function () { - var e = t.getBoundingClientRect(), - n = i, - r = a; - "initial" === o && ((n = e.left + u), (r = e.top + c)); - var s = "horizontal" === o ? e.top : r, - p = "vertical" === o ? e.right : n, - f = "horizontal" === o ? e.bottom : r, - l = "vertical" === o ? e.left : n; - return { - width: p - l, - height: f - s, - top: s, - right: p, - bottom: f, - left: l, - }; - }, - }); - } - function l() { - e.props.followCursor && - (q.push({ instance: e, doc: n }), - (function (e) { - e.addEventListener("mousemove", z); - })(n)); - } - function d() { - 0 === - (q = q.filter(function (t) { - return t.instance !== e; - })).filter(function (e) { - return e.doc === n; - }).length && - (function (e) { - e.removeEventListener("mousemove", z); - })(n); - } - return { - onCreate: l, - onDestroy: d, - onBeforeUpdate: function () { - a = e.props; - }, - onAfterUpdate: function (t, n) { - var i = n.followCursor; - r || - (void 0 !== i && - a.followCursor !== i && - (d(), - i ? (l(), !e.state.isMounted || o || s() || u()) : (c(), p()))); - }, - onMount: function () { - e.props.followCursor && !o && (i && (f($), (i = !1)), s() || u()); - }, - onTrigger: function (e, t) { - m(t) && ($ = { clientX: t.clientX, clientY: t.clientY }), - (o = "focus" === t.type); - }, - onHidden: function () { - e.props.followCursor && (p(), c(), (i = !0)); - }, - }; - }, - }; - var G = { - name: "inlinePositioning", - defaultValue: !1, - fn: function (e) { - var t, - n = e.reference; - var r = -1, - o = !1, - i = [], - a = { - name: "tippyInlinePositioning", - enabled: !0, - phase: "afterWrite", - fn: function (o) { - var a = o.state; - e.props.inlinePositioning && - (-1 !== i.indexOf(a.placement) && (i = []), - t !== a.placement && - -1 === i.indexOf(a.placement) && - (i.push(a.placement), - e.setProps({ - getReferenceClientRect: function () { - return (function (e) { - return (function (e, t, n, r) { - if (n.length < 2 || null === e) return t; - if (2 === n.length && r >= 0 && n[0].left > n[1].right) - return n[r] || t; - switch (e) { - case "top": - case "bottom": - var o = n[0], - i = n[n.length - 1], - a = "top" === e, - s = o.top, - u = i.bottom, - c = a ? o.left : i.left, - p = a ? o.right : i.right; - return { - top: s, - bottom: u, - left: c, - right: p, - width: p - c, - height: u - s, - }; - case "left": - case "right": - var f = Math.min.apply( - Math, - n.map(function (e) { - return e.left; - }), - ), - l = Math.max.apply( - Math, - n.map(function (e) { - return e.right; - }), - ), - d = n.filter(function (t) { - return "left" === e - ? t.left === f - : t.right === l; - }), - v = d[0].top, - m = d[d.length - 1].bottom; - return { - top: v, - bottom: m, - left: f, - right: l, - width: l - f, - height: m - v, - }; - default: - return t; - } - })( - p(e), - n.getBoundingClientRect(), - f(n.getClientRects()), - r, - ); - })(a.placement); - }, - })), - (t = a.placement)); - }, - }; - function s() { - var t; - o || - ((t = (function (e, t) { - var n; - return { - popperOptions: Object.assign({}, e.popperOptions, { - modifiers: [].concat( - ( - (null == (n = e.popperOptions) ? void 0 : n.modifiers) || [] - ).filter(function (e) { - return e.name !== t.name; - }), - [t], - ), - }), - }; - })(e.props, a)), - (o = !0), - e.setProps(t), - (o = !1)); - } - return { - onCreate: s, - onAfterUpdate: s, - onTrigger: function (t, n) { - if (m(n)) { - var o = f(e.reference.getClientRects()), - i = o.find(function (e) { - return ( - e.left - 2 <= n.clientX && - e.right + 2 >= n.clientX && - e.top - 2 <= n.clientY && - e.bottom + 2 >= n.clientY - ); - }), - a = o.indexOf(i); - r = a > -1 ? a : r; - } - }, - onHidden: function () { - r = -1; - }, - }; - }, - }; - var K = { - name: "sticky", - defaultValue: !1, - fn: function (e) { - var t = e.reference, - n = e.popper; - function r(t) { - return !0 === e.props.sticky || e.props.sticky === t; - } - var o = null, - i = null; - function a() { - var s = r("reference") - ? (e.popperInstance - ? e.popperInstance.state.elements.reference - : t - ).getBoundingClientRect() - : null, - u = r("popper") ? n.getBoundingClientRect() : null; - ((s && Q(o, s)) || (u && Q(i, u))) && - e.popperInstance && - e.popperInstance.update(), - (o = s), - (i = u), - e.state.isMounted && requestAnimationFrame(a); - } - return { - onMount: function () { - e.props.sticky && a(); - }, - }; - }, - }; - function Q(e, t) { - return ( - !e || - !t || - e.top !== t.top || - e.right !== t.right || - e.bottom !== t.bottom || - e.left !== t.left - ); - } - return ( - F.setDefaultProps({ plugins: [Y, J, G, K], render: N }), - (F.createSingleton = function (e, t) { - var n; - void 0 === t && (t = {}); - var r, - o = e, - i = [], - a = [], - c = t.overrides, - p = [], - f = !1; - function l() { - a = o - .map(function (e) { - return u(e.props.triggerTarget || e.reference); - }) - .reduce(function (e, t) { - return e.concat(t); - }, []); - } - function v() { - i = o.map(function (e) { - return e.reference; - }); - } - function m(e) { - o.forEach(function (t) { - e ? t.enable() : t.disable(); - }); - } - function g(e) { - return o.map(function (t) { - var n = t.setProps; - return ( - (t.setProps = function (o) { - n(o), t.reference === r && e.setProps(o); - }), - function () { - t.setProps = n; - } - ); - }); - } - function h(e, t) { - var n = a.indexOf(t); - if (t !== r) { - r = t; - var s = (c || []).concat("content").reduce(function (e, t) { - return (e[t] = o[n].props[t]), e; - }, {}); - e.setProps( - Object.assign({}, s, { - getReferenceClientRect: - "function" == typeof s.getReferenceClientRect - ? s.getReferenceClientRect - : function () { - var e; - return null == (e = i[n]) - ? void 0 - : e.getBoundingClientRect(); - }, - }), - ); - } - } - m(!1), v(), l(); - var b = { - fn: function () { - return { - onDestroy: function () { - m(!0); - }, - onHidden: function () { - r = null; - }, - onClickOutside: function (e) { - e.props.showOnCreate && !f && ((f = !0), (r = null)); - }, - onShow: function (e) { - e.props.showOnCreate && !f && ((f = !0), h(e, i[0])); - }, - onTrigger: function (e, t) { - h(e, t.currentTarget); - }, - }; - }, - }, - y = F( - d(), - Object.assign({}, s(t, ["overrides"]), { - plugins: [b].concat(t.plugins || []), - triggerTarget: a, - popperOptions: Object.assign({}, t.popperOptions, { - modifiers: [].concat( - (null == (n = t.popperOptions) ? void 0 : n.modifiers) || [], - [W], - ), - }), - }), - ), - w = y.show; - (y.show = function (e) { - if ((w(), !r && null == e)) return h(y, i[0]); - if (!r || null != e) { - if ("number" == typeof e) return i[e] && h(y, i[e]); - if (o.indexOf(e) >= 0) { - var t = e.reference; - return h(y, t); - } - return i.indexOf(e) >= 0 ? h(y, e) : void 0; - } - }), - (y.showNext = function () { - var e = i[0]; - if (!r) return y.show(0); - var t = i.indexOf(r); - y.show(i[t + 1] || e); - }), - (y.showPrevious = function () { - var e = i[i.length - 1]; - if (!r) return y.show(e); - var t = i.indexOf(r), - n = i[t - 1] || e; - y.show(n); - }); - var E = y.setProps; - return ( - (y.setProps = function (e) { - (c = e.overrides || c), E(e); - }), - (y.setInstances = function (e) { - m(!0), - p.forEach(function (e) { - return e(); - }), - (o = e), - m(!1), - v(), - l(), - (p = g(y)), - y.setProps({ triggerTarget: a }); - }), - (p = g(y)), - y - ); - }), - (F.delegate = function (e, n) { - var r = [], - o = [], - i = !1, - a = n.target, - c = s(n, ["target"]), - p = Object.assign({}, c, { trigger: "manual", touch: !1 }), - f = Object.assign({ touch: R.touch }, c, { showOnCreate: !0 }), - l = F(e, p); - function d(e) { - if (e.target && !i) { - var t = e.target.closest(a); - if (t) { - var r = - t.getAttribute("data-tippy-trigger") || n.trigger || R.trigger; - if ( - !t._tippy && - !( - ("touchstart" === e.type && "boolean" == typeof f.touch) || - ("touchstart" !== e.type && r.indexOf(X[e.type]) < 0) - ) - ) { - var s = F(t, f); - s && (o = o.concat(s)); - } - } - } - } - function v(e, t, n, o) { - void 0 === o && (o = !1), - e.addEventListener(t, n, o), - r.push({ node: e, eventType: t, handler: n, options: o }); - } - return ( - u(l).forEach(function (e) { - var n = e.destroy, - a = e.enable, - s = e.disable; - (e.destroy = function (e) { - void 0 === e && (e = !0), - e && - o.forEach(function (e) { - e.destroy(); - }), - (o = []), - r.forEach(function (e) { - var t = e.node, - n = e.eventType, - r = e.handler, - o = e.options; - t.removeEventListener(n, r, o); - }), - (r = []), - n(); - }), - (e.enable = function () { - a(), - o.forEach(function (e) { - return e.enable(); - }), - (i = !1); - }), - (e.disable = function () { - s(), - o.forEach(function (e) { - return e.disable(); - }), - (i = !0); - }), - (function (e) { - var n = e.reference; - v(n, "touchstart", d, t), - v(n, "mouseover", d), - v(n, "focusin", d), - v(n, "click", d); - })(e); - }), - l - ); - }), - (F.hideAll = function (e) { - var t = void 0 === e ? {} : e, - n = t.exclude, - r = t.duration; - U.forEach(function (e) { - var t = !1; - if ((n && (t = g(n) ? e.reference === n : e.popper === n.popper), !t)) { - var o = e.props.duration; - e.setProps({ duration: r }), - e.hide(), - e.state.isDestroyed || e.setProps({ duration: o }); - } - }); - }), - (F.roundArrow = - ''), - F - ); -}); diff --git a/docs/index_files/libs/revealjs/dist/reset.css b/docs/index_files/libs/revealjs/dist/reset.css deleted file mode 100644 index e2385390..00000000 --- a/docs/index_files/libs/revealjs/dist/reset.css +++ /dev/null @@ -1,30 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v4.0 | 20180602 - License: none (public domain) -*/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -main, menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, main, menu, nav, section { - display: block; -} \ No newline at end of file diff --git a/docs/index_files/libs/revealjs/dist/reveal.css b/docs/index_files/libs/revealjs/dist/reveal.css deleted file mode 100644 index 5f80fd09..00000000 --- a/docs/index_files/libs/revealjs/dist/reveal.css +++ /dev/null @@ -1,8 +0,0 @@ -/*! -* reveal.js 4.3.1 -* https://revealjs.com -* MIT licensed -* -* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se -*/ -.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-fit-text{display:inline-block;white-space:nowrap}.reveal .r-stack{display:grid}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-vstack video{min-width:0;min-height:0;-o-object-fit:contain;object-fit:contain}.reveal .r-vstack{flex-direction:column;align-items:center;justify-content:center}.reveal .r-hstack{flex-direction:row;align-items:center;justify-content:center}.reveal .items-stretch{align-items:stretch}.reveal .items-start{align-items:flex-start}.reveal .items-center{align-items:center}.reveal .items-end{align-items:flex-end}.reveal .justify-between{justify-content:space-between}.reveal .justify-around{justify-content:space-around}.reveal .justify-start{justify-content:flex-start}.reveal .justify-center{justify-content:center}.reveal .justify-end{justify-content:flex-end}html.reveal-full-page{width:100%;height:100%;height:100vh;height:calc(var(--vh,1vh) * 100);overflow:hidden}.reveal-viewport{height:100%;overflow:hidden;position:relative;line-height:1;margin:0;background-color:#fff;color:#000}.reveal-viewport:-webkit-full-screen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal-viewport:-ms-fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal-viewport:fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal .slides section .fragment{opacity:0;visibility:hidden;transition:all .2s ease;will-change:opacity}.reveal .slides section .fragment.visible{opacity:1;visibility:inherit}.reveal .slides section .fragment.disabled{transition:none}.reveal .slides section .fragment.grow{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow.visible{transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1;visibility:inherit}.reveal .slides section .fragment.shrink.visible{transform:scale(.7)}.reveal .slides section .fragment.zoom-in{transform:scale(.1)}.reveal .slides section .fragment.zoom-in.visible{transform:none}.reveal .slides section .fragment.fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .slides section .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.strike{opacity:1;visibility:inherit}.reveal .slides section .fragment.strike.visible{text-decoration:line-through}.reveal .slides section .fragment.fade-up{transform:translate(0,40px)}.reveal .slides section .fragment.fade-up.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-down{transform:translate(0,-40px)}.reveal .slides section .fragment.fade-down.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-right{transform:translate(-40px,0)}.reveal .slides section .fragment.fade-right.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-left{transform:translate(40px,0)}.reveal .slides section .fragment.fade-left.visible{transform:translate(0,0)}.reveal .slides section .fragment.current-visible,.reveal .slides section .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.current-visible.current-fragment,.reveal .slides section .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-blue,.reveal .slides section .fragment.highlight-current-blue,.reveal .slides section .fragment.highlight-current-green,.reveal .slides section .fragment.highlight-current-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal .slides section .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .slides section .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .slides section .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:"";font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@keyframes bounce-right{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(10px)}30%{transform:translateX(-5px)}}@keyframes bounce-left{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(-10px)}30%{transform:translateX(5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{transform:translateY(0)}20%{transform:translateY(10px)}30%{transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:12px;right:12px;left:auto;z-index:11;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:"";position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:.8em;left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:-.3em;left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:"";display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:100%;background-color:currentColor;transition:transform .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;perspective:600px;perspective-origin:50% 40%}.reveal .slides>section{perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;pointer-events:auto;z-index:10;transform-style:flat;transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none;height:100%}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section:not(.present),.reveal .slides>section>section:not(.present){pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.reveal.cube .slides{perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{transform-origin:100% 0;transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{transform-origin:0 0;transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{transform-origin:0 100%;transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{transform-origin:0 0;transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{perspective-origin:0 50%;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;box-sizing:border-box;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{transform-origin:0 0;transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{transform-origin:100% 0;transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{transform-origin:0 0;transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{transform-origin:0 100%;transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){transform:none;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:rgba(0,0,0,0);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;-o-object-fit:cover;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{-o-object-fit:contain;object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]){transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]){opacity:1}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]){transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]){transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]){transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.reveal [data-auto-animate-target^=unmatched]{will-change:opacity}.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate=running]) [data-auto-animate-target^=unmatched]{opacity:0}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{transform-origin:100% 0}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}.reveal>.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);transition:all .3s ease}.reveal>.overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;transition:all .3s ease}.reveal>.overlay header{position:absolute;left:0;top:0;width:100%;padding:5px;z-index:2;box-sizing:border-box}.reveal>.overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal>.overlay header a:hover{opacity:1}.reveal>.overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal>.overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal>.overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal>.overlay .viewport{position:absolute;display:flex;top:50px;right:0;bottom:0;left:0}.reveal>.overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;transition:all .3s ease}.reveal>.overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal>.overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-preview .x-frame-error{opacity:0;transition:opacity .3s ease .3s}.reveal>.overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal>.overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal>.overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal>.overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal>.overlay.overlay-help .viewport .viewport-inner table td,.reveal>.overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal>.overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .hljs{min-height:100%}.reveal .hljs table{margin:initial}.reveal .hljs-ln-code,.reveal .hljs-ln-numbers{padding:0;border:0}.reveal .hljs-ln-numbers{opacity:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs:not(:first-child).fragment{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.reveal pre[data-auto-animate-target]{overflow:hidden}.reveal pre[data-auto-animate-target] code{height:100%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-origin:50% 0;transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.3333333333%;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:"Speaker notes";display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;max-height:70vh;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:30vh;border:0}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%;max-height:60vh}.reveal.show-notes .speaker-notes{top:100%;height:40vh}.reveal .speaker-notes{font-size:14px}}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}html.print-pdf *{-webkit-print-color-adjust:exact}html.print-pdf{width:100%;height:100%;overflow:visible}html.print-pdf body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.print-pdf .nestedarrow,html.print-pdf .reveal .controls,html.print-pdf .reveal .playback,html.print-pdf .reveal .progress,html.print-pdf .reveal.overview,html.print-pdf .state-background{display:none!important}html.print-pdf .reveal pre code{overflow:hidden!important;font-family:Courier,"Courier New",monospace!important}html.print-pdf .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.print-pdf .reveal .slides{position:static;width:100%!important;height:auto!important;zoom:1!important;pointer-events:initial;left:auto;top:auto;margin:0!important;padding:0!important;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}html.print-pdf .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.print-pdf .reveal .slides section{visibility:visible!important;display:block!important;position:absolute!important;margin:0!important;padding:0!important;box-sizing:border-box!important;min-height:1px;opacity:1!important;transform-style:flat!important;transform:none!important}html.print-pdf .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.print-pdf .reveal img{box-shadow:none}html.print-pdf .reveal .backgrounds{display:none}html.print-pdf .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.print-pdf .reveal.show-notes{max-width:none;max-height:none}html.print-pdf .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.print-pdf .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.print-pdf .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px}html.print-pdf .aria-status{display:none}@media print{html:not(.print-pdf){background:#fff;width:auto;height:auto;overflow:visible}html:not(.print-pdf) body{background:#fff;font-size:20pt;width:auto;height:auto;border:0;margin:0 5%;padding:0;overflow:visible;float:none!important}html:not(.print-pdf) .controls,html:not(.print-pdf) .fork-reveal,html:not(.print-pdf) .nestedarrow,html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .share-reveal,html:not(.print-pdf) .state-background{display:none!important}html:not(.print-pdf) body,html:not(.print-pdf) li,html:not(.print-pdf) p,html:not(.print-pdf) td{font-size:20pt!important;color:#000}html:not(.print-pdf) h1,html:not(.print-pdf) h2,html:not(.print-pdf) h3,html:not(.print-pdf) h4,html:not(.print-pdf) h5,html:not(.print-pdf) h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) h1{font-size:28pt!important}html:not(.print-pdf) h2{font-size:24pt!important}html:not(.print-pdf) h3{font-size:22pt!important}html:not(.print-pdf) h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) h5{font-size:21pt!important}html:not(.print-pdf) h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) a:link,html:not(.print-pdf) a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) div,html:not(.print-pdf) ol,html:not(.print-pdf) p,html:not(.print-pdf) ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .slides{position:static!important;width:auto!important;height:auto!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:0!important;zoom:1!important;transform:none!important;overflow:visible!important;display:block!important;text-align:left!important;perspective:none;perspective-origin:50% 50%}html:not(.print-pdf) .reveal .slides section{visibility:visible!important;position:static!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:60px 20px!important;z-index:auto!important;opacity:1!important;page-break-after:always!important;transform-style:flat!important;transform:none!important;transition:none!important}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}} \ No newline at end of file diff --git a/docs/index_files/libs/revealjs/dist/reveal.esm.js b/docs/index_files/libs/revealjs/dist/reveal.esm.js deleted file mode 100644 index f18da895..00000000 --- a/docs/index_files/libs/revealjs/dist/reveal.esm.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! -* reveal.js 4.3.1 -* https://revealjs.com -* MIT licensed -* -* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se -*/ -const e=(e,t)=>{for(let i in t)e[i]=t[i];return e},t=(e,t)=>Array.from(e.querySelectorAll(t)),i=(e,t,i)=>{i?e.classList.add(t):e.classList.remove(t)},s=e=>{if("string"==typeof e){if("null"===e)return null;if("true"===e)return!0;if("false"===e)return!1;if(e.match(/^-?[\d\.]+$/))return parseFloat(e)}return e},a=(e,t)=>{e.style.transform=t},n=(e,t)=>{let i=e.matches||e.matchesSelector||e.msMatchesSelector;return!(!i||!i.call(e,t))},r=(e,t)=>{if("function"==typeof e.closest)return e.closest(t);for(;e;){if(n(e,t))return e;e=e.parentNode}return null},o=(e,t,i,s="")=>{let a=e.querySelectorAll("."+i);for(let t=0;t{let t=document.createElement("style");return t.type="text/css",e&&e.length>0&&(t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))),document.head.appendChild(t),t},d=()=>{let e={};location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi,(t=>{e[t.split("=").shift()]=t.split("=").pop()}));for(let t in e){let i=e[t];e[t]=s(unescape(i))}return void 0!==e.dependencies&&delete e.dependencies,e},c=(e,t=0)=>{if(e){let i,s=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",i=t-e.parentNode.offsetHeight,e.style.height=s+"px",e.parentNode.style.removeProperty("height"),i}return t},h={mp4:"video/mp4",m4a:"video/mp4",ogv:"video/ogg",mpeg:"video/mpeg",webm:"video/webm"},u=navigator.userAgent,g=/(iphone|ipod|ipad|android)/gi.test(u)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;/chrome/i.test(u)&&/edge/i.test(u);const v=/android/gi.test(u);var p={};Object.defineProperty(p,"__esModule",{value:!0});var m=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e?x(t(document.querySelectorAll(e)),i):x([e],i)[0]}}("undefined"==typeof window?null:window);class b{constructor(e){this.Reveal=e,this.startEmbeddedIframe=this.startEmbeddedIframe.bind(this)}shouldPreload(e){let t=this.Reveal.getConfig().preloadIframes;return"boolean"!=typeof t&&(t=e.hasAttribute("data-preload")),t}load(e,i={}){e.style.display=this.Reveal.getConfig().display,t(e,"img[data-src], video[data-src], audio[data-src], iframe[data-src]").forEach((e=>{("IFRAME"!==e.tagName||this.shouldPreload(e))&&(e.setAttribute("src",e.getAttribute("data-src")),e.setAttribute("data-lazy-loaded",""),e.removeAttribute("data-src"))})),t(e,"video, audio").forEach((e=>{let i=0;t(e,"source[data-src]").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src")),e.removeAttribute("data-src"),e.setAttribute("data-lazy-loaded",""),i+=1})),g&&"VIDEO"===e.tagName&&e.setAttribute("playsinline",""),i>0&&e.load()}));let s=e.slideBackgroundElement;if(s){s.style.display="block";let t=e.slideBackgroundContentElement,a=e.getAttribute("data-background-iframe");if(!1===s.hasAttribute("data-loaded")){s.setAttribute("data-loaded","true");let n=e.getAttribute("data-background-image"),r=e.getAttribute("data-background-video"),o=e.hasAttribute("data-background-video-loop"),l=e.hasAttribute("data-background-video-muted");if(n)/^data:/.test(n.trim())?t.style.backgroundImage=`url(${n.trim()})`:t.style.backgroundImage=n.split(",").map((e=>`url(${encodeURI(e.trim())})`)).join(",");else if(r&&!this.Reveal.isSpeakerNotes()){let e=document.createElement("video");o&&e.setAttribute("loop",""),l&&(e.muted=!0),g&&(e.muted=!0,e.setAttribute("playsinline","")),r.split(",").forEach((t=>{let i=((e="")=>h[e.split(".").pop()])(t);e.innerHTML+=i?``:``})),t.appendChild(e)}else if(a&&!0!==i.excludeIframes){let e=document.createElement("iframe");e.setAttribute("allowfullscreen",""),e.setAttribute("mozallowfullscreen",""),e.setAttribute("webkitallowfullscreen",""),e.setAttribute("allow","autoplay"),e.setAttribute("data-src",a),e.style.width="100%",e.style.height="100%",e.style.maxHeight="100%",e.style.maxWidth="100%",t.appendChild(e)}}let n=t.querySelector("iframe[data-src]");n&&this.shouldPreload(s)&&!/autoplay=(1|true|yes)/gi.test(a)&&n.getAttribute("src")!==a&&n.setAttribute("src",a)}this.layout(e)}layout(e){Array.from(e.querySelectorAll(".r-fit-text")).forEach((e=>{f(e,{minSize:24,maxSize:.8*this.Reveal.getConfig().height,observeMutations:!1,observeWindow:!1})}))}unload(e){e.style.display="none";let i=this.Reveal.getSlideBackground(e);i&&(i.style.display="none",t(i,"iframe[src]").forEach((e=>{e.removeAttribute("src")}))),t(e,"video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]").forEach((e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")})),t(e,"video[data-lazy-loaded] source[src], audio source[src]").forEach((e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")}))}formatEmbeddedContent(){let e=(e,i,s)=>{t(this.Reveal.getSlidesElement(),"iframe["+e+'*="'+i+'"]').forEach((t=>{let i=t.getAttribute(e);i&&-1===i.indexOf(s)&&t.setAttribute(e,i+(/\?/.test(i)?"&":"?")+s)}))};e("src","youtube.com/embed/","enablejsapi=1"),e("data-src","youtube.com/embed/","enablejsapi=1"),e("src","player.vimeo.com/","api=1"),e("data-src","player.vimeo.com/","api=1")}startEmbeddedContent(e){e&&!this.Reveal.isSpeakerNotes()&&(t(e,'img[src$=".gif"]').forEach((e=>{e.setAttribute("src",e.getAttribute("src"))})),t(e,"video, audio").forEach((e=>{if(r(e,".fragment")&&!r(e,".fragment.visible"))return;let t=this.Reveal.getConfig().autoPlayMedia;if("boolean"!=typeof t&&(t=e.hasAttribute("data-autoplay")||!!r(e,".slide-background")),t&&"function"==typeof e.play)if(e.readyState>1)this.startEmbeddedMedia({target:e});else if(g){let t=e.play();t&&"function"==typeof t.catch&&!1===e.controls&&t.catch((()=>{e.controls=!0,e.addEventListener("play",(()=>{e.controls=!1}))}))}else e.removeEventListener("loadeddata",this.startEmbeddedMedia),e.addEventListener("loadeddata",this.startEmbeddedMedia)})),t(e,"iframe[src]").forEach((e=>{r(e,".fragment")&&!r(e,".fragment.visible")||this.startEmbeddedIframe({target:e})})),t(e,"iframe[data-src]").forEach((e=>{r(e,".fragment")&&!r(e,".fragment.visible")||e.getAttribute("src")!==e.getAttribute("data-src")&&(e.removeEventListener("load",this.startEmbeddedIframe),e.addEventListener("load",this.startEmbeddedIframe),e.setAttribute("src",e.getAttribute("data-src")))})))}startEmbeddedMedia(e){let t=!!r(e.target,"html"),i=!!r(e.target,".present");t&&i&&(e.target.currentTime=0,e.target.play()),e.target.removeEventListener("loadeddata",this.startEmbeddedMedia)}startEmbeddedIframe(e){let t=e.target;if(t&&t.contentWindow){let i=!!r(e.target,"html"),s=!!r(e.target,".present");if(i&&s){let e=this.Reveal.getConfig().autoPlayMedia;"boolean"!=typeof e&&(e=t.hasAttribute("data-autoplay")||!!r(t,".slide-background")),/youtube\.com\/embed\//.test(t.getAttribute("src"))&&e?t.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*"):/player\.vimeo\.com\//.test(t.getAttribute("src"))&&e?t.contentWindow.postMessage('{"method":"play"}',"*"):t.contentWindow.postMessage("slide:start","*")}}}stopEmbeddedContent(i,s={}){s=e({unloadIframes:!0},s),i&&i.parentNode&&(t(i,"video, audio").forEach((e=>{e.hasAttribute("data-ignore")||"function"!=typeof e.pause||(e.setAttribute("data-paused-by-reveal",""),e.pause())})),t(i,"iframe").forEach((e=>{e.contentWindow&&e.contentWindow.postMessage("slide:stop","*"),e.removeEventListener("load",this.startEmbeddedIframe)})),t(i,'iframe[src*="youtube.com/embed/"]').forEach((e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")})),t(i,'iframe[src*="player.vimeo.com/"]').forEach((e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"method":"pause"}',"*")})),!0===s.unloadIframes&&t(i,"iframe[data-src]").forEach((e=>{e.setAttribute("src","about:blank"),e.removeAttribute("src")})))}}class y{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="slide-number",this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){let i="none";e.slideNumber&&!this.Reveal.isPrintingPDF()&&("all"===e.showSlideNumber||"speaker"===e.showSlideNumber&&this.Reveal.isSpeakerNotes())&&(i="block"),this.element.style.display=i}update(){this.Reveal.getConfig().slideNumber&&this.element&&(this.element.innerHTML=this.getSlideNumber())}getSlideNumber(e=this.Reveal.getCurrentSlide()){let t,i=this.Reveal.getConfig(),s="h.v";if("function"==typeof i.slideNumber)t=i.slideNumber(e);else{"string"==typeof i.slideNumber&&(s=i.slideNumber),/c/.test(s)||1!==this.Reveal.getHorizontalSlides().length||(s="c");let a=e&&"uncounted"===e.dataset.visibility?0:1;switch(t=[],s){case"c":t.push(this.Reveal.getSlidePastCount(e)+a);break;case"c/t":t.push(this.Reveal.getSlidePastCount(e)+a,"/",this.Reveal.getTotalSlides());break;default:let i=this.Reveal.getIndices(e);t.push(i.h+a);let n="h/v"===s?"/":".";this.Reveal.isVerticalSlide(e)&&t.push(n,i.v+1)}}let a="#"+this.Reveal.location.getHash(e);return this.formatNumber(t[0],t[1],t[2],a)}formatNumber(e,t,i,s="#"+this.Reveal.location.getHash()){return"number"!=typeof i||isNaN(i)?`
    \n\t\t\t\t\t${e}\n\t\t\t\t\t`:`\n\t\t\t\t\t${e}\n\t\t\t\t\t${t}\n\t\t\t\t\t${i}\n\t\t\t\t\t`}destroy(){this.element.remove()}}const w=e=>{let t=e.match(/^#([0-9a-f]{3})$/i);if(t&&t[1])return t=t[1],{r:17*parseInt(t.charAt(0),16),g:17*parseInt(t.charAt(1),16),b:17*parseInt(t.charAt(2),16)};let i=e.match(/^#([0-9a-f]{6})$/i);if(i&&i[1])return i=i[1],{r:parseInt(i.slice(0,2),16),g:parseInt(i.slice(2,4),16),b:parseInt(i.slice(4,6),16)};let s=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(s)return{r:parseInt(s[1],10),g:parseInt(s[2],10),b:parseInt(s[3],10)};let a=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return a?{r:parseInt(a[1],10),g:parseInt(a[2],10),b:parseInt(a[3],10),a:parseFloat(a[4])}:null};class E{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="backgrounds",this.Reveal.getRevealElement().appendChild(this.element)}create(){this.element.innerHTML="",this.element.classList.add("no-transition"),this.Reveal.getHorizontalSlides().forEach((e=>{let i=this.createBackground(e,this.element);t(e,"section").forEach((e=>{this.createBackground(e,i),i.classList.add("stack")}))})),this.Reveal.getConfig().parallaxBackgroundImage?(this.element.style.backgroundImage='url("'+this.Reveal.getConfig().parallaxBackgroundImage+'")',this.element.style.backgroundSize=this.Reveal.getConfig().parallaxBackgroundSize,this.element.style.backgroundRepeat=this.Reveal.getConfig().parallaxBackgroundRepeat,this.element.style.backgroundPosition=this.Reveal.getConfig().parallaxBackgroundPosition,setTimeout((()=>{this.Reveal.getRevealElement().classList.add("has-parallax-background")}),1)):(this.element.style.backgroundImage="",this.Reveal.getRevealElement().classList.remove("has-parallax-background"))}createBackground(e,t){let i=document.createElement("div");i.className="slide-background "+e.className.replace(/present|past|future/,"");let s=document.createElement("div");return s.className="slide-background-content",i.appendChild(s),t.appendChild(i),e.slideBackgroundElement=i,e.slideBackgroundContentElement=s,this.sync(e),i}sync(e){const t=e.slideBackgroundElement,i=e.slideBackgroundContentElement,s={background:e.getAttribute("data-background"),backgroundSize:e.getAttribute("data-background-size"),backgroundImage:e.getAttribute("data-background-image"),backgroundVideo:e.getAttribute("data-background-video"),backgroundIframe:e.getAttribute("data-background-iframe"),backgroundColor:e.getAttribute("data-background-color"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition"),backgroundOpacity:e.getAttribute("data-background-opacity")},a=e.hasAttribute("data-preload");e.classList.remove("has-dark-background"),e.classList.remove("has-light-background"),t.removeAttribute("data-loaded"),t.removeAttribute("data-background-hash"),t.removeAttribute("data-background-size"),t.removeAttribute("data-background-transition"),t.style.backgroundColor="",i.style.backgroundSize="",i.style.backgroundRepeat="",i.style.backgroundPosition="",i.style.backgroundImage="",i.style.opacity="",i.innerHTML="",s.background&&(/^(http|file|\/\/)/gi.test(s.background)||/\.(svg|png|jpg|jpeg|gif|bmp)([?#\s]|$)/gi.test(s.background)?e.setAttribute("data-background-image",s.background):t.style.background=s.background),(s.background||s.backgroundColor||s.backgroundImage||s.backgroundVideo||s.backgroundIframe)&&t.setAttribute("data-background-hash",s.background+s.backgroundSize+s.backgroundImage+s.backgroundVideo+s.backgroundIframe+s.backgroundColor+s.backgroundRepeat+s.backgroundPosition+s.backgroundTransition+s.backgroundOpacity),s.backgroundSize&&t.setAttribute("data-background-size",s.backgroundSize),s.backgroundColor&&(t.style.backgroundColor=s.backgroundColor),s.backgroundTransition&&t.setAttribute("data-background-transition",s.backgroundTransition),a&&t.setAttribute("data-preload",""),s.backgroundSize&&(i.style.backgroundSize=s.backgroundSize),s.backgroundRepeat&&(i.style.backgroundRepeat=s.backgroundRepeat),s.backgroundPosition&&(i.style.backgroundPosition=s.backgroundPosition),s.backgroundOpacity&&(i.style.opacity=s.backgroundOpacity);let n=s.backgroundColor;if(!n||!w(n)){let e=window.getComputedStyle(t);e&&e.backgroundColor&&(n=e.backgroundColor)}if(n){const t=w(n);t&&0!==t.a&&("string"==typeof(r=n)&&(r=w(r)),(r?(299*r.r+587*r.g+114*r.b)/1e3:null)<128?e.classList.add("has-dark-background"):e.classList.add("has-light-background"))}var r}update(e=!1){let i=this.Reveal.getCurrentSlide(),s=this.Reveal.getIndices(),a=null,n=this.Reveal.getConfig().rtl?"future":"past",r=this.Reveal.getConfig().rtl?"past":"future";if(Array.from(this.element.childNodes).forEach(((i,o)=>{i.classList.remove("past","present","future"),os.h?i.classList.add(r):(i.classList.add("present"),a=i),(e||o===s.h)&&t(i,".slide-background").forEach(((e,t)=>{e.classList.remove("past","present","future"),ts.v?e.classList.add("future"):(e.classList.add("present"),o===s.h&&(a=e))}))})),this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),a){this.Reveal.slideContent.startEmbeddedContent(a);let e=a.querySelector(".slide-background-content");if(e){let t=e.style.backgroundImage||"";/\.gif/i.test(t)&&(e.style.backgroundImage="",window.getComputedStyle(e).opacity,e.style.backgroundImage=t)}let t=this.previousBackground?this.previousBackground.getAttribute("data-background-hash"):null,i=a.getAttribute("data-background-hash");i&&i===t&&a!==this.previousBackground&&this.element.classList.add("no-transition"),this.previousBackground=a}i&&["has-light-background","has-dark-background"].forEach((e=>{i.classList.contains(e)?this.Reveal.getRevealElement().classList.add(e):this.Reveal.getRevealElement().classList.remove(e)}),this),setTimeout((()=>{this.element.classList.remove("no-transition")}),1)}updateParallax(){let e=this.Reveal.getIndices();if(this.Reveal.getConfig().parallaxBackgroundImage){let t,i,s=this.Reveal.getHorizontalSlides(),a=this.Reveal.getVerticalSlides(),n=this.element.style.backgroundSize.split(" ");1===n.length?t=i=parseInt(n[0],10):(t=parseInt(n[0],10),i=parseInt(n[1],10));let r,o,l=this.element.offsetWidth,d=s.length;r="number"==typeof this.Reveal.getConfig().parallaxBackgroundHorizontal?this.Reveal.getConfig().parallaxBackgroundHorizontal:d>1?(t-l)/(d-1):0,o=r*e.h*-1;let c,h,u=this.element.offsetHeight,g=a.length;c="number"==typeof this.Reveal.getConfig().parallaxBackgroundVertical?this.Reveal.getConfig().parallaxBackgroundVertical:(i-u)/(g-1),h=g>0?c*e.v:0,this.element.style.backgroundPosition=o+"px "+-h+"px"}}destroy(){this.element.remove()}}const R=/registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/,S=/fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;let A=0;class k{constructor(e){this.Reveal=e}run(e,t){this.reset();let i=this.Reveal.getSlides(),s=i.indexOf(t),a=i.indexOf(e);if(e.hasAttribute("data-auto-animate")&&t.hasAttribute("data-auto-animate")&&e.getAttribute("data-auto-animate-id")===t.getAttribute("data-auto-animate-id")&&!(s>a?t:e).hasAttribute("data-auto-animate-restart")){this.autoAnimateStyleSheet=this.autoAnimateStyleSheet||l();let i=this.getAutoAnimateOptions(t);e.dataset.autoAnimate="pending",t.dataset.autoAnimate="pending",i.slideDirection=s>a?"forward":"backward";let n=this.getAutoAnimatableElements(e,t).map((e=>this.autoAnimateElements(e.from,e.to,e.options||{},i,A++)));if("false"!==t.dataset.autoAnimateUnmatched&&!0===this.Reveal.getConfig().autoAnimateUnmatched){let e=.8*i.duration,s=.2*i.duration;this.getUnmatchedAutoAnimateElements(t).forEach((e=>{let t=this.getAutoAnimateOptions(e,i),s="unmatched";t.duration===i.duration&&t.delay===i.delay||(s="unmatched-"+A++,n.push(`[data-auto-animate="running"] [data-auto-animate-target="${s}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)),e.dataset.autoAnimateTarget=s}),this),n.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${s}s; }`)}this.autoAnimateStyleSheet.innerHTML=n.join(""),requestAnimationFrame((()=>{this.autoAnimateStyleSheet&&(getComputedStyle(this.autoAnimateStyleSheet).fontWeight,t.dataset.autoAnimate="running")})),this.Reveal.dispatchEvent({type:"autoanimate",data:{fromSlide:e,toSlide:t,sheet:this.autoAnimateStyleSheet}})}}reset(){t(this.Reveal.getRevealElement(),'[data-auto-animate]:not([data-auto-animate=""])').forEach((e=>{e.dataset.autoAnimate=""})),t(this.Reveal.getRevealElement(),"[data-auto-animate-target]").forEach((e=>{delete e.dataset.autoAnimateTarget})),this.autoAnimateStyleSheet&&this.autoAnimateStyleSheet.parentNode&&(this.autoAnimateStyleSheet.parentNode.removeChild(this.autoAnimateStyleSheet),this.autoAnimateStyleSheet=null)}autoAnimateElements(e,t,i,s,a){e.dataset.autoAnimateTarget="",t.dataset.autoAnimateTarget=a;let n=this.getAutoAnimateOptions(t,s);void 0!==i.delay&&(n.delay=i.delay),void 0!==i.duration&&(n.duration=i.duration),void 0!==i.easing&&(n.easing=i.easing);let r=this.getAutoAnimatableProperties("from",e,i),o=this.getAutoAnimatableProperties("to",t,i);if(t.classList.contains("fragment")&&(delete o.styles.opacity,e.classList.contains("fragment"))){(e.className.match(S)||[""])[0]===(t.className.match(S)||[""])[0]&&"forward"===s.slideDirection&&t.classList.add("visible","disabled")}if(!1!==i.translate||!1!==i.scale){let e=this.Reveal.getScale(),t={x:(r.x-o.x)/e,y:(r.y-o.y)/e,scaleX:r.width/o.width,scaleY:r.height/o.height};t.x=Math.round(1e3*t.x)/1e3,t.y=Math.round(1e3*t.y)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3;let s=!1!==i.translate&&(0!==t.x||0!==t.y),a=!1!==i.scale&&(0!==t.scaleX||0!==t.scaleY);if(s||a){let e=[];s&&e.push(`translate(${t.x}px, ${t.y}px)`),a&&e.push(`scale(${t.scaleX}, ${t.scaleY})`),r.styles.transform=e.join(" "),r.styles["transform-origin"]="top left",o.styles.transform="none"}}for(let e in o.styles){const t=o.styles[e],i=r.styles[e];t===i?delete o.styles[e]:(!0===t.explicitValue&&(o.styles[e]=t.value),!0===i.explicitValue&&(r.styles[e]=i.value))}let l="",d=Object.keys(o.styles);if(d.length>0){r.styles.transition="none",o.styles.transition=`all ${n.duration}s ${n.easing} ${n.delay}s`,o.styles["transition-property"]=d.join(", "),o.styles["will-change"]=d.join(", "),l='[data-auto-animate-target="'+a+'"] {'+Object.keys(r.styles).map((e=>e+": "+r.styles[e]+" !important;")).join("")+'}[data-auto-animate="running"] [data-auto-animate-target="'+a+'"] {'+Object.keys(o.styles).map((e=>e+": "+o.styles[e]+" !important;")).join("")+"}"}return l}getAutoAnimateOptions(t,i){let s={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(s=e(s,i),t.parentNode){let e=r(t.parentNode,"[data-auto-animate-target]");e&&(s=this.getAutoAnimateOptions(e,s))}return t.dataset.autoAnimateEasing&&(s.easing=t.dataset.autoAnimateEasing),t.dataset.autoAnimateDuration&&(s.duration=parseFloat(t.dataset.autoAnimateDuration)),t.dataset.autoAnimateDelay&&(s.delay=parseFloat(t.dataset.autoAnimateDelay)),s}getAutoAnimatableProperties(e,t,i){let s=this.Reveal.getConfig(),a={styles:[]};if(!1!==i.translate||!1!==i.scale){let e;if("function"==typeof i.measure)e=i.measure(t);else if(s.center)e=t.getBoundingClientRect();else{let i=this.Reveal.getScale();e={x:t.offsetLeft*i,y:t.offsetTop*i,width:t.offsetWidth*i,height:t.offsetHeight*i}}a.x=e.x,a.y=e.y,a.width=e.width,a.height=e.height}const n=getComputedStyle(t);return(i.styles||s.autoAnimateStyles).forEach((t=>{let i;"string"==typeof t&&(t={property:t}),i=void 0!==t.from&&"from"===e?{value:t.from,explicitValue:!0}:void 0!==t.to&&"to"===e?{value:t.to,explicitValue:!0}:n[t.property],""!==i&&(a.styles[t.property]=i)})),a}getAutoAnimatableElements(e,t){let i=("function"==typeof this.Reveal.getConfig().autoAnimateMatcher?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),s=[];return i.filter(((e,t)=>{if(-1===s.indexOf(e.to))return s.push(e.to),!0}))}getAutoAnimatePairs(e,t){let i=[];const s="h1, h2, h3, h4, h5, h6, p, li";return this.findAutoAnimateMatches(i,e,t,"[data-id]",(e=>e.nodeName+":::"+e.getAttribute("data-id"))),this.findAutoAnimateMatches(i,e,t,s,(e=>e.nodeName+":::"+e.innerText)),this.findAutoAnimateMatches(i,e,t,"img, video, iframe",(e=>e.nodeName+":::"+(e.getAttribute("src")||e.getAttribute("data-src")))),this.findAutoAnimateMatches(i,e,t,"pre",(e=>e.nodeName+":::"+e.innerText)),i.forEach((e=>{n(e.from,s)?e.options={scale:!1}:n(e.from,"pre")&&(e.options={scale:!1,styles:["width","height"]},this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-code",(e=>e.textContent),{scale:!1,styles:[],measure:this.getLocalBoundingBox.bind(this)}),this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-line[data-line-number]",(e=>e.getAttribute("data-line-number")),{scale:!1,styles:["width"],measure:this.getLocalBoundingBox.bind(this)}))}),this),i}getLocalBoundingBox(e){const t=this.Reveal.getScale();return{x:Math.round(e.offsetLeft*t*100)/100,y:Math.round(e.offsetTop*t*100)/100,width:Math.round(e.offsetWidth*t*100)/100,height:Math.round(e.offsetHeight*t*100)/100}}findAutoAnimateMatches(e,t,i,s,a,n){let r={},o={};[].slice.call(t.querySelectorAll(s)).forEach(((e,t)=>{const i=a(e);"string"==typeof i&&i.length&&(r[i]=r[i]||[],r[i].push(e))})),[].slice.call(i.querySelectorAll(s)).forEach(((t,i)=>{const s=a(t);let l;if(o[s]=o[s]||[],o[s].push(t),r[s]){const e=o[s].length-1,t=r[s].length-1;r[s][e]?(l=r[s][e],r[s][e]=null):r[s][t]&&(l=r[s][t],r[s][t]=null)}l&&e.push({from:l,to:t,options:n})}))}getUnmatchedAutoAnimateElements(e){return[].slice.call(e.children).reduce(((e,t)=>{const i=t.querySelector("[data-auto-animate-target]");return t.hasAttribute("data-auto-animate-target")||i||e.push(t),t.querySelector("[data-auto-animate-target]")&&(e=e.concat(this.getUnmatchedAutoAnimateElements(t))),e}),[])}}class L{constructor(e){this.Reveal=e}configure(e,t){!1===e.fragments?this.disable():!1===t.fragments&&this.enable()}disable(){t(this.Reveal.getSlidesElement(),".fragment").forEach((e=>{e.classList.add("visible"),e.classList.remove("current-fragment")}))}enable(){t(this.Reveal.getSlidesElement(),".fragment").forEach((e=>{e.classList.remove("visible"),e.classList.remove("current-fragment")}))}availableRoutes(){let e=this.Reveal.getCurrentSlide();if(e&&this.Reveal.getConfig().fragments){let t=e.querySelectorAll(".fragment:not(.disabled)"),i=e.querySelectorAll(".fragment:not(.disabled):not(.visible)");return{prev:t.length-i.length>0,next:!!i.length}}return{prev:!1,next:!1}}sort(e,t=!1){e=Array.from(e);let i=[],s=[],a=[];e.forEach((e=>{if(e.hasAttribute("data-fragment-index")){let t=parseInt(e.getAttribute("data-fragment-index"),10);i[t]||(i[t]=[]),i[t].push(e)}else s.push([e])})),i=i.concat(s);let n=0;return i.forEach((e=>{e.forEach((e=>{a.push(e),e.setAttribute("data-fragment-index",n)})),n++})),!0===t?i:a}sortAll(){this.Reveal.getHorizontalSlides().forEach((e=>{let i=t(e,"section");i.forEach(((e,t)=>{this.sort(e.querySelectorAll(".fragment"))}),this),0===i.length&&this.sort(e.querySelectorAll(".fragment"))}))}update(e,t){let i={shown:[],hidden:[]},s=this.Reveal.getCurrentSlide();if(s&&this.Reveal.getConfig().fragments&&(t=t||this.sort(s.querySelectorAll(".fragment"))).length){let a=0;if("number"!=typeof e){let t=this.sort(s.querySelectorAll(".fragment.visible")).pop();t&&(e=parseInt(t.getAttribute("data-fragment-index")||0,10))}Array.from(t).forEach(((t,s)=>{if(t.hasAttribute("data-fragment-index")&&(s=parseInt(t.getAttribute("data-fragment-index"),10)),a=Math.max(a,s),s<=e){let a=t.classList.contains("visible");t.classList.add("visible"),t.classList.remove("current-fragment"),s===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add("current-fragment"),this.Reveal.slideContent.startEmbeddedContent(t)),a||(i.shown.push(t),this.Reveal.dispatchEvent({target:t,type:"visible",bubbles:!1}))}else{let e=t.classList.contains("visible");t.classList.remove("visible"),t.classList.remove("current-fragment"),e&&(this.Reveal.slideContent.stopEmbeddedContent(t),i.hidden.push(t),this.Reveal.dispatchEvent({target:t,type:"hidden",bubbles:!1}))}})),e="number"==typeof e?e:-1,e=Math.max(Math.min(e,a),-1),s.setAttribute("data-fragment",e)}return i}sync(e=this.Reveal.getCurrentSlide()){return this.sort(e.querySelectorAll(".fragment"))}goto(e,t=0){let i=this.Reveal.getCurrentSlide();if(i&&this.Reveal.getConfig().fragments){let s=this.sort(i.querySelectorAll(".fragment:not(.disabled)"));if(s.length){if("number"!=typeof e){let t=this.sort(i.querySelectorAll(".fragment:not(.disabled).visible")).pop();e=t?parseInt(t.getAttribute("data-fragment-index")||0,10):-1}e+=t;let a=this.update(e,s);return a.hidden.length&&this.Reveal.dispatchEvent({type:"fragmenthidden",data:{fragment:a.hidden[0],fragments:a.hidden}}),a.shown.length&&this.Reveal.dispatchEvent({type:"fragmentshown",data:{fragment:a.shown[0],fragments:a.shown}}),this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!a.shown.length&&!a.hidden.length)}}return!1}next(){return this.goto(null,1)}prev(){return this.goto(null,-1)}}class C{constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked=this.onSlideClicked.bind(this)}activate(){if(this.Reveal.getConfig().overview&&!this.isActive()){this.active=!0,this.Reveal.getRevealElement().classList.add("overview"),this.Reveal.cancelAutoSlide(),this.Reveal.getSlidesElement().appendChild(this.Reveal.getBackgroundsElement()),t(this.Reveal.getRevealElement(),".slides section").forEach((e=>{e.classList.contains("stack")||e.addEventListener("click",this.onSlideClicked,!0)}));const e=70,i=this.Reveal.getComputedSlideSize();this.overviewSlideWidth=i.width+e,this.overviewSlideHeight=i.height+e,this.Reveal.getConfig().rtl&&(this.overviewSlideWidth=-this.overviewSlideWidth),this.Reveal.updateSlidesVisibility(),this.layout(),this.update(),this.Reveal.layout();const s=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:"overviewshown",data:{indexh:s.h,indexv:s.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach(((e,i)=>{e.setAttribute("data-index-h",i),a(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),e.classList.contains("stack")&&t(e,"section").forEach(((e,t)=>{e.setAttribute("data-index-h",i),e.setAttribute("data-index-v",t),a(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))})),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach(((e,i)=>{a(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),t(e,".slide-background").forEach(((e,t)=>{a(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))}))}update(){const e=Math.min(window.innerWidth,window.innerHeight),t=Math.max(e/5,150)/e,i=this.Reveal.getIndices();this.Reveal.transformSlides({overview:["scale("+t+")","translateX("+-i.h*this.overviewSlideWidth+"px)","translateY("+-i.v*this.overviewSlideHeight+"px)"].join(" ")})}deactivate(){if(this.Reveal.getConfig().overview){this.active=!1,this.Reveal.getRevealElement().classList.remove("overview"),this.Reveal.getRevealElement().classList.add("overview-deactivating"),setTimeout((()=>{this.Reveal.getRevealElement().classList.remove("overview-deactivating")}),1),this.Reveal.getRevealElement().appendChild(this.Reveal.getBackgroundsElement()),t(this.Reveal.getRevealElement(),".slides section").forEach((e=>{a(e,""),e.removeEventListener("click",this.onSlideClicked,!0)})),t(this.Reveal.getBackgroundsElement(),".slide-background").forEach((e=>{a(e,"")})),this.Reveal.transformSlides({overview:""});const e=this.Reveal.getIndices();this.Reveal.slide(e.h,e.v),this.Reveal.layout(),this.Reveal.cueAutoSlide(),this.Reveal.dispatchEvent({type:"overviewhidden",data:{indexh:e.h,indexv:e.v,currentSlide:this.Reveal.getCurrentSlide()}})}}toggle(e){"boolean"==typeof e?e?this.activate():this.deactivate():this.isActive()?this.deactivate():this.activate()}isActive(){return this.active}onSlideClicked(e){if(this.isActive()){e.preventDefault();let t=e.target;for(;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(this.deactivate(),t.nodeName.match(/section/gi))){let e=parseInt(t.getAttribute("data-index-h"),10),i=parseInt(t.getAttribute("data-index-v"),10);this.Reveal.slide(e,i)}}}}class x{constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={},this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onDocumentKeyPress=this.onDocumentKeyPress.bind(this)}configure(e,t){"linear"===e.navigationMode?(this.shortcuts["→ , ↓ , SPACE , N , L , J"]="Next slide",this.shortcuts["← , ↑ , P , H , K"]="Previous slide"):(this.shortcuts["N , SPACE"]="Next slide",this.shortcuts["P , Shift SPACE"]="Previous slide",this.shortcuts["← , H"]="Navigate left",this.shortcuts["→ , L"]="Navigate right",this.shortcuts["↑ , K"]="Navigate up",this.shortcuts["↓ , J"]="Navigate down"),this.shortcuts["Alt + ←/↑/→/↓"]="Navigate without fragments",this.shortcuts["Shift + ←/↑/→/↓"]="Jump to first/last slide",this.shortcuts["B , ."]="Pause",this.shortcuts.F="Fullscreen",this.shortcuts["ESC, O"]="Slide overview"}bind(){document.addEventListener("keydown",this.onDocumentKeyDown,!1),document.addEventListener("keypress",this.onDocumentKeyPress,!1)}unbind(){document.removeEventListener("keydown",this.onDocumentKeyDown,!1),document.removeEventListener("keypress",this.onDocumentKeyPress,!1)}addKeyBinding(e,t){"object"==typeof e&&e.keyCode?this.bindings[e.keyCode]={callback:t,key:e.key,description:e.description}:this.bindings[e]={callback:t,key:null,description:null}}removeKeyBinding(e){delete this.bindings[e]}triggerKey(e){this.onDocumentKeyDown({keyCode:e})}registerKeyboardShortcut(e,t){this.shortcuts[e]=t}getShortcuts(){return this.shortcuts}getBindings(){return this.bindings}onDocumentKeyPress(e){e.shiftKey&&63===e.charCode&&this.Reveal.toggleHelp()}onDocumentKeyDown(e){let t=this.Reveal.getConfig();if("function"==typeof t.keyboardCondition&&!1===t.keyboardCondition(e))return!0;if("focused"===t.keyboardCondition&&!this.Reveal.isFocused())return!0;let i=e.keyCode,s=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);let a=document.activeElement&&!0===document.activeElement.isContentEditable,n=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),r=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),o=!(-1!==[32,37,38,39,40,78,80].indexOf(e.keyCode)&&e.shiftKey||e.altKey)&&(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey);if(a||n||r||o)return;let l,d=[66,86,190,191];if("object"==typeof t.keyboard)for(l in t.keyboard)"togglePause"===t.keyboard[l]&&d.push(parseInt(l,10));if(this.Reveal.isPaused()&&-1===d.indexOf(i))return!1;let c="linear"===t.navigationMode||!this.Reveal.hasHorizontalSlides()||!this.Reveal.hasVerticalSlides(),h=!1;if("object"==typeof t.keyboard)for(l in t.keyboard)if(parseInt(l,10)===i){let i=t.keyboard[l];"function"==typeof i?i.apply(null,[e]):"string"==typeof i&&"function"==typeof this.Reveal[i]&&this.Reveal[i].call(),h=!0}if(!1===h)for(l in this.bindings)if(parseInt(l,10)===i){let t=this.bindings[l].callback;"function"==typeof t?t.apply(null,[e]):"string"==typeof t&&"function"==typeof this.Reveal[t]&&this.Reveal[t].call(),h=!0}!1===h&&(h=!0,80===i||33===i?this.Reveal.prev({skipFragments:e.altKey}):78===i||34===i?this.Reveal.next({skipFragments:e.altKey}):72===i||37===i?e.shiftKey?this.Reveal.slide(0):!this.Reveal.overview.isActive()&&c?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.left({skipFragments:e.altKey}):76===i||39===i?e.shiftKey?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):!this.Reveal.overview.isActive()&&c?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.right({skipFragments:e.altKey}):75===i||38===i?e.shiftKey?this.Reveal.slide(void 0,0):!this.Reveal.overview.isActive()&&c?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.up({skipFragments:e.altKey}):74===i||40===i?e.shiftKey?this.Reveal.slide(void 0,Number.MAX_VALUE):!this.Reveal.overview.isActive()&&c?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.down({skipFragments:e.altKey}):36===i?this.Reveal.slide(0):35===i?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):32===i?(this.Reveal.overview.isActive()&&this.Reveal.overview.deactivate(),e.shiftKey?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.next({skipFragments:e.altKey})):58===i||59===i||66===i||86===i||190===i||191===i?this.Reveal.togglePause():70===i?(e=>{let t=(e=e||document.documentElement).requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen;t&&t.apply(e)})(t.embedded?this.Reveal.getViewportElement():document.documentElement):65===i?t.autoSlideStoppable&&this.Reveal.toggleAutoSlide(s):h=!1),h?e.preventDefault&&e.preventDefault():27!==i&&79!==i||(!1===this.Reveal.closeOverlay()&&this.Reveal.overview.toggle(),e.preventDefault&&e.preventDefault()),this.Reveal.cueAutoSlide()}}class P{constructor(e){var t,i,s;s=1e3,(i="MAX_REPLACE_STATE_FREQUENCY")in(t=this)?Object.defineProperty(t,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[i]=s,this.Reveal=e,this.writeURLTimeout=0,this.replaceStateTimestamp=0,this.onWindowHashChange=this.onWindowHashChange.bind(this)}bind(){window.addEventListener("hashchange",this.onWindowHashChange,!1)}unbind(){window.removeEventListener("hashchange",this.onWindowHashChange,!1)}getIndicesFromHash(e=window.location.hash){let t=e.replace(/^#\/?/,""),i=t.split("/");if(/^[0-9]*$/.test(i[0])||!t.length){const e=this.Reveal.getConfig();let t,s=e.hashOneBasedIndex?1:0,a=parseInt(i[0],10)-s||0,n=parseInt(i[1],10)-s||0;return e.fragmentInURL&&(t=parseInt(i[2],10),isNaN(t)&&(t=void 0)),{h:a,v:n,f:t}}{let e,i;/\/[-\d]+$/g.test(t)&&(i=parseInt(t.split("/").pop(),10),i=isNaN(i)?void 0:i,t=t.split("/").shift());try{e=document.getElementById(decodeURIComponent(t))}catch(e){}if(e)return{...this.Reveal.getIndices(e),f:i}}return null}readURL(){const e=this.Reveal.getIndices(),t=this.getIndicesFromHash();t?t.h===e.h&&t.v===e.v&&void 0===t.f||this.Reveal.slide(t.h,t.v,t.f):this.Reveal.slide(e.h||0,e.v||0)}writeURL(e){let t=this.Reveal.getConfig(),i=this.Reveal.getCurrentSlide();if(clearTimeout(this.writeURLTimeout),"number"==typeof e)this.writeURLTimeout=setTimeout(this.writeURL,e);else if(i){let e=this.getHash();t.history?window.location.hash=e:t.hash&&("/"===e?this.debouncedReplaceState(window.location.pathname+window.location.search):this.debouncedReplaceState("#"+e))}}replaceState(e){window.history.replaceState(null,null,e),this.replaceStateTimestamp=Date.now()}debouncedReplaceState(e){clearTimeout(this.replaceStateTimeout),Date.now()-this.replaceStateTimestamp>this.MAX_REPLACE_STATE_FREQUENCY?this.replaceState(e):this.replaceStateTimeout=setTimeout((()=>this.replaceState(e)),this.MAX_REPLACE_STATE_FREQUENCY)}getHash(e){let t="/",i=e||this.Reveal.getCurrentSlide(),s=i?i.getAttribute("id"):null;s&&(s=encodeURIComponent(s));let a=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(a.f=void 0),"string"==typeof s&&s.length)t="/"+s,a.f>=0&&(t+="/"+a.f);else{let e=this.Reveal.getConfig().hashOneBasedIndex?1:0;(a.h>0||a.v>0||a.f>=0)&&(t+=a.h+e),(a.v>0||a.f>=0)&&(t+="/"+(a.v+e)),a.f>=0&&(t+="/"+a.f)}return t}onWindowHashChange(e){this.readURL()}}class N{constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.onNavigateLeftClicked.bind(this),this.onNavigateRightClicked=this.onNavigateRightClicked.bind(this),this.onNavigateUpClicked=this.onNavigateUpClicked.bind(this),this.onNavigateDownClicked=this.onNavigateDownClicked.bind(this),this.onNavigatePrevClicked=this.onNavigatePrevClicked.bind(this),this.onNavigateNextClicked=this.onNavigateNextClicked.bind(this)}render(){const e=this.Reveal.getConfig().rtl,i=this.Reveal.getRevealElement();this.element=document.createElement("aside"),this.element.className="controls",this.element.innerHTML=`\n\t\t\t\n\t\t\t\n\t\t\t`,this.Reveal.getRevealElement().appendChild(this.element),this.controlsLeft=t(i,".navigate-left"),this.controlsRight=t(i,".navigate-right"),this.controlsUp=t(i,".navigate-up"),this.controlsDown=t(i,".navigate-down"),this.controlsPrev=t(i,".navigate-prev"),this.controlsNext=t(i,".navigate-next"),this.controlsRightArrow=this.element.querySelector(".navigate-right"),this.controlsLeftArrow=this.element.querySelector(".navigate-left"),this.controlsDownArrow=this.element.querySelector(".navigate-down")}configure(e,t){this.element.style.display=e.controls?"block":"none",this.element.setAttribute("data-controls-layout",e.controlsLayout),this.element.setAttribute("data-controls-back-arrows",e.controlsBackArrows)}bind(){let e=["touchstart","click"];v&&(e=["touchstart"]),e.forEach((e=>{this.controlsLeft.forEach((t=>t.addEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.addEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.addEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.addEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.addEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.addEventListener(e,this.onNavigateNextClicked,!1)))}))}unbind(){["touchstart","click"].forEach((e=>{this.controlsLeft.forEach((t=>t.removeEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.removeEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.removeEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.removeEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.removeEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.removeEventListener(e,this.onNavigateNextClicked,!1)))}))}update(){let e=this.Reveal.availableRoutes();[...this.controlsLeft,...this.controlsRight,...this.controlsUp,...this.controlsDown,...this.controlsPrev,...this.controlsNext].forEach((e=>{e.classList.remove("enabled","fragmented"),e.setAttribute("disabled","disabled")})),e.left&&this.controlsLeft.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.right&&this.controlsRight.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.up&&this.controlsUp.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.down&&this.controlsDown.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),(e.left||e.up)&&this.controlsPrev.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),(e.right||e.down)&&this.controlsNext.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}));let t=this.Reveal.getCurrentSlide();if(t){let e=this.Reveal.fragments.availableRoutes();e.prev&&this.controlsPrev.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsNext.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),this.Reveal.isVerticalSlide(t)?(e.prev&&this.controlsUp.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsDown.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}))):(e.prev&&this.controlsLeft.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsRight.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})))}if(this.Reveal.getConfig().controlsTutorial){let t=this.Reveal.getIndices();!this.Reveal.hasNavigatedVertically()&&e.down?this.controlsDownArrow.classList.add("highlight"):(this.controlsDownArrow.classList.remove("highlight"),this.Reveal.getConfig().rtl?!this.Reveal.hasNavigatedHorizontally()&&e.left&&0===t.v?this.controlsLeftArrow.classList.add("highlight"):this.controlsLeftArrow.classList.remove("highlight"):!this.Reveal.hasNavigatedHorizontally()&&e.right&&0===t.v?this.controlsRightArrow.classList.add("highlight"):this.controlsRightArrow.classList.remove("highlight"))}}destroy(){this.unbind(),this.element.remove()}onNavigateLeftClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.prev():this.Reveal.left()}onNavigateRightClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.next():this.Reveal.right()}onNavigateUpClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.up()}onNavigateDownClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.down()}onNavigatePrevClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.prev()}onNavigateNextClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.next()}}class M{constructor(e){this.Reveal=e,this.onProgressClicked=this.onProgressClicked.bind(this)}render(){this.element=document.createElement("div"),this.element.className="progress",this.Reveal.getRevealElement().appendChild(this.element),this.bar=document.createElement("span"),this.element.appendChild(this.bar)}configure(e,t){this.element.style.display=e.progress?"block":"none"}bind(){this.Reveal.getConfig().progress&&this.element&&this.element.addEventListener("click",this.onProgressClicked,!1)}unbind(){this.Reveal.getConfig().progress&&this.element&&this.element.removeEventListener("click",this.onProgressClicked,!1)}update(){if(this.Reveal.getConfig().progress&&this.bar){let e=this.Reveal.getProgress();this.Reveal.getTotalSlides()<2&&(e=0),this.bar.style.transform="scaleX("+e+")"}}getMaxWidth(){return this.Reveal.getRevealElement().offsetWidth}onProgressClicked(e){this.Reveal.onUserInput(e),e.preventDefault();let t=this.Reveal.getSlides(),i=t.length,s=Math.floor(e.clientX/this.getMaxWidth()*i);this.Reveal.getConfig().rtl&&(s=i-s);let a=this.Reveal.getIndices(t[s]);this.Reveal.slide(a.h,a.v)}destroy(){this.element.remove()}}class D{constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cursorHidden=!1,this.cursorInactiveTimeout=0,this.onDocumentCursorActive=this.onDocumentCursorActive.bind(this),this.onDocumentMouseScroll=this.onDocumentMouseScroll.bind(this)}configure(e,t){e.mouseWheel?(document.addEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.addEventListener("mousewheel",this.onDocumentMouseScroll,!1)):(document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1)),e.hideInactiveCursor?(document.addEventListener("mousemove",this.onDocumentCursorActive,!1),document.addEventListener("mousedown",this.onDocumentCursorActive,!1)):(this.showCursor(),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1))}showCursor(){this.cursorHidden&&(this.cursorHidden=!1,this.Reveal.getRevealElement().style.cursor="")}hideCursor(){!1===this.cursorHidden&&(this.cursorHidden=!0,this.Reveal.getRevealElement().style.cursor="none")}destroy(){this.showCursor(),document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1)}onDocumentCursorActive(e){this.showCursor(),clearTimeout(this.cursorInactiveTimeout),this.cursorInactiveTimeout=setTimeout(this.hideCursor.bind(this),this.Reveal.getConfig().hideCursorTime)}onDocumentMouseScroll(e){if(Date.now()-this.lastMouseWheelStep>1e3){this.lastMouseWheelStep=Date.now();let t=e.detail||-e.wheelDelta;t>0?this.Reveal.next():t<0&&this.Reveal.prev()}}}const I=(e,t)=>{const i=document.createElement("script");i.type="text/javascript",i.async=!1,i.defer=!1,i.src=e,"function"==typeof t&&(i.onload=i.onreadystatechange=e=>{("load"===e.type||/loaded|complete/.test(i.readyState))&&(i.onload=i.onreadystatechange=i.onerror=null,t())},i.onerror=e=>{i.onload=i.onreadystatechange=i.onerror=null,t(new Error("Failed loading script: "+i.src+"\n"+e))});const s=document.querySelector("head");s.insertBefore(i,s.lastChild)};class T{constructor(e){this.Reveal=e,this.state="idle",this.registeredPlugins={},this.asyncDependencies=[]}load(e,t){return this.state="loading",e.forEach(this.registerPlugin.bind(this)),new Promise((e=>{let i=[],s=0;if(t.forEach((e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):i.push(e))})),i.length){s=i.length;const t=t=>{t&&"function"==typeof t.callback&&t.callback(),0==--s&&this.initPlugins().then(e)};i.forEach((e=>{"string"==typeof e.id?(this.registerPlugin(e),t(e)):"string"==typeof e.src?I(e.src,(()=>t(e))):(console.warn("Unrecognized plugin format",e),t())}))}else this.initPlugins().then(e)}))}initPlugins(){return new Promise((e=>{let t=Object.values(this.registeredPlugins),i=t.length;if(0===i)this.loadAsync().then(e);else{let s,a=()=>{0==--i?this.loadAsync().then(e):s()},n=0;s=()=>{let e=t[n++];if("function"==typeof e.init){let t=e.init(this.Reveal);t&&"function"==typeof t.then?t.then(a):a()}else a()},s()}}))}loadAsync(){return this.state="loaded",this.asyncDependencies.length&&this.asyncDependencies.forEach((e=>{I(e.src,e.callback)})),Promise.resolve()}registerPlugin(e){2===arguments.length&&"string"==typeof arguments[0]?(e=arguments[1]).id=arguments[0]:"function"==typeof e&&(e=e());let t=e.id;"string"!=typeof t?console.warn("Unrecognized plugin format; can't find plugin.id",e):void 0===this.registeredPlugins[t]?(this.registeredPlugins[t]=e,"loaded"===this.state&&"function"==typeof e.init&&e.init(this.Reveal)):console.warn('reveal.js: "'+t+'" plugin has already been registered')}hasPlugin(e){return!!this.registeredPlugins[e]}getPlugin(e){return this.registeredPlugins[e]}getRegisteredPlugins(){return this.registeredPlugins}destroy(){Object.values(this.registeredPlugins).forEach((e=>{"function"==typeof e.destroy&&e.destroy()})),this.registeredPlugins={},this.asyncDependencies=[]}}class F{constructor(e){this.Reveal=e}async setupPDF(){const e=this.Reveal.getConfig(),i=t(this.Reveal.getRevealElement(),".slides section"),s=e.slideNumber&&/all|print/i.test(e.showSlideNumber),a=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),n=Math.floor(a.width*(1+e.margin)),r=Math.floor(a.height*(1+e.margin)),o=a.width,d=a.height;await new Promise(requestAnimationFrame),l("@page{size:"+n+"px "+r+"px; margin: 0px;}"),l(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: "+o+"px; max-height:"+d+"px}"),document.documentElement.classList.add("print-pdf"),document.body.style.width=n+"px",document.body.style.height=r+"px";const c=document.querySelector(".reveal-viewport");let h;if(c){const e=window.getComputedStyle(c);e&&e.background&&(h=e.background)}await new Promise(requestAnimationFrame),this.Reveal.layoutSlideContents(o,d),await new Promise(requestAnimationFrame);const u=i.map((e=>e.scrollHeight)),g=[],v=i[0].parentNode;i.forEach((function(i,a){if(!1===i.classList.contains("stack")){let l=(n-o)/2,c=(r-d)/2;const v=u[a];let p=Math.max(Math.ceil(v/r),1);p=Math.min(p,e.pdfMaxPagesPerSlide),(1===p&&e.center||i.classList.contains("center"))&&(c=Math.max((r-v)/2,0));const m=document.createElement("div");if(g.push(m),m.className="pdf-page",m.style.height=(r+e.pdfPageHeightOffset)*p+"px",h&&(m.style.background=h),m.appendChild(i),i.style.left=l+"px",i.style.top=c+"px",i.style.width=o+"px",this.Reveal.slideContent.layout(i),i.slideBackgroundElement&&m.insertBefore(i.slideBackgroundElement,i),e.showNotes){const t=this.Reveal.getSlideNotes(i);if(t){const i=8,s="string"==typeof e.showNotes?e.showNotes:"inline",a=document.createElement("div");a.classList.add("speaker-notes"),a.classList.add("speaker-notes-pdf"),a.setAttribute("data-layout",s),a.innerHTML=t,"separate-page"===s?g.push(a):(a.style.left=i+"px",a.style.bottom=i+"px",a.style.width=n-2*i+"px",m.appendChild(a))}}if(s){const e=a+1,t=document.createElement("div");t.classList.add("slide-number"),t.classList.add("slide-number-pdf"),t.innerHTML=e,m.appendChild(t)}if(e.pdfSeparateFragments){const e=this.Reveal.fragments.sort(m.querySelectorAll(".fragment"),!0);let t;e.forEach((function(e){t&&t.forEach((function(e){e.classList.remove("current-fragment")})),e.forEach((function(e){e.classList.add("visible","current-fragment")}),this);const i=m.cloneNode(!0);g.push(i),t=e}),this),e.forEach((function(e){e.forEach((function(e){e.classList.remove("visible","current-fragment")}))}))}else t(m,".fragment:not(.fade-out)").forEach((function(e){e.classList.add("visible")}))}}),this),await new Promise(requestAnimationFrame),g.forEach((e=>v.appendChild(e))),this.Reveal.dispatchEvent({type:"pdf-ready"})}isPrintingPDF(){return/print-pdf/gi.test(window.location.search)}}class z{constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStartY=0,this.touchStartCount=0,this.touchCaptured=!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this)}bind(){let e=this.Reveal.getRevealElement();"onpointerdown"in window?(e.addEventListener("pointerdown",this.onPointerDown,!1),e.addEventListener("pointermove",this.onPointerMove,!1),e.addEventListener("pointerup",this.onPointerUp,!1)):window.navigator.msPointerEnabled?(e.addEventListener("MSPointerDown",this.onPointerDown,!1),e.addEventListener("MSPointerMove",this.onPointerMove,!1),e.addEventListener("MSPointerUp",this.onPointerUp,!1)):(e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1))}unbind(){let e=this.Reveal.getRevealElement();e.removeEventListener("pointerdown",this.onPointerDown,!1),e.removeEventListener("pointermove",this.onPointerMove,!1),e.removeEventListener("pointerup",this.onPointerUp,!1),e.removeEventListener("MSPointerDown",this.onPointerDown,!1),e.removeEventListener("MSPointerMove",this.onPointerMove,!1),e.removeEventListener("MSPointerUp",this.onPointerUp,!1),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1)}isSwipePrevented(e){if(n(e,"video, audio"))return!0;for(;e&&"function"==typeof e.hasAttribute;){if(e.hasAttribute("data-prevent-swipe"))return!0;e=e.parentNode}return!1}onTouchStart(e){if(this.isSwipePrevented(e.target))return!0;this.touchStartX=e.touches[0].clientX,this.touchStartY=e.touches[0].clientY,this.touchStartCount=e.touches.length}onTouchMove(e){if(this.isSwipePrevented(e.target))return!0;let t=this.Reveal.getConfig();if(this.touchCaptured)v&&e.preventDefault();else{this.Reveal.onUserInput(e);let i=e.touches[0].clientX,s=e.touches[0].clientY;if(1===e.touches.length&&2!==this.touchStartCount){let a=this.Reveal.availableRoutes({includeFragments:!0}),n=i-this.touchStartX,r=s-this.touchStartY;n>40&&Math.abs(n)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):n<-40&&Math.abs(n)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):r>40&&a.up?(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.prev():this.Reveal.up()):r<-40&&a.down&&(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.next():this.Reveal.down()),t.embedded?(this.touchCaptured||this.Reveal.isVerticalSlide())&&e.preventDefault():e.preventDefault()}}}onTouchEnd(e){this.touchCaptured=!1}onPointerDown(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchStart(e))}onPointerMove(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchMove(e))}onPointerUp(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchEnd(e))}}class H{constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRevealPointerDown.bind(this),this.onDocumentPointerDown=this.onDocumentPointerDown.bind(this)}configure(e,t){e.embedded?this.blur():(this.focus(),this.unbind())}bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement().addEventListener("pointerdown",this.onRevealPointerDown,!1)}unbind(){this.Reveal.getRevealElement().removeEventListener("pointerdown",this.onRevealPointerDown,!1),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)}focus(){"focus"!==this.state&&(this.Reveal.getRevealElement().classList.add("focused"),document.addEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="focus"}blur(){"blur"!==this.state&&(this.Reveal.getRevealElement().classList.remove("focused"),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="blur"}isFocused(){return"focus"===this.state}destroy(){this.Reveal.getRevealElement().classList.remove("focused")}onRevealPointerDown(e){this.focus()}onDocumentPointerDown(e){let t=r(e.target,".reveal");t&&t===this.Reveal.getRevealElement()||this.blur()}}class q{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="speaker-notes",this.element.setAttribute("data-prevent-swipe",""),this.element.setAttribute("tabindex","0"),this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){e.showNotes&&this.element.setAttribute("data-layout","string"==typeof e.showNotes?e.showNotes:"inline")}update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal.getCurrentSlide()&&!this.Reveal.print.isPrintingPDF()&&(this.element.innerHTML=this.getSlideNotes()||'No notes on this slide.')}updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()&&!this.Reveal.print.isPrintingPDF()?this.Reveal.getRevealElement().classList.add("show-notes"):this.Reveal.getRevealElement().classList.remove("show-notes")}hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll("[data-notes], aside.notes").length>0}isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/gi)}getSlideNotes(e=this.Reveal.getCurrentSlide()){if(e.hasAttribute("data-notes"))return e.getAttribute("data-notes");let t=e.querySelector("aside.notes");return t?t.innerHTML:null}destroy(){this.element.remove()}}class B{constructor(e,t){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=e,this.progressCheck=t,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}setPlaying(e){const t=this.playing;this.playing=e,!t&&this.playing?this.animate():this.render()}animate(){const e=this.progress;this.progress=this.progressCheck(),e>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let e=this.playing?this.progress:0,t=this.diameter2-this.thickness,i=this.diameter2,s=this.diameter2,a=28;this.progressOffset+=.1*(1-this.progressOffset);const n=-Math.PI/2+e*(2*Math.PI),r=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(i,s,t+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(i,s,t,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(i,s,t,r,n,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(i-14,s-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,a),this.context.fillRect(18,0,10,a)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,a),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(e,t){this.canvas.addEventListener(e,t,!1)}off(e,t){this.canvas.removeEventListener(e,t,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}}var O={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:"bottom-right",controlsBackArrows:"faded",progress:!0,slideNumber:!1,showSlideNumber:"all",hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:"default",shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,showHiddenSlides:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:"ease",autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:["opacity","color","background-color","padding","font-size","line-height","letter-spacing","border-width","border-color","border-radius","outline","outline-offset"],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:"slide",transitionSpeed:"default",backgroundTransition:"fade",parallaxBackgroundImage:"",parallaxBackgroundSize:"",parallaxBackgroundRepeat:"",parallaxBackgroundPosition:"",parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,pdfMaxPagesPerSlide:Number.POSITIVE_INFINITY,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:"block",hideInactiveCursor:!0,hideCursorTime:5e3,dependencies:[],plugins:[]};function U(n,l){arguments.length<2&&(l=arguments[0],n=document.querySelector(".reveal"));const h={};let u,v,p,m,f,w={},S=!1,A={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},I=[],U=1,W={layout:"",overview:""},K={},V="idle",$=0,j=0,X=-1,Y=!1,_=new b(h),J=new y(h),Q=new k(h),Z=new E(h),G=new L(h),ee=new C(h),te=new x(h),ie=new P(h),se=new N(h),ae=new M(h),ne=new D(h),re=new T(h),oe=new F(h),le=new H(h),de=new z(h),ce=new q(h);function he(e){if(!n)throw'Unable to find presentation root (
    ).';if(K.wrapper=n,K.slides=n.querySelector(".slides"),!K.slides)throw'Unable to find slides container (
    ).';return w={...O,...w,...l,...e,...d()},ue(),window.addEventListener("load",He,!1),re.load(w.plugins,w.dependencies).then(ge),new Promise((e=>h.on("ready",e)))}function ue(){!0===w.embedded?K.viewport=r(n,".reveal-viewport")||n:(K.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),K.viewport.classList.add("reveal-viewport")}function ge(){S=!0,ve(),pe(),Ee(),ye(),we(),tt(),Re(),ie.readURL(),Z.update(!0),setTimeout((()=>{K.slides.classList.remove("no-transition"),K.wrapper.classList.add("ready"),Pe({type:"ready",data:{indexh:u,indexv:v,currentSlide:m}})}),1),oe.isPrintingPDF()&&(Ae(),"complete"===document.readyState?oe.setupPDF():window.addEventListener("load",(()=>{oe.setupPDF()})))}function ve(){w.showHiddenSlides||t(K.wrapper,'section[data-visibility="hidden"]').forEach((e=>{e.parentNode.removeChild(e)}))}function pe(){K.slides.classList.add("no-transition"),g?K.wrapper.classList.add("no-hover"):K.wrapper.classList.remove("no-hover"),Z.render(),J.render(),se.render(),ae.render(),ce.render(),K.pauseOverlay=o(K.wrapper,"div","pause-overlay",w.controls?'':null),K.statusElement=me(),K.wrapper.setAttribute("role","application")}function me(){let e=K.wrapper.querySelector(".aria-status");return e||(e=document.createElement("div"),e.style.position="absolute",e.style.height="1px",e.style.width="1px",e.style.overflow="hidden",e.style.clip="rect( 1px, 1px, 1px, 1px )",e.classList.add("aria-status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),K.wrapper.appendChild(e)),e}function fe(e){K.statusElement.textContent=e}function be(e){let t="";if(3===e.nodeType)t+=e.textContent;else if(1===e.nodeType){let i=e.getAttribute("aria-hidden"),s="none"===window.getComputedStyle(e).display;"true"===i||s||Array.from(e.childNodes).forEach((e=>{t+=be(e)}))}return t=t.trim(),""===t?"":t+" "}function ye(){setInterval((()=>{0===K.wrapper.scrollTop&&0===K.wrapper.scrollLeft||(K.wrapper.scrollTop=0,K.wrapper.scrollLeft=0)}),1e3)}function we(){document.addEventListener("fullscreenchange",Ht),document.addEventListener("webkitfullscreenchange",Ht)}function Ee(){w.postMessage&&window.addEventListener("message",Dt,!1)}function Re(t){const s={...w};if("object"==typeof t&&e(w,t),!1===h.isReady())return;const a=K.wrapper.querySelectorAll(".slides section").length;K.wrapper.classList.remove(s.transition),K.wrapper.classList.add(w.transition),K.wrapper.setAttribute("data-transition-speed",w.transitionSpeed),K.wrapper.setAttribute("data-background-transition",w.backgroundTransition),K.viewport.style.setProperty("--slide-width",w.width+"px"),K.viewport.style.setProperty("--slide-height",w.height+"px"),w.shuffle&&it(),i(K.wrapper,"embedded",w.embedded),i(K.wrapper,"rtl",w.rtl),i(K.wrapper,"center",w.center),!1===w.pause&&Xe(),w.previewLinks?(Me(),De("[data-preview-link=false]")):(De(),Me("[data-preview-link]:not([data-preview-link=false])")),Q.reset(),f&&(f.destroy(),f=null),a>1&&w.autoSlide&&w.autoSlideStoppable&&(f=new B(K.wrapper,(()=>Math.min(Math.max((Date.now()-X)/$,0),1))),f.on("click",Bt),Y=!1),"default"!==w.navigationMode?K.wrapper.setAttribute("data-navigation-mode",w.navigationMode):K.wrapper.removeAttribute("data-navigation-mode"),ce.configure(w,s),le.configure(w,s),ne.configure(w,s),se.configure(w,s),ae.configure(w,s),te.configure(w,s),G.configure(w,s),J.configure(w,s),Ge()}function Se(){window.addEventListener("resize",Ft,!1),w.touch&&de.bind(),w.keyboard&&te.bind(),w.progress&&ae.bind(),w.respondToHashChanges&&ie.bind(),se.bind(),le.bind(),K.slides.addEventListener("click",Tt,!1),K.slides.addEventListener("transitionend",It,!1),K.pauseOverlay.addEventListener("click",Xe,!1),w.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",zt,!1)}function Ae(){de.unbind(),le.unbind(),te.unbind(),se.unbind(),ae.unbind(),ie.unbind(),window.removeEventListener("resize",Ft,!1),K.slides.removeEventListener("click",Tt,!1),K.slides.removeEventListener("transitionend",It,!1),K.pauseOverlay.removeEventListener("click",Xe,!1)}function ke(){Ae(),Rt(),De(),ce.destroy(),le.destroy(),re.destroy(),ne.destroy(),se.destroy(),ae.destroy(),Z.destroy(),J.destroy(),document.removeEventListener("fullscreenchange",Ht),document.removeEventListener("webkitfullscreenchange",Ht),document.removeEventListener("visibilitychange",zt,!1),window.removeEventListener("message",Dt,!1),window.removeEventListener("load",He,!1),K.pauseOverlay&&K.pauseOverlay.remove(),K.statusElement&&K.statusElement.remove(),document.documentElement.classList.remove("reveal-full-page"),K.wrapper.classList.remove("ready","center","has-horizontal-slides","has-vertical-slides"),K.wrapper.removeAttribute("data-transition-speed"),K.wrapper.removeAttribute("data-background-transition"),K.viewport.classList.remove("reveal-viewport"),K.viewport.style.removeProperty("--slide-width"),K.viewport.style.removeProperty("--slide-height"),K.slides.style.removeProperty("width"),K.slides.style.removeProperty("height"),K.slides.style.removeProperty("zoom"),K.slides.style.removeProperty("left"),K.slides.style.removeProperty("top"),K.slides.style.removeProperty("bottom"),K.slides.style.removeProperty("right"),K.slides.style.removeProperty("transform"),Array.from(K.wrapper.querySelectorAll(".slides section")).forEach((e=>{e.style.removeProperty("display"),e.style.removeProperty("top"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden")}))}function Le(e,t,i){n.addEventListener(e,t,i)}function Ce(e,t,i){n.removeEventListener(e,t,i)}function xe(e){"string"==typeof e.layout&&(W.layout=e.layout),"string"==typeof e.overview&&(W.overview=e.overview),W.layout?a(K.slides,W.layout+" "+W.overview):a(K.slides,W.overview)}function Pe({target:t=K.wrapper,type:i,data:s,bubbles:a=!0}){let n=document.createEvent("HTMLEvents",1,2);return n.initEvent(i,a,!0),e(n,s),t.dispatchEvent(n),t===K.wrapper&&Ne(i),n}function Ne(t,i){if(w.postMessageEvents&&window.parent!==window.self){let s={namespace:"reveal",eventName:t,state:yt()};e(s,i),window.parent.postMessage(JSON.stringify(s),"*")}}function Me(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",qt,!1)}))}function De(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",qt,!1)}))}function Ie(e){ze(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-preview"),K.wrapper.appendChild(K.overlay),K.overlay.innerHTML=`
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site's policy (x-frame-options).\n\t\t\t\t\n\t\t\t
    `,K.overlay.querySelector("iframe").addEventListener("load",(e=>{K.overlay.classList.add("loaded")}),!1),K.overlay.querySelector(".close").addEventListener("click",(e=>{ze(),e.preventDefault()}),!1),K.overlay.querySelector(".external").addEventListener("click",(e=>{ze()}),!1)}function Te(e){"boolean"==typeof e?e?Fe():ze():K.overlay?ze():Fe()}function Fe(){if(w.help){ze(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-help"),K.wrapper.appendChild(K.overlay);let e='

    Keyboard Shortcuts


    ',t=te.getShortcuts(),i=te.getBindings();e+="";for(let i in t)e+=``;for(let t in i)i[t].key&&i[t].description&&(e+=``);e+="
    KEYACTION
    ${i}${t[i]}
    ${i[t].key}${i[t].description}
    ",K.overlay.innerHTML=`\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    ${e}
    \n\t\t\t\t
    \n\t\t\t`,K.overlay.querySelector(".close").addEventListener("click",(e=>{ze(),e.preventDefault()}),!1)}}function ze(){return!!K.overlay&&(K.overlay.parentNode.removeChild(K.overlay),K.overlay=null,!0)}function He(){if(K.wrapper&&!oe.isPrintingPDF()){if(!w.disableLayout){g&&!w.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");const e=Be(),t=U;qe(w.width,w.height),K.slides.style.width=e.width+"px",K.slides.style.height=e.height+"px",U=Math.min(e.presentationWidth/e.width,e.presentationHeight/e.height),U=Math.max(U,w.minScale),U=Math.min(U,w.maxScale),1===U?(K.slides.style.zoom="",K.slides.style.left="",K.slides.style.top="",K.slides.style.bottom="",K.slides.style.right="",xe({layout:""})):(K.slides.style.zoom="",K.slides.style.left="50%",K.slides.style.top="50%",K.slides.style.bottom="auto",K.slides.style.right="auto",xe({layout:"translate(-50%, -50%) scale("+U+")"}));const i=Array.from(K.wrapper.querySelectorAll(".slides section"));for(let t=0,s=i.length;t .stretch, section > .r-stretch").forEach((t=>{let s=c(t,i);if(/(img|video)/gi.test(t.nodeName)){const i=t.naturalWidth||t.videoWidth,a=t.naturalHeight||t.videoHeight,n=Math.min(e/i,s/a);t.style.width=i*n+"px",t.style.height=a*n+"px"}else t.style.width=e+"px",t.style.height=s+"px"}))}function Be(e,t){const i={width:w.width,height:w.height,presentationWidth:e||K.wrapper.offsetWidth,presentationHeight:t||K.wrapper.offsetHeight};return i.presentationWidth-=i.presentationWidth*w.margin,i.presentationHeight-=i.presentationHeight*w.margin,"string"==typeof i.width&&/%$/.test(i.width)&&(i.width=parseInt(i.width,10)/100*i.presentationWidth),"string"==typeof i.height&&/%$/.test(i.height)&&(i.height=parseInt(i.height,10)/100*i.presentationHeight),i}function Oe(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function Ue(e){if("object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")){const t=e.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(e.getAttribute(t)||0,10)}return 0}function We(e=m){return e&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Ke(){return!(!m||!We(m))&&!m.nextElementSibling}function Ve(){return 0===u&&0===v}function $e(){return!!m&&(!m.nextElementSibling&&(!We(m)||!m.parentNode.nextElementSibling))}function je(){if(w.pause){const e=K.wrapper.classList.contains("paused");Rt(),K.wrapper.classList.add("paused"),!1===e&&Pe({type:"paused"})}}function Xe(){const e=K.wrapper.classList.contains("paused");K.wrapper.classList.remove("paused"),Et(),e&&Pe({type:"resumed"})}function Ye(e){"boolean"==typeof e?e?je():Xe():_e()?Xe():je()}function _e(){return K.wrapper.classList.contains("paused")}function Je(e){"boolean"==typeof e?e?At():St():Y?At():St()}function Qe(){return!(!$||Y)}function Ze(e,t,i,s){if(Pe({type:"beforeslidechange",data:{indexh:void 0===e?u:e,indexv:void 0===t?v:t,origin:s}}).defaultPrevented)return;p=m;const a=K.wrapper.querySelectorAll(".slides>section");if(0===a.length)return;void 0!==t||ee.isActive()||(t=Ue(a[e])),p&&p.parentNode&&p.parentNode.classList.contains("stack")&&Oe(p.parentNode,v);const n=I.concat();I.length=0;let r=u||0,o=v||0;u=st(".slides>section",void 0===e?u:e),v=st(".slides>section.present>section",void 0===t?v:t);let l=u!==r||v!==o;l||(p=null);let d=a[u],c=d.querySelectorAll("section");m=c[v]||d;let h=!1;l&&p&&m&&!ee.isActive()&&(p.hasAttribute("data-auto-animate")&&m.hasAttribute("data-auto-animate")&&p.getAttribute("data-auto-animate-id")===m.getAttribute("data-auto-animate-id")&&!(u>r||v>o?m:p).hasAttribute("data-auto-animate-restart")&&(h=!0,K.slides.classList.add("disable-slide-transitions")),V="running"),at(),He(),ee.isActive()&&ee.update(),void 0!==i&&G.goto(i),p&&p!==m&&(p.classList.remove("present"),p.setAttribute("aria-hidden","true"),Ve()&&setTimeout((()=>{ut().forEach((e=>{Oe(e,0)}))}),0));e:for(let e=0,t=I.length;e{fe(be(m))})),ae.update(),se.update(),ce.update(),Z.update(),Z.updateParallax(),J.update(),G.update(),ie.writeURL(),Et(),h&&(setTimeout((()=>{K.slides.classList.remove("disable-slide-transitions")}),0),w.autoAnimate&&Q.run(p,m))}function Ge(){Ae(),Se(),He(),$=w.autoSlide,Et(),Z.create(),ie.writeURL(),G.sortAll(),se.update(),ae.update(),at(),ce.update(),ce.updateVisibility(),Z.update(!0),J.update(),_.formatEmbeddedContent(),!1===w.autoPlayMedia?_.stopEmbeddedContent(m,{unloadIframes:!1}):_.startEmbeddedContent(m),ee.isActive()&&ee.layout()}function et(e=m){Z.sync(e),G.sync(e),_.load(e),Z.update(),ce.update()}function tt(){ct().forEach((e=>{t(e,"section").forEach(((e,t)=>{t>0&&(e.classList.remove("present"),e.classList.remove("past"),e.classList.add("future"),e.setAttribute("aria-hidden","true"))}))}))}function it(e=ct()){e.forEach(((t,i)=>{let s=e[Math.floor(Math.random()*e.length)];s.parentNode===t.parentNode&&t.parentNode.insertBefore(t,s);let a=t.querySelectorAll("section");a.length&&it(a)}))}function st(e,i){let s=t(K.wrapper,e),a=s.length,n=oe.isPrintingPDF();if(a){w.loop&&(i%=a)<0&&(i=a+i),i=Math.max(Math.min(i,a-1),0);for(let e=0;e{e.classList.add("visible"),e.classList.remove("current-fragment")}))):e>i&&(a.classList.add(r?"past":"future"),w.fragments&&t(a,".fragment.visible").forEach((e=>{e.classList.remove("visible","current-fragment")})))}let e=s[i],r=e.classList.contains("present");e.classList.add("present"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden"),r||Pe({target:e,type:"visible",bubbles:!1});let o=e.getAttribute("data-state");o&&(I=I.concat(o.split(" ")))}else i=0;return i}function at(){let e,i,s=ct(),a=s.length;if(a&&void 0!==u){let n=ee.isActive()?10:w.viewDistance;g&&(n=ee.isActive()?6:w.mobileViewDistance),oe.isPrintingPDF()&&(n=Number.MAX_VALUE);for(let r=0;rsection"),i=K.wrapper.querySelectorAll(".slides>section.present>section"),s={left:u>0,right:u0,down:v1&&(s.left=!0,s.right=!0),i.length>1&&(s.up=!0,s.down=!0)),t.length>1&&"linear"===w.navigationMode&&(s.right=s.right||s.down,s.left=s.left||s.up),!0===e){let e=G.availableRoutes();s.left=s.left||e.prev,s.up=s.up||e.prev,s.down=s.down||e.next,s.right=s.right||e.next}if(w.rtl){let e=s.left;s.left=s.right,s.right=e}return s}function rt(e=m){let t=ct(),i=0;e:for(let s=0;s0){let i=.9;t+=m.querySelectorAll(".fragment.visible").length/e.length*i}}return Math.min(t/(e-1),1)}function lt(e){let i,s=u,a=v;if(e){let i=We(e),n=i?e.parentNode:e,r=ct();s=Math.max(r.indexOf(n),0),a=void 0,i&&(a=Math.max(t(e.parentNode,"section").indexOf(e),0))}if(!e&&m){if(m.querySelectorAll(".fragment").length>0){let e=m.querySelector(".current-fragment");i=e&&e.hasAttribute("data-fragment-index")?parseInt(e.getAttribute("data-fragment-index"),10):m.querySelectorAll(".fragment.visible").length-1}}return{h:s,v:a,f:i}}function dt(){return t(K.wrapper,'.slides section:not(.stack):not([data-visibility="uncounted"])')}function ct(){return t(K.wrapper,".slides>section")}function ht(){return t(K.wrapper,".slides>section>section")}function ut(){return t(K.wrapper,".slides>section.stack")}function gt(){return ct().length>1}function vt(){return ht().length>1}function pt(){return dt().map((e=>{let t={};for(let i=0;i{e.hasAttribute("data-autoplay")&&$&&1e3*e.duration/e.playbackRate>$&&($=1e3*e.duration/e.playbackRate+1e3)}))),!$||Y||_e()||ee.isActive()||$e()&&!G.availableRoutes().next&&!0!==w.loop||(j=setTimeout((()=>{"function"==typeof w.autoSlideMethod?w.autoSlideMethod():Nt(),Et()}),$),X=Date.now()),f&&f.setPlaying(-1!==j)}}function Rt(){clearTimeout(j),j=-1}function St(){$&&!Y&&(Y=!0,Pe({type:"autoslidepaused"}),clearTimeout(j),f&&f.setPlaying(!1))}function At(){$&&Y&&(Y=!1,Pe({type:"autoslideresumed"}),Et())}function kt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===G.next())&&nt().left&&Ze(u+1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===G.prev())&&nt().left&&Ze(u-1,"grid"===w.navigationMode?v:void 0)}function Lt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===G.prev())&&nt().right&&Ze(u-1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===G.next())&&nt().right&&Ze(u+1,"grid"===w.navigationMode?v:void 0)}function Ct({skipFragments:e=!1}={}){(ee.isActive()||e||!1===G.prev())&&nt().up&&Ze(u,v-1)}function xt({skipFragments:e=!1}={}){A.hasNavigatedVertically=!0,(ee.isActive()||e||!1===G.next())&&nt().down&&Ze(u,v+1)}function Pt({skipFragments:e=!1}={}){if(e||!1===G.prev())if(nt().up)Ct({skipFragments:e});else{let i;if(i=w.rtl?t(K.wrapper,".slides>section.future").pop():t(K.wrapper,".slides>section.past").pop(),i&&i.classList.contains("stack")){let e=i.querySelectorAll("section").length-1||void 0;Ze(u-1,e)}else kt({skipFragments:e})}}function Nt({skipFragments:e=!1}={}){if(A.hasNavigatedHorizontally=!0,A.hasNavigatedVertically=!0,e||!1===G.next()){let t=nt();t.down&&t.right&&w.loop&&Ke()&&(t.down=!1),t.down?xt({skipFragments:e}):w.rtl?kt({skipFragments:e}):Lt({skipFragments:e})}}function Mt(e){w.autoSlideStoppable&&St()}function Dt(e){let t=e.data;if("string"==typeof t&&"{"===t.charAt(0)&&"}"===t.charAt(t.length-1)&&(t=JSON.parse(t),t.method&&"function"==typeof h[t.method]))if(!1===R.test(t.method)){const e=h[t.method].apply(h,t.args);Ne("callback",{method:t.method,result:e})}else console.warn('reveal.js: "'+t.method+'" is is blacklisted from the postMessage API')}function It(e){"running"===V&&/section/gi.test(e.target.nodeName)&&(V="idle",Pe({type:"slidetransitionend",data:{indexh:u,indexv:v,previousSlide:p,currentSlide:m}}))}function Tt(e){const t=r(e.target,'a[href^="#"]');if(t){const i=t.getAttribute("href"),s=ie.getIndicesFromHash(i);s&&(h.slide(s.h,s.v,s.f),e.preventDefault())}}function Ft(e){He()}function zt(e){!1===document.hidden&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Ht(e){(document.fullscreenElement||document.webkitFullscreenElement)===K.wrapper&&(e.stopImmediatePropagation(),setTimeout((()=>{h.layout(),h.focus.focus()}),1))}function qt(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){let t=e.currentTarget.getAttribute("href");t&&(Ie(t),e.preventDefault())}}function Bt(e){$e()&&!1===w.loop?(Ze(0,0),At()):Y?At():St()}const Ot={VERSION:"4.3.1",initialize:he,configure:Re,destroy:ke,sync:Ge,syncSlide:et,syncFragments:G.sync.bind(G),slide:Ze,left:kt,right:Lt,up:Ct,down:xt,prev:Pt,next:Nt,navigateLeft:kt,navigateRight:Lt,navigateUp:Ct,navigateDown:xt,navigatePrev:Pt,navigateNext:Nt,navigateFragment:G.goto.bind(G),prevFragment:G.prev.bind(G),nextFragment:G.next.bind(G),on:Le,off:Ce,addEventListener:Le,removeEventListener:Ce,layout:He,shuffle:it,availableRoutes:nt,availableFragments:G.availableRoutes.bind(G),toggleHelp:Te,toggleOverview:ee.toggle.bind(ee),togglePause:Ye,toggleAutoSlide:Je,isFirstSlide:Ve,isLastSlide:$e,isLastVerticalSlide:Ke,isVerticalSlide:We,isPaused:_e,isAutoSliding:Qe,isSpeakerNotes:ce.isSpeakerNotesWindow.bind(ce),isOverview:ee.isActive.bind(ee),isFocused:le.isFocused.bind(le),isPrintingPDF:oe.isPrintingPDF.bind(oe),isReady:()=>S,loadSlide:_.load.bind(_),unloadSlide:_.unload.bind(_),showPreview:Ie,hidePreview:ze,addEventListeners:Se,removeEventListeners:Ae,dispatchEvent:Pe,getState:yt,setState:wt,getProgress:ot,getIndices:lt,getSlidesAttributes:pt,getSlidePastCount:rt,getTotalSlides:mt,getSlide:ft,getPreviousSlide:()=>p,getCurrentSlide:()=>m,getSlideBackground:bt,getSlideNotes:ce.getSlideNotes.bind(ce),getSlides:dt,getHorizontalSlides:ct,getVerticalSlides:ht,hasHorizontalSlides:gt,hasVerticalSlides:vt,hasNavigatedHorizontally:()=>A.hasNavigatedHorizontally,hasNavigatedVertically:()=>A.hasNavigatedVertically,addKeyBinding:te.addKeyBinding.bind(te),removeKeyBinding:te.removeKeyBinding.bind(te),triggerKey:te.triggerKey.bind(te),registerKeyboardShortcut:te.registerKeyboardShortcut.bind(te),getComputedSlideSize:Be,getScale:()=>U,getConfig:()=>w,getQueryHash:d,getSlidePath:ie.getHash.bind(ie),getRevealElement:()=>n,getSlidesElement:()=>K.slides,getViewportElement:()=>K.viewport,getBackgroundsElement:()=>Z.element,registerPlugin:re.registerPlugin.bind(re),hasPlugin:re.hasPlugin.bind(re),getPlugin:re.getPlugin.bind(re),getPlugins:re.getRegisteredPlugins.bind(re)};return e(h,{...Ot,announceStatus:fe,getStatusText:be,print:oe,focus:le,progress:ae,controls:se,location:ie,overview:ee,fragments:G,slideContent:_,slideNumber:J,onUserInput:Mt,closeOverlay:ze,updateSlidesVisibility:at,layoutSlideContents:qe,transformSlides:xe,cueAutoSlide:Et,cancelAutoSlide:Rt}),Ot}let W=U,K=[];W.initialize=e=>(Object.assign(W,new U(document.querySelector(".reveal"),e)),K.map((e=>e(W))),W.initialize()),["configure","on","off","addEventListener","removeEventListener","registerPlugin"].forEach((e=>{W[e]=(...t)=>{K.push((i=>i[e].call(null,...t)))}})),W.isReady=()=>!1,W.VERSION="4.3.1";export default W; -//# sourceMappingURL=reveal.esm.js.map diff --git a/docs/index_files/libs/revealjs/dist/reveal.esm.js.map b/docs/index_files/libs/revealjs/dist/reveal.esm.js.map deleted file mode 100644 index 286c75a2..00000000 --- a/docs/index_files/libs/revealjs/dist/reveal.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"reveal.esm.js","sources":["../js/utils/util.js","../js/utils/device.js","../node_modules/fitty/dist/fitty.module.js","../js/controllers/slidecontent.js","../js/controllers/slidenumber.js","../js/utils/color.js","../js/controllers/backgrounds.js","../js/utils/constants.js","../js/controllers/autoanimate.js","../js/controllers/fragments.js","../js/controllers/overview.js","../js/controllers/keyboard.js","../js/controllers/location.js","../js/controllers/controls.js","../js/controllers/progress.js","../js/controllers/pointer.js","../js/utils/loader.js","../js/controllers/plugins.js","../js/controllers/print.js","../js/controllers/touch.js","../js/controllers/focus.js","../js/controllers/notes.js","../js/components/playback.js","../js/config.js","../js/reveal.js","../js/index.js"],"sourcesContent":["/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @param {object} a\n * @param {object} b\n */\nexport const extend = ( a, b ) => {\n\n\tfor( let i in b ) {\n\t\ta[ i ] = b[ i ];\n\t}\n\n\treturn a;\n\n}\n\n/**\n * querySelectorAll but returns an Array.\n */\nexport const queryAll = ( el, selector ) => {\n\n\treturn Array.from( el.querySelectorAll( selector ) );\n\n}\n\n/**\n * classList.toggle() with cross browser support\n */\nexport const toggleClass = ( el, className, value ) => {\n\tif( value ) {\n\t\tel.classList.add( className );\n\t}\n\telse {\n\t\tel.classList.remove( className );\n\t}\n}\n\n/**\n * Utility for deserializing a value.\n *\n * @param {*} value\n * @return {*}\n */\nexport const deserialize = ( value ) => {\n\n\tif( typeof value === 'string' ) {\n\t\tif( value === 'null' ) return null;\n\t\telse if( value === 'true' ) return true;\n\t\telse if( value === 'false' ) return false;\n\t\telse if( value.match( /^-?[\\d\\.]+$/ ) ) return parseFloat( value );\n\t}\n\n\treturn value;\n\n}\n\n/**\n * Measures the distance in pixels between point a\n * and point b.\n *\n * @param {object} a point with x/y properties\n * @param {object} b point with x/y properties\n *\n * @return {number}\n */\nexport const distanceBetween = ( a, b ) => {\n\n\tlet dx = a.x - b.x,\n\t\tdy = a.y - b.y;\n\n\treturn Math.sqrt( dx*dx + dy*dy );\n\n}\n\n/**\n * Applies a CSS transform to the target element.\n *\n * @param {HTMLElement} element\n * @param {string} transform\n */\nexport const transformElement = ( element, transform ) => {\n\n\telement.style.transform = transform;\n\n}\n\n/**\n * Element.matches with IE support.\n *\n * @param {HTMLElement} target The element to match\n * @param {String} selector The CSS selector to match\n * the element against\n *\n * @return {Boolean}\n */\nexport const matches = ( target, selector ) => {\n\n\tlet matchesMethod = target.matches || target.matchesSelector || target.msMatchesSelector;\n\n\treturn !!( matchesMethod && matchesMethod.call( target, selector ) );\n\n}\n\n/**\n * Find the closest parent that matches the given\n * selector.\n *\n * @param {HTMLElement} target The child element\n * @param {String} selector The CSS selector to match\n * the parents against\n *\n * @return {HTMLElement} The matched parent or null\n * if no matching parent was found\n */\nexport const closest = ( target, selector ) => {\n\n\t// Native Element.closest\n\tif( typeof target.closest === 'function' ) {\n\t\treturn target.closest( selector );\n\t}\n\n\t// Polyfill\n\twhile( target ) {\n\t\tif( matches( target, selector ) ) {\n\t\t\treturn target;\n\t\t}\n\n\t\t// Keep searching\n\t\ttarget = target.parentNode;\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Handling the fullscreen functionality via the fullscreen API\n *\n * @see http://fullscreen.spec.whatwg.org/\n * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode\n */\nexport const enterFullscreen = element => {\n\n\telement = element || document.documentElement;\n\n\t// Check which implementation is available\n\tlet requestMethod = element.requestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullScreen ||\n\t\t\t\t\t\telement.mozRequestFullScreen ||\n\t\t\t\t\t\telement.msRequestFullscreen;\n\n\tif( requestMethod ) {\n\t\trequestMethod.apply( element );\n\t}\n\n}\n\n/**\n * Creates an HTML element and returns a reference to it.\n * If the element already exists the existing instance will\n * be returned.\n *\n * @param {HTMLElement} container\n * @param {string} tagname\n * @param {string} classname\n * @param {string} innerHTML\n *\n * @return {HTMLElement}\n */\nexport const createSingletonNode = ( container, tagname, classname, innerHTML='' ) => {\n\n\t// Find all nodes matching the description\n\tlet nodes = container.querySelectorAll( '.' + classname );\n\n\t// Check all matches to find one which is a direct child of\n\t// the specified container\n\tfor( let i = 0; i < nodes.length; i++ ) {\n\t\tlet testNode = nodes[i];\n\t\tif( testNode.parentNode === container ) {\n\t\t\treturn testNode;\n\t\t}\n\t}\n\n\t// If no node was found, create it now\n\tlet node = document.createElement( tagname );\n\tnode.className = classname;\n\tnode.innerHTML = innerHTML;\n\tcontainer.appendChild( node );\n\n\treturn node;\n\n}\n\n/**\n * Injects the given CSS styles into the DOM.\n *\n * @param {string} value\n */\nexport const createStyleSheet = ( value ) => {\n\n\tlet tag = document.createElement( 'style' );\n\ttag.type = 'text/css';\n\n\tif( value && value.length > 0 ) {\n\t\tif( tag.styleSheet ) {\n\t\t\ttag.styleSheet.cssText = value;\n\t\t}\n\t\telse {\n\t\t\ttag.appendChild( document.createTextNode( value ) );\n\t\t}\n\t}\n\n\tdocument.head.appendChild( tag );\n\n\treturn tag;\n\n}\n\n/**\n * Returns a key:value hash of all query params.\n */\nexport const getQueryHash = () => {\n\n\tlet query = {};\n\n\tlocation.search.replace( /[A-Z0-9]+?=([\\w\\.%-]*)/gi, a => {\n\t\tquery[ a.split( '=' ).shift() ] = a.split( '=' ).pop();\n\t} );\n\n\t// Basic deserialization\n\tfor( let i in query ) {\n\t\tlet value = query[ i ];\n\n\t\tquery[ i ] = deserialize( unescape( value ) );\n\t}\n\n\t// Do not accept new dependencies via query config to avoid\n\t// the potential of malicious script injection\n\tif( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies'];\n\n\treturn query;\n\n}\n\n/**\n * Returns the remaining height within the parent of the\n * target element.\n *\n * remaining height = [ configured parent height ] - [ current parent height ]\n *\n * @param {HTMLElement} element\n * @param {number} [height]\n */\nexport const getRemainingHeight = ( element, height = 0 ) => {\n\n\tif( element ) {\n\t\tlet newHeight, oldHeight = element.style.height;\n\n\t\t// Change the .stretch element height to 0 in order find the height of all\n\t\t// the other elements\n\t\telement.style.height = '0px';\n\n\t\t// In Overview mode, the parent (.slide) height is set of 700px.\n\t\t// Restore it temporarily to its natural height.\n\t\telement.parentNode.style.height = 'auto';\n\n\t\tnewHeight = height - element.parentNode.offsetHeight;\n\n\t\t// Restore the old height, just in case\n\t\telement.style.height = oldHeight + 'px';\n\n\t\t// Clear the parent (.slide) height. .removeProperty works in IE9+\n\t\telement.parentNode.style.removeProperty('height');\n\n\t\treturn newHeight;\n\t}\n\n\treturn height;\n\n}\n\nconst fileExtensionToMimeMap = {\n\t'mp4': 'video/mp4',\n\t'm4a': 'video/mp4',\n\t'ogv': 'video/ogg',\n\t'mpeg': 'video/mpeg',\n\t'webm': 'video/webm'\n}\n\n/**\n * Guess the MIME type for common file formats.\n */\nexport const getMimeTypeFromFile = ( filename='' ) => {\n\treturn fileExtensionToMimeMap[filename.split('.').pop()]\n}","const UA = navigator.userAgent;\n\nexport const isMobile = /(iphone|ipod|ipad|android)/gi.test( UA ) ||\n\t\t\t\t\t\t( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS\n\nexport const isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );\n\nexport const isAndroid = /android/gi.test( UA );","/*\n * fitty v2.3.3 - Snugly resizes text to fit its parent container\n * Copyright (c) 2020 Rik Schennink (https://pqina.nl/)\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (w) {\n\n // no window, early exit\n if (!w) return;\n\n // node list to array helper method\n var toArray = function toArray(nl) {\n return [].slice.call(nl);\n };\n\n // states\n var DrawState = {\n IDLE: 0,\n DIRTY_CONTENT: 1,\n DIRTY_LAYOUT: 2,\n DIRTY: 3\n };\n\n // all active fitty elements\n var fitties = [];\n\n // group all redraw calls till next frame, we cancel each frame request when a new one comes in. If no support for request animation frame, this is an empty function and supports for fitty stops.\n var redrawFrame = null;\n var requestRedraw = 'requestAnimationFrame' in w ? function () {\n w.cancelAnimationFrame(redrawFrame);\n redrawFrame = w.requestAnimationFrame(function () {\n return redraw(fitties.filter(function (f) {\n return f.dirty && f.active;\n }));\n });\n } : function () {};\n\n // sets all fitties to dirty so they are redrawn on the next redraw loop, then calls redraw\n var redrawAll = function redrawAll(type) {\n return function () {\n fitties.forEach(function (f) {\n return f.dirty = type;\n });\n requestRedraw();\n };\n };\n\n // redraws fitties so they nicely fit their parent container\n var redraw = function redraw(fitties) {\n\n // getting info from the DOM at this point should not trigger a reflow, let's gather as much intel as possible before triggering a reflow\n\n // check if styles of all fitties have been computed\n fitties.filter(function (f) {\n return !f.styleComputed;\n }).forEach(function (f) {\n f.styleComputed = computeStyle(f);\n });\n\n // restyle elements that require pre-styling, this triggers a reflow, please try to prevent by adding CSS rules (see docs)\n fitties.filter(shouldPreStyle).forEach(applyStyle);\n\n // we now determine which fitties should be redrawn\n var fittiesToRedraw = fitties.filter(shouldRedraw);\n\n // we calculate final styles for these fitties\n fittiesToRedraw.forEach(calculateStyles);\n\n // now we apply the calculated styles from our previous loop\n fittiesToRedraw.forEach(function (f) {\n applyStyle(f);\n markAsClean(f);\n });\n\n // now we dispatch events for all restyled fitties\n fittiesToRedraw.forEach(dispatchFitEvent);\n };\n\n var markAsClean = function markAsClean(f) {\n return f.dirty = DrawState.IDLE;\n };\n\n var calculateStyles = function calculateStyles(f) {\n\n // get available width from parent node\n f.availableWidth = f.element.parentNode.clientWidth;\n\n // the space our target element uses\n f.currentWidth = f.element.scrollWidth;\n\n // remember current font size\n f.previousFontSize = f.currentFontSize;\n\n // let's calculate the new font size\n f.currentFontSize = Math.min(Math.max(f.minSize, f.availableWidth / f.currentWidth * f.previousFontSize), f.maxSize);\n\n // if allows wrapping, only wrap when at minimum font size (otherwise would break container)\n f.whiteSpace = f.multiLine && f.currentFontSize === f.minSize ? 'normal' : 'nowrap';\n };\n\n // should always redraw if is not dirty layout, if is dirty layout, only redraw if size has changed\n var shouldRedraw = function shouldRedraw(f) {\n return f.dirty !== DrawState.DIRTY_LAYOUT || f.dirty === DrawState.DIRTY_LAYOUT && f.element.parentNode.clientWidth !== f.availableWidth;\n };\n\n // every fitty element is tested for invalid styles\n var computeStyle = function computeStyle(f) {\n\n // get style properties\n var style = w.getComputedStyle(f.element, null);\n\n // get current font size in pixels (if we already calculated it, use the calculated version)\n f.currentFontSize = parseFloat(style.getPropertyValue('font-size'));\n\n // get display type and wrap mode\n f.display = style.getPropertyValue('display');\n f.whiteSpace = style.getPropertyValue('white-space');\n };\n\n // determines if this fitty requires initial styling, can be prevented by applying correct styles through CSS\n var shouldPreStyle = function shouldPreStyle(f) {\n\n var preStyle = false;\n\n // if we already tested for prestyling we don't have to do it again\n if (f.preStyleTestCompleted) return false;\n\n // should have an inline style, if not, apply\n if (!/inline-/.test(f.display)) {\n preStyle = true;\n f.display = 'inline-block';\n }\n\n // to correctly calculate dimensions the element should have whiteSpace set to nowrap\n if (f.whiteSpace !== 'nowrap') {\n preStyle = true;\n f.whiteSpace = 'nowrap';\n }\n\n // we don't have to do this twice\n f.preStyleTestCompleted = true;\n\n return preStyle;\n };\n\n // apply styles to single fitty\n var applyStyle = function applyStyle(f) {\n f.element.style.whiteSpace = f.whiteSpace;\n f.element.style.display = f.display;\n f.element.style.fontSize = f.currentFontSize + 'px';\n };\n\n // dispatch a fit event on a fitty\n var dispatchFitEvent = function dispatchFitEvent(f) {\n f.element.dispatchEvent(new CustomEvent('fit', {\n detail: {\n oldValue: f.previousFontSize,\n newValue: f.currentFontSize,\n scaleFactor: f.currentFontSize / f.previousFontSize\n }\n }));\n };\n\n // fit method, marks the fitty as dirty and requests a redraw (this will also redraw any other fitty marked as dirty)\n var fit = function fit(f, type) {\n return function () {\n f.dirty = type;\n if (!f.active) return;\n requestRedraw();\n };\n };\n\n var init = function init(f) {\n\n // save some of the original CSS properties before we change them\n f.originalStyle = {\n whiteSpace: f.element.style.whiteSpace,\n display: f.element.style.display,\n fontSize: f.element.style.fontSize\n };\n\n // should we observe DOM mutations\n observeMutations(f);\n\n // this is a new fitty so we need to validate if it's styles are in order\n f.newbie = true;\n\n // because it's a new fitty it should also be dirty, we want it to redraw on the first loop\n f.dirty = true;\n\n // we want to be able to update this fitty\n fitties.push(f);\n };\n\n var destroy = function destroy(f) {\n return function () {\n\n // remove from fitties array\n fitties = fitties.filter(function (_) {\n return _.element !== f.element;\n });\n\n // stop observing DOM\n if (f.observeMutations) f.observer.disconnect();\n\n // reset the CSS properties we changes\n f.element.style.whiteSpace = f.originalStyle.whiteSpace;\n f.element.style.display = f.originalStyle.display;\n f.element.style.fontSize = f.originalStyle.fontSize;\n };\n };\n\n // add a new fitty, does not redraw said fitty\n var subscribe = function subscribe(f) {\n return function () {\n if (f.active) return;\n f.active = true;\n requestRedraw();\n };\n };\n\n // remove an existing fitty\n var unsubscribe = function unsubscribe(f) {\n return function () {\n return f.active = false;\n };\n };\n\n var observeMutations = function observeMutations(f) {\n\n // no observing?\n if (!f.observeMutations) return;\n\n // start observing mutations\n f.observer = new MutationObserver(fit(f, DrawState.DIRTY_CONTENT));\n\n // start observing\n f.observer.observe(f.element, f.observeMutations);\n };\n\n // default mutation observer settings\n var mutationObserverDefaultSetting = {\n subtree: true,\n childList: true,\n characterData: true\n };\n\n // default fitty options\n var defaultOptions = {\n minSize: 16,\n maxSize: 512,\n multiLine: true,\n observeMutations: 'MutationObserver' in w ? mutationObserverDefaultSetting : false\n };\n\n // array of elements in, fitty instances out\n function fittyCreate(elements, options) {\n\n // set options object\n var fittyOptions = _extends({}, defaultOptions, options);\n\n // create fitties\n var publicFitties = elements.map(function (element) {\n\n // create fitty instance\n var f = _extends({}, fittyOptions, {\n\n // internal options for this fitty\n element: element,\n active: true\n });\n\n // initialise this fitty\n init(f);\n\n // expose API\n return {\n element: element,\n fit: fit(f, DrawState.DIRTY),\n unfreeze: subscribe(f),\n freeze: unsubscribe(f),\n unsubscribe: destroy(f)\n };\n });\n\n // call redraw on newly initiated fitties\n requestRedraw();\n\n // expose fitties\n return publicFitties;\n }\n\n // fitty creation function\n function fitty(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n // if target is a string\n return typeof target === 'string' ?\n\n // treat it as a querySelector\n fittyCreate(toArray(document.querySelectorAll(target)), options) :\n\n // create single fitty\n fittyCreate([target], options)[0];\n }\n\n // handles viewport changes, redraws all fitties, but only does so after a timeout\n var resizeDebounce = null;\n var onWindowResized = function onWindowResized() {\n w.clearTimeout(resizeDebounce);\n resizeDebounce = w.setTimeout(redrawAll(DrawState.DIRTY_LAYOUT), fitty.observeWindowDelay);\n };\n\n // define observe window property, so when we set it to true or false events are automatically added and removed\n var events = ['resize', 'orientationchange'];\n Object.defineProperty(fitty, 'observeWindow', {\n set: function set(enabled) {\n var method = (enabled ? 'add' : 'remove') + 'EventListener';\n events.forEach(function (e) {\n w[method](e, onWindowResized);\n });\n }\n });\n\n // fitty global properties (by setting observeWindow to true the events above get added)\n fitty.observeWindow = true;\n fitty.observeWindowDelay = 100;\n\n // public fit all method, will force redraw no matter what\n fitty.fitAll = redrawAll(DrawState.DIRTY);\n\n // export our fitty function, we don't want to keep it to our selves\n return fitty;\n}(typeof window === 'undefined' ? null : window);","import { extend, queryAll, closest, getMimeTypeFromFile } from '../utils/util.js'\nimport { isMobile } from '../utils/device.js'\n\nimport fitty from 'fitty';\n\n/**\n * Handles loading, unloading and playback of slide\n * content such as images, videos and iframes.\n */\nexport default class SlideContent {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.startEmbeddedIframe = this.startEmbeddedIframe.bind( this );\n\n\t}\n\n\t/**\n\t * Should the given element be preloaded?\n\t * Decides based on local element attributes and global config.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tshouldPreload( element ) {\n\n\t\t// Prefer an explicit global preload setting\n\t\tlet preload = this.Reveal.getConfig().preloadIframes;\n\n\t\t// If no global setting is available, fall back on the element's\n\t\t// own preload setting\n\t\tif( typeof preload !== 'boolean' ) {\n\t\t\tpreload = element.hasAttribute( 'data-preload' );\n\t\t}\n\n\t\treturn preload;\n\t}\n\n\t/**\n\t * Called when the given slide is within the configured view\n\t * distance. Shows the slide element and loads any content\n\t * that is set to load lazily (data-src).\n\t *\n\t * @param {HTMLElement} slide Slide to show\n\t */\n\tload( slide, options = {} ) {\n\n\t\t// Show the slide element\n\t\tslide.style.display = this.Reveal.getConfig().display;\n\n\t\t// Media elements with data-src attributes\n\t\tqueryAll( slide, 'img[data-src], video[data-src], audio[data-src], iframe[data-src]' ).forEach( element => {\n\t\t\tif( element.tagName !== 'IFRAME' || this.shouldPreload( element ) ) {\n\t\t\t\telement.setAttribute( 'src', element.getAttribute( 'data-src' ) );\n\t\t\t\telement.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\telement.removeAttribute( 'data-src' );\n\t\t\t}\n\t\t} );\n\n\t\t// Media elements with children\n\t\tqueryAll( slide, 'video, audio' ).forEach( media => {\n\t\t\tlet sources = 0;\n\n\t\t\tqueryAll( media, 'source[data-src]' ).forEach( source => {\n\t\t\t\tsource.setAttribute( 'src', source.getAttribute( 'data-src' ) );\n\t\t\t\tsource.removeAttribute( 'data-src' );\n\t\t\t\tsource.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\tsources += 1;\n\t\t\t} );\n\n\t\t\t// Enable inline video playback in mobile Safari\n\t\t\tif( isMobile && media.tagName === 'VIDEO' ) {\n\t\t\t\tmedia.setAttribute( 'playsinline', '' );\n\t\t\t}\n\n\t\t\t// If we rewrote sources for this video/audio element, we need\n\t\t\t// to manually tell it to load from its new origin\n\t\t\tif( sources > 0 ) {\n\t\t\t\tmedia.load();\n\t\t\t}\n\t\t} );\n\n\n\t\t// Show the corresponding background element\n\t\tlet background = slide.slideBackgroundElement;\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'block';\n\n\t\t\tlet backgroundContent = slide.slideBackgroundContentElement;\n\t\t\tlet backgroundIframe = slide.getAttribute( 'data-background-iframe' );\n\n\t\t\t// If the background contains media, load it\n\t\t\tif( background.hasAttribute( 'data-loaded' ) === false ) {\n\t\t\t\tbackground.setAttribute( 'data-loaded', 'true' );\n\n\t\t\t\tlet backgroundImage = slide.getAttribute( 'data-background-image' ),\n\t\t\t\t\tbackgroundVideo = slide.getAttribute( 'data-background-video' ),\n\t\t\t\t\tbackgroundVideoLoop = slide.hasAttribute( 'data-background-video-loop' ),\n\t\t\t\t\tbackgroundVideoMuted = slide.hasAttribute( 'data-background-video-muted' );\n\n\t\t\t\t// Images\n\t\t\t\tif( backgroundImage ) {\n\t\t\t\t\t// base64\n\t\t\t\t\tif( /^data:/.test( backgroundImage.trim() ) ) {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = `url(${backgroundImage.trim()})`;\n\t\t\t\t\t}\n\t\t\t\t\t// URL(s)\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => {\n\t\t\t\t\t\t\treturn `url(${encodeURI(background.trim())})`;\n\t\t\t\t\t\t}).join( ',' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Videos\n\t\t\t\telse if ( backgroundVideo && !this.Reveal.isSpeakerNotes() ) {\n\t\t\t\t\tlet video = document.createElement( 'video' );\n\n\t\t\t\t\tif( backgroundVideoLoop ) {\n\t\t\t\t\t\tvideo.setAttribute( 'loop', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif( backgroundVideoMuted ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Enable inline playback in mobile Safari\n\t\t\t\t\t//\n\t\t\t\t\t// Mute is required for video to play when using\n\t\t\t\t\t// swipe gestures to navigate since they don't\n\t\t\t\t\t// count as direct user actions :'(\n\t\t\t\t\tif( isMobile ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t\tvideo.setAttribute( 'playsinline', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support comma separated lists of video sources\n\t\t\t\t\tbackgroundVideo.split( ',' ).forEach( source => {\n\t\t\t\t\t\tlet type = getMimeTypeFromFile( source );\n\t\t\t\t\t\tif( type ) {\n\t\t\t\t\t\t\tvideo.innerHTML += ``;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvideo.innerHTML += ``;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tbackgroundContent.appendChild( video );\n\t\t\t\t}\n\t\t\t\t// Iframes\n\t\t\t\telse if( backgroundIframe && options.excludeIframes !== true ) {\n\t\t\t\t\tlet iframe = document.createElement( 'iframe' );\n\t\t\t\t\tiframe.setAttribute( 'allowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'mozallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'webkitallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'allow', 'autoplay' );\n\n\t\t\t\t\tiframe.setAttribute( 'data-src', backgroundIframe );\n\n\t\t\t\t\tiframe.style.width = '100%';\n\t\t\t\t\tiframe.style.height = '100%';\n\t\t\t\t\tiframe.style.maxHeight = '100%';\n\t\t\t\t\tiframe.style.maxWidth = '100%';\n\n\t\t\t\t\tbackgroundContent.appendChild( iframe );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start loading preloadable iframes\n\t\t\tlet backgroundIframeElement = backgroundContent.querySelector( 'iframe[data-src]' );\n\t\t\tif( backgroundIframeElement ) {\n\n\t\t\t\t// Check if this iframe is eligible to be preloaded\n\t\t\t\tif( this.shouldPreload( background ) && !/autoplay=(1|true|yes)/gi.test( backgroundIframe ) ) {\n\t\t\t\t\tif( backgroundIframeElement.getAttribute( 'src' ) !== backgroundIframe ) {\n\t\t\t\t\t\tbackgroundIframeElement.setAttribute( 'src', backgroundIframe );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.layout( slide );\n\n\t}\n\n\t/**\n\t * Applies JS-dependent layout helpers for the given slide,\n\t * if there are any.\n\t */\n\tlayout( slide ) {\n\n\t\t// Autosize text with the r-fit-text class based on the\n\t\t// size of its container. This needs to happen after the\n\t\t// slide is visible in order to measure the text.\n\t\tArray.from( slide.querySelectorAll( '.r-fit-text' ) ).forEach( element => {\n\t\t\tfitty( element, {\n\t\t\t\tminSize: 24,\n\t\t\t\tmaxSize: this.Reveal.getConfig().height * 0.8,\n\t\t\t\tobserveMutations: false,\n\t\t\t\tobserveWindow: false\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unloads and hides the given slide. This is called when the\n\t * slide is moved outside of the configured view distance.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tunload( slide ) {\n\n\t\t// Hide the slide element\n\t\tslide.style.display = 'none';\n\n\t\t// Hide the corresponding background element\n\t\tlet background = this.Reveal.getSlideBackground( slide );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'none';\n\n\t\t\t// Unload any background iframes\n\t\t\tqueryAll( background, 'iframe[src]' ).forEach( element => {\n\t\t\t\telement.removeAttribute( 'src' );\n\t\t\t} );\n\t\t}\n\n\t\t// Reset lazy-loaded media elements with src attributes\n\t\tqueryAll( slide, 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]' ).forEach( element => {\n\t\t\telement.setAttribute( 'data-src', element.getAttribute( 'src' ) );\n\t\t\telement.removeAttribute( 'src' );\n\t\t} );\n\n\t\t// Reset lazy-loaded media elements with children\n\t\tqueryAll( slide, 'video[data-lazy-loaded] source[src], audio source[src]' ).forEach( source => {\n\t\t\tsource.setAttribute( 'data-src', source.getAttribute( 'src' ) );\n\t\t\tsource.removeAttribute( 'src' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Enforces origin-specific format rules for embedded media.\n\t */\n\tformatEmbeddedContent() {\n\n\t\tlet _appendParamToIframeSource = ( sourceAttribute, sourceURL, param ) => {\n\t\t\tqueryAll( this.Reveal.getSlidesElement(), 'iframe['+ sourceAttribute +'*=\"'+ sourceURL +'\"]' ).forEach( el => {\n\t\t\t\tlet src = el.getAttribute( sourceAttribute );\n\t\t\t\tif( src && src.indexOf( param ) === -1 ) {\n\t\t\t\t\tel.setAttribute( sourceAttribute, src + ( !/\\?/.test( src ) ? '?' : '&' ) + param );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// YouTube frames must include \"?enablejsapi=1\"\n\t\t_appendParamToIframeSource( 'src', 'youtube.com/embed/', 'enablejsapi=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'youtube.com/embed/', 'enablejsapi=1' );\n\n\t\t// Vimeo frames must include \"?api=1\"\n\t\t_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );\n\n\t}\n\n\t/**\n\t * Start playback of any embedded content inside of\n\t * the given element.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstartEmbeddedContent( element ) {\n\n\t\tif( element && !this.Reveal.isSpeakerNotes() ) {\n\n\t\t\t// Restart GIFs\n\t\t\tqueryAll( element, 'img[src$=\".gif\"]' ).forEach( el => {\n\t\t\t\t// Setting the same unchanged source like this was confirmed\n\t\t\t\t// to work in Chrome, FF & Safari\n\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'src' ) );\n\t\t\t} );\n\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = el.hasAttribute( 'data-autoplay' ) || !!closest( el, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\tif( autoplay && typeof el.play === 'function' ) {\n\n\t\t\t\t\t// If the media is ready, start playback\n\t\t\t\t\tif( el.readyState > 1 ) {\n\t\t\t\t\t\tthis.startEmbeddedMedia( { target: el } );\n\t\t\t\t\t}\n\t\t\t\t\t// Mobile devices never fire a loaded event so instead\n\t\t\t\t\t// of waiting, we initiate playback\n\t\t\t\t\telse if( isMobile ) {\n\t\t\t\t\t\tlet promise = el.play();\n\n\t\t\t\t\t\t// If autoplay does not work, ensure that the controls are visible so\n\t\t\t\t\t\t// that the viewer can start the media on their own\n\t\t\t\t\t\tif( promise && typeof promise.catch === 'function' && el.controls === false ) {\n\t\t\t\t\t\t\tpromise.catch( () => {\n\t\t\t\t\t\t\t\tel.controls = true;\n\n\t\t\t\t\t\t\t\t// Once the video does start playing, hide the controls again\n\t\t\t\t\t\t\t\tel.addEventListener( 'play', () => {\n\t\t\t\t\t\t\t\t\tel.controls = false;\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If the media isn't loaded, wait before playing\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.removeEventListener( 'loadeddata', this.startEmbeddedMedia ); // remove first to avoid dupes\n\t\t\t\t\t\tel.addEventListener( 'loadeddata', this.startEmbeddedMedia );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Normal iframes\n\t\t\tqueryAll( element, 'iframe[src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.startEmbeddedIframe( { target: el } );\n\t\t\t} );\n\n\t\t\t// Lazy loading iframes\n\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {\n\t\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes\n\t\t\t\t\tel.addEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'data-src' ) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Starts playing an embedded video/audio element after\n\t * it has finished loading.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedMedia( event ) {\n\n\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\tif( isAttachedToDOM && isVisible ) {\n\t\t\tevent.target.currentTime = 0;\n\t\t\tevent.target.play();\n\t\t}\n\n\t\tevent.target.removeEventListener( 'loadeddata', this.startEmbeddedMedia );\n\n\t}\n\n\t/**\n\t * \"Starts\" the content of an embedded iframe using the\n\t * postMessage API.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedIframe( event ) {\n\n\t\tlet iframe = event.target;\n\n\t\tif( iframe && iframe.contentWindow ) {\n\n\t\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\t\tif( isAttachedToDOM && isVisible ) {\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = iframe.hasAttribute( 'data-autoplay' ) || !!closest( iframe, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\t// YouTube postMessage API\n\t\t\t\tif( /youtube\\.com\\/embed\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Vimeo postMessage API\n\t\t\t\telse if( /player\\.vimeo\\.com\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"method\":\"play\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Generic postMessage API\n\t\t\t\telse {\n\t\t\t\t\tiframe.contentWindow.postMessage( 'slide:start', '*' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop playback of any embedded content inside of\n\t * the targeted slide.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstopEmbeddedContent( element, options = {} ) {\n\n\t\toptions = extend( {\n\t\t\t// Defaults\n\t\t\tunloadIframes: true\n\t\t}, options );\n\n\t\tif( element && element.parentNode ) {\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.pause === 'function' ) {\n\t\t\t\t\tel.setAttribute('data-paused-by-reveal', '');\n\t\t\t\t\tel.pause();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Generic postMessage API for non-lazy loaded iframes\n\t\t\tqueryAll( element, 'iframe' ).forEach( el => {\n\t\t\t\tif( el.contentWindow ) el.contentWindow.postMessage( 'slide:stop', '*' );\n\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t});\n\n\t\t\t// YouTube postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"youtube.com/embed/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"player.vimeo.com/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"pause\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif( options.unloadIframes === true ) {\n\t\t\t\t// Unload lazy-loaded iframes\n\t\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\t\t// Only removing the src doesn't actually unload the frame\n\t\t\t\t\t// in all browsers (Firefox) so we set it to blank first\n\t\t\t\t\tel.setAttribute( 'src', 'about:blank' );\n\t\t\t\t\tel.removeAttribute( 'src' );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n","/**\n * Handles the display of reveal.js' optional slide number.\n */\nexport default class SlideNumber {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'slide-number';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tlet slideNumberDisplay = 'none';\n\t\tif( config.slideNumber && !this.Reveal.isPrintingPDF() ) {\n\t\t\tif( config.showSlideNumber === 'all' ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t\telse if( config.showSlideNumber === 'speaker' && this.Reveal.isSpeakerNotes() ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t}\n\n\t\tthis.element.style.display = slideNumberDisplay;\n\n\t}\n\n\t/**\n\t * Updates the slide number to match the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update slide number if enabled\n\t\tif( this.Reveal.getConfig().slideNumber && this.element ) {\n\t\t\tthis.element.innerHTML = this.getSlideNumber();\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the HTML string corresponding to the current slide\n\t * number, including formatting.\n\t */\n\tgetSlideNumber( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet value;\n\t\tlet format = 'h.v';\n\n\t\tif ( typeof config.slideNumber === 'function' ) {\n\t\t\tvalue = config.slideNumber( slide );\n\t\t} else {\n\t\t\t// Check if a custom number format is available\n\t\t\tif( typeof config.slideNumber === 'string' ) {\n\t\t\t\tformat = config.slideNumber;\n\t\t\t}\n\n\t\t\t// If there are ONLY vertical slides in this deck, always use\n\t\t\t// a flattened slide number\n\t\t\tif( !/c/.test( format ) && this.Reveal.getHorizontalSlides().length === 1 ) {\n\t\t\t\tformat = 'c';\n\t\t\t}\n\n\t\t\t// Offset the current slide number by 1 to make it 1-indexed\n\t\t\tlet horizontalOffset = slide && slide.dataset.visibility === 'uncounted' ? 0 : 1;\n\n\t\t\tvalue = [];\n\t\t\tswitch( format ) {\n\t\t\t\tcase 'c':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c/t':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset, '/', this.Reveal.getTotalSlides() );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlet indices = this.Reveal.getIndices( slide );\n\t\t\t\t\tvalue.push( indices.h + horizontalOffset );\n\t\t\t\t\tlet sep = format === 'h/v' ? '/' : '.';\n\t\t\t\t\tif( this.Reveal.isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );\n\t\t\t}\n\t\t}\n\n\t\tlet url = '#' + this.Reveal.location.getHash( slide );\n\t\treturn this.formatNumber( value[0], value[1], value[2], url );\n\n\t}\n\n\t/**\n\t * Applies HTML formatting to a slide number before it's\n\t * written to the DOM.\n\t *\n\t * @param {number} a Current slide\n\t * @param {string} delimiter Character to separate slide numbers\n\t * @param {(number|*)} b Total slides\n\t * @param {HTMLElement} [url='#'+locationHash()] The url to link to\n\t * @return {string} HTML string fragment\n\t */\n\tformatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHash() ) {\n\n\t\tif( typeof b === 'number' && !isNaN( b ) ) {\n\t\t\treturn `\n\t\t\t\t\t${a}\n\t\t\t\t\t${delimiter}\n\t\t\t\t\t${b}\n\t\t\t\t\t`;\n\t\t}\n\t\telse {\n\t\t\treturn `\n\t\t\t\t\t${a}\n\t\t\t\t\t`;\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}","/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string representation of a color\n * @example\n * colorToRgb('#000');\n * @example\n * colorToRgb('#000000');\n * @example\n * colorToRgb('rgb(0,0,0)');\n * @example\n * colorToRgb('rgba(0,0,0)');\n *\n * @return {{r: number, g: number, b: number, [a]: number}|null}\n */\nexport const colorToRgb = ( color ) => {\n\n\tlet hex3 = color.match( /^#([0-9a-f]{3})$/i );\n\tif( hex3 && hex3[1] ) {\n\t\thex3 = hex3[1];\n\t\treturn {\n\t\t\tr: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,\n\t\t\tg: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,\n\t\t\tb: parseInt( hex3.charAt( 2 ), 16 ) * 0x11\n\t\t};\n\t}\n\n\tlet hex6 = color.match( /^#([0-9a-f]{6})$/i );\n\tif( hex6 && hex6[1] ) {\n\t\thex6 = hex6[1];\n\t\treturn {\n\t\t\tr: parseInt( hex6.slice( 0, 2 ), 16 ),\n\t\t\tg: parseInt( hex6.slice( 2, 4 ), 16 ),\n\t\t\tb: parseInt( hex6.slice( 4, 6 ), 16 )\n\t\t};\n\t}\n\n\tlet rgb = color.match( /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i );\n\tif( rgb ) {\n\t\treturn {\n\t\t\tr: parseInt( rgb[1], 10 ),\n\t\t\tg: parseInt( rgb[2], 10 ),\n\t\t\tb: parseInt( rgb[3], 10 )\n\t\t};\n\t}\n\n\tlet rgba = color.match( /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\,\\s*([\\d]+|[\\d]*.[\\d]+)\\s*\\)$/i );\n\tif( rgba ) {\n\t\treturn {\n\t\t\tr: parseInt( rgba[1], 10 ),\n\t\t\tg: parseInt( rgba[2], 10 ),\n\t\t\tb: parseInt( rgba[3], 10 ),\n\t\t\ta: parseFloat( rgba[4] )\n\t\t};\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Calculates brightness on a scale of 0-255.\n *\n * @param {string} color See colorToRgb for supported formats.\n * @see {@link colorToRgb}\n */\nexport const colorBrightness = ( color ) => {\n\n\tif( typeof color === 'string' ) color = colorToRgb( color );\n\n\tif( color ) {\n\t\treturn ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;\n\t}\n\n\treturn null;\n\n}","import { queryAll } from '../utils/util.js'\nimport { colorToRgb, colorBrightness } from '../utils/color.js'\n\n/**\n * Creates and updates slide backgrounds.\n */\nexport default class Backgrounds {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'backgrounds';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Creates the slide background elements and appends them\n\t * to the background container. One element is created per\n\t * slide no matter if the given slide has visible background.\n\t */\n\tcreate() {\n\n\t\t// Clear prior backgrounds\n\t\tthis.element.innerHTML = '';\n\t\tthis.element.classList.add( 'no-transition' );\n\n\t\t// Iterate over all horizontal slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( slideh => {\n\n\t\t\tlet backgroundStack = this.createBackground( slideh, this.element );\n\n\t\t\t// Iterate over all vertical slides\n\t\t\tqueryAll( slideh, 'section' ).forEach( slidev => {\n\n\t\t\t\tthis.createBackground( slidev, backgroundStack );\n\n\t\t\t\tbackgroundStack.classList.add( 'stack' );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t// Add parallax background if specified\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tthis.element.style.backgroundImage = 'url(\"' + this.Reveal.getConfig().parallaxBackgroundImage + '\")';\n\t\t\tthis.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;\n\t\t\tthis.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;\n\t\t\tthis.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;\n\n\t\t\t// Make sure the below properties are set on the element - these properties are\n\t\t\t// needed for proper transitions to be set on the element via CSS. To remove\n\t\t\t// annoying background slide-in effect when the presentation starts, apply\n\t\t\t// these properties after short time delay\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.add( 'has-parallax-background' );\n\t\t\t}, 1 );\n\n\t\t}\n\t\telse {\n\n\t\t\tthis.element.style.backgroundImage = '';\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a background for the given slide.\n\t *\n\t * @param {HTMLElement} slide\n\t * @param {HTMLElement} container The element that the background\n\t * should be appended to\n\t * @return {HTMLElement} New background div\n\t */\n\tcreateBackground( slide, container ) {\n\n\t\t// Main slide background element\n\t\tlet element = document.createElement( 'div' );\n\t\telement.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' );\n\n\t\t// Inner background element that wraps images/videos/iframes\n\t\tlet contentElement = document.createElement( 'div' );\n\t\tcontentElement.className = 'slide-background-content';\n\n\t\telement.appendChild( contentElement );\n\t\tcontainer.appendChild( element );\n\n\t\tslide.slideBackgroundElement = element;\n\t\tslide.slideBackgroundContentElement = contentElement;\n\n\t\t// Syncs the background to reflect all current background settings\n\t\tthis.sync( slide );\n\n\t\treturn element;\n\n\t}\n\n\t/**\n\t * Renders all of the visual properties of a slide background\n\t * based on the various background attributes.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tsync( slide ) {\n\n\t\tconst element = slide.slideBackgroundElement,\n\t\t\tcontentElement = slide.slideBackgroundContentElement;\n\n\t\tconst data = {\n\t\t\tbackground: slide.getAttribute( 'data-background' ),\n\t\t\tbackgroundSize: slide.getAttribute( 'data-background-size' ),\n\t\t\tbackgroundImage: slide.getAttribute( 'data-background-image' ),\n\t\t\tbackgroundVideo: slide.getAttribute( 'data-background-video' ),\n\t\t\tbackgroundIframe: slide.getAttribute( 'data-background-iframe' ),\n\t\t\tbackgroundColor: slide.getAttribute( 'data-background-color' ),\n\t\t\tbackgroundRepeat: slide.getAttribute( 'data-background-repeat' ),\n\t\t\tbackgroundPosition: slide.getAttribute( 'data-background-position' ),\n\t\t\tbackgroundTransition: slide.getAttribute( 'data-background-transition' ),\n\t\t\tbackgroundOpacity: slide.getAttribute( 'data-background-opacity' ),\n\t\t};\n\n\t\tconst dataPreload = slide.hasAttribute( 'data-preload' );\n\n\t\t// Reset the prior background state in case this is not the\n\t\t// initial sync\n\t\tslide.classList.remove( 'has-dark-background' );\n\t\tslide.classList.remove( 'has-light-background' );\n\n\t\telement.removeAttribute( 'data-loaded' );\n\t\telement.removeAttribute( 'data-background-hash' );\n\t\telement.removeAttribute( 'data-background-size' );\n\t\telement.removeAttribute( 'data-background-transition' );\n\t\telement.style.backgroundColor = '';\n\n\t\tcontentElement.style.backgroundSize = '';\n\t\tcontentElement.style.backgroundRepeat = '';\n\t\tcontentElement.style.backgroundPosition = '';\n\t\tcontentElement.style.backgroundImage = '';\n\t\tcontentElement.style.opacity = '';\n\t\tcontentElement.innerHTML = '';\n\n\t\tif( data.background ) {\n\t\t\t// Auto-wrap image urls in url(...)\n\t\t\tif( /^(http|file|\\/\\/)/gi.test( data.background ) || /\\.(svg|png|jpg|jpeg|gif|bmp)([?#\\s]|$)/gi.test( data.background ) ) {\n\t\t\t\tslide.setAttribute( 'data-background-image', data.background );\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.background = data.background;\n\t\t\t}\n\t\t}\n\n\t\t// Create a hash for this combination of background settings.\n\t\t// This is used to determine when two slide backgrounds are\n\t\t// the same.\n\t\tif( data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) {\n\t\t\telement.setAttribute( 'data-background-hash', data.background +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundSize +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundImage +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundVideo +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundIframe +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundColor +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundRepeat +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundPosition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundTransition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundOpacity );\n\t\t}\n\n\t\t// Additional and optional background properties\n\t\tif( data.backgroundSize ) element.setAttribute( 'data-background-size', data.backgroundSize );\n\t\tif( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor;\n\t\tif( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition );\n\n\t\tif( dataPreload ) element.setAttribute( 'data-preload', '' );\n\n\t\t// Background image options are set on the content wrapper\n\t\tif( data.backgroundSize ) contentElement.style.backgroundSize = data.backgroundSize;\n\t\tif( data.backgroundRepeat ) contentElement.style.backgroundRepeat = data.backgroundRepeat;\n\t\tif( data.backgroundPosition ) contentElement.style.backgroundPosition = data.backgroundPosition;\n\t\tif( data.backgroundOpacity ) contentElement.style.opacity = data.backgroundOpacity;\n\n\t\t// If this slide has a background color, we add a class that\n\t\t// signals if it is light or dark. If the slide has no background\n\t\t// color, no class will be added\n\t\tlet contrastColor = data.backgroundColor;\n\n\t\t// If no bg color was found, or it cannot be converted by colorToRgb, check the computed background\n\t\tif( !contrastColor || !colorToRgb( contrastColor ) ) {\n\t\t\tlet computedBackgroundStyle = window.getComputedStyle( element );\n\t\t\tif( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) {\n\t\t\t\tcontrastColor = computedBackgroundStyle.backgroundColor;\n\t\t\t}\n\t\t}\n\n\t\tif( contrastColor ) {\n\t\t\tconst rgb = colorToRgb( contrastColor );\n\n\t\t\t// Ignore fully transparent backgrounds. Some browsers return\n\t\t\t// rgba(0,0,0,0) when reading the computed background color of\n\t\t\t// an element with no background\n\t\t\tif( rgb && rgb.a !== 0 ) {\n\t\t\t\tif( colorBrightness( contrastColor ) < 128 ) {\n\t\t\t\t\tslide.classList.add( 'has-dark-background' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.classList.add( 'has-light-background' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the background elements to reflect the current\n\t * slide.\n\t *\n\t * @param {boolean} includeAll If true, the backgrounds of\n\t * all vertical slides (not just the present) will be updated.\n\t */\n\tupdate( includeAll = false ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tlet currentBackground = null;\n\n\t\t// Reverse past/future classes when in RTL mode\n\t\tlet horizontalPast = this.Reveal.getConfig().rtl ? 'future' : 'past',\n\t\t\thorizontalFuture = this.Reveal.getConfig().rtl ? 'past' : 'future';\n\n\t\t// Update the classes of all backgrounds to match the\n\t\t// states of their slides (past/present/future)\n\t\tArray.from( this.element.childNodes ).forEach( ( backgroundh, h ) => {\n\n\t\t\tbackgroundh.classList.remove( 'past', 'present', 'future' );\n\n\t\t\tif( h < indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalPast );\n\t\t\t}\n\t\t\telse if ( h > indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalFuture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundh.classList.add( 'present' );\n\n\t\t\t\t// Store a reference to the current background element\n\t\t\t\tcurrentBackground = backgroundh;\n\t\t\t}\n\n\t\t\tif( includeAll || h === indices.h ) {\n\t\t\t\tqueryAll( backgroundh, '.slide-background' ).forEach( ( backgroundv, v ) => {\n\n\t\t\t\t\tbackgroundv.classList.remove( 'past', 'present', 'future' );\n\n\t\t\t\t\tif( v < indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'past' );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( v > indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'future' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundv.classList.add( 'present' );\n\n\t\t\t\t\t\t// Only if this is the present horizontal and vertical slide\n\t\t\t\t\t\tif( h === indices.h ) currentBackground = backgroundv;\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t} );\n\n\t\t// Stop content inside of previous backgrounds\n\t\tif( this.previousBackground ) {\n\n\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ) } );\n\n\t\t}\n\n\t\t// Start content in the current background\n\t\tif( currentBackground ) {\n\n\t\t\tthis.Reveal.slideContent.startEmbeddedContent( currentBackground );\n\n\t\t\tlet currentBackgroundContent = currentBackground.querySelector( '.slide-background-content' );\n\t\t\tif( currentBackgroundContent ) {\n\n\t\t\t\tlet backgroundImageURL = currentBackgroundContent.style.backgroundImage || '';\n\n\t\t\t\t// Restart GIFs (doesn't work in Firefox)\n\t\t\t\tif( /\\.gif/i.test( backgroundImageURL ) ) {\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = '';\n\t\t\t\t\twindow.getComputedStyle( currentBackgroundContent ).opacity;\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = backgroundImageURL;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Don't transition between identical backgrounds. This\n\t\t\t// prevents unwanted flicker.\n\t\t\tlet previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;\n\t\t\tlet currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );\n\t\t\tif( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {\n\t\t\t\tthis.element.classList.add( 'no-transition' );\n\t\t\t}\n\n\t\t\tthis.previousBackground = currentBackground;\n\n\t\t}\n\n\t\t// If there's a background brightness flag for this slide,\n\t\t// bubble it to the .reveal container\n\t\tif( currentSlide ) {\n\t\t\t[ 'has-light-background', 'has-dark-background' ].forEach( classToBubble => {\n\t\t\t\tif( currentSlide.classList.contains( classToBubble ) ) {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.add( classToBubble );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.remove( classToBubble );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t}\n\n\t\t// Allow the first background to apply without transition\n\t\tsetTimeout( () => {\n\t\t\tthis.element.classList.remove( 'no-transition' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Updates the position of the parallax background based\n\t * on the current slide index.\n\t */\n\tupdateParallax() {\n\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tlet horizontalSlides = this.Reveal.getHorizontalSlides(),\n\t\t\t\tverticalSlides = this.Reveal.getVerticalSlides();\n\n\t\t\tlet backgroundSize = this.element.style.backgroundSize.split( ' ' ),\n\t\t\t\tbackgroundWidth, backgroundHeight;\n\n\t\t\tif( backgroundSize.length === 1 ) {\n\t\t\t\tbackgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundWidth = parseInt( backgroundSize[0], 10 );\n\t\t\t\tbackgroundHeight = parseInt( backgroundSize[1], 10 );\n\t\t\t}\n\n\t\t\tlet slideWidth = this.element.offsetWidth,\n\t\t\t\thorizontalSlideCount = horizontalSlides.length,\n\t\t\t\thorizontalOffsetMultiplier,\n\t\t\t\thorizontalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundHorizontal === 'number' ) {\n\t\t\t\thorizontalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundHorizontal;\n\t\t\t}\n\t\t\telse {\n\t\t\t\thorizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0;\n\t\t\t}\n\n\t\t\thorizontalOffset = horizontalOffsetMultiplier * indices.h * -1;\n\n\t\t\tlet slideHeight = this.element.offsetHeight,\n\t\t\t\tverticalSlideCount = verticalSlides.length,\n\t\t\t\tverticalOffsetMultiplier,\n\t\t\t\tverticalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundVertical === 'number' ) {\n\t\t\t\tverticalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundVertical;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tverticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 );\n\t\t\t}\n\n\t\t\tverticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;\n\n\t\t\tthis.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';\n\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}\n","\nexport const SLIDES_SELECTOR = '.slides section';\nexport const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';\nexport const VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section';\n\n// Methods that may not be invoked via the postMessage API\nexport const POST_MESSAGE_METHOD_BLACKLIST = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/;\n\n// Regex for retrieving the fragment style from a class attribute\nexport const FRAGMENT_STYLE_REGEX = /fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;","import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util.js'\nimport { FRAGMENT_STYLE_REGEX } from '../utils/constants.js'\n\n// Counter used to generate unique IDs for auto-animated elements\nlet autoAnimateCounter = 0;\n\n/**\n * Automatically animates matching elements across\n * slides with the [data-auto-animate] attribute.\n */\nexport default class AutoAnimate {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Runs an auto-animation between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t */\n\trun( fromSlide, toSlide ) {\n\n\t\t// Clean up after prior animations\n\t\tthis.reset();\n\n\t\tlet allSlides = this.Reveal.getSlides();\n\t\tlet toSlideIndex = allSlides.indexOf( toSlide );\n\t\tlet fromSlideIndex = allSlides.indexOf( fromSlide );\n\n\t\t// Ensure that both slides are auto-animate targets with the same data-auto-animate-id value\n\t\t// (including null if absent on both) and that data-auto-animate-restart isn't set on the\n\t\t// physically latter slide (independent of slide direction)\n\t\tif( fromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t&& fromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) \n\t\t\t\t&& !( toSlideIndex > fromSlideIndex ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t// Create a new auto-animate sheet\n\t\t\tthis.autoAnimateStyleSheet = this.autoAnimateStyleSheet || createStyleSheet();\n\n\t\t\tlet animationOptions = this.getAutoAnimateOptions( toSlide );\n\n\t\t\t// Set our starting state\n\t\t\tfromSlide.dataset.autoAnimate = 'pending';\n\t\t\ttoSlide.dataset.autoAnimate = 'pending';\n\n\t\t\t// Flag the navigation direction, needed for fragment buildup\n\t\t\tanimationOptions.slideDirection = toSlideIndex > fromSlideIndex ? 'forward' : 'backward';\n\n\t\t\t// Inject our auto-animate styles for this transition\n\t\t\tlet css = this.getAutoAnimatableElements( fromSlide, toSlide ).map( elements => {\n\t\t\t\treturn this.autoAnimateElements( elements.from, elements.to, elements.options || {}, animationOptions, autoAnimateCounter++ );\n\t\t\t} );\n\n\t\t\t// Animate unmatched elements, if enabled\n\t\t\tif( toSlide.dataset.autoAnimateUnmatched !== 'false' && this.Reveal.getConfig().autoAnimateUnmatched === true ) {\n\n\t\t\t\t// Our default timings for unmatched elements\n\t\t\t\tlet defaultUnmatchedDuration = animationOptions.duration * 0.8,\n\t\t\t\t\tdefaultUnmatchedDelay = animationOptions.duration * 0.2;\n\n\t\t\t\tthis.getUnmatchedAutoAnimateElements( toSlide ).forEach( unmatchedElement => {\n\n\t\t\t\t\tlet unmatchedOptions = this.getAutoAnimateOptions( unmatchedElement, animationOptions );\n\t\t\t\t\tlet id = 'unmatched';\n\n\t\t\t\t\t// If there is a duration or delay set specifically for this\n\t\t\t\t\t// element our unmatched elements should adhere to those\n\t\t\t\t\tif( unmatchedOptions.duration !== animationOptions.duration || unmatchedOptions.delay !== animationOptions.delay ) {\n\t\t\t\t\t\tid = 'unmatched-' + autoAnimateCounter++;\n\t\t\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"${id}\"] { transition: opacity ${unmatchedOptions.duration}s ease ${unmatchedOptions.delay}s; }` );\n\t\t\t\t\t}\n\n\t\t\t\t\tunmatchedElement.dataset.autoAnimateTarget = id;\n\n\t\t\t\t}, this );\n\n\t\t\t\t// Our default transition for unmatched elements\n\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"unmatched\"] { transition: opacity ${defaultUnmatchedDuration}s ease ${defaultUnmatchedDelay}s; }` );\n\n\t\t\t}\n\n\t\t\t// Setting the whole chunk of CSS at once is the most\n\t\t\t// efficient way to do this. Using sheet.insertRule\n\t\t\t// is multiple factors slower.\n\t\t\tthis.autoAnimateStyleSheet.innerHTML = css.join( '' );\n\n\t\t\t// Start the animation next cycle\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\tif( this.autoAnimateStyleSheet ) {\n\t\t\t\t\t// This forces our newly injected styles to be applied in Firefox\n\t\t\t\t\tgetComputedStyle( this.autoAnimateStyleSheet ).fontWeight;\n\n\t\t\t\t\ttoSlide.dataset.autoAnimate = 'running';\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'autoanimate',\n\t\t\t\tdata: {\n\t\t\t\t\tfromSlide,\n\t\t\t\t\ttoSlide,\n\t\t\t\t\tsheet: this.autoAnimateStyleSheet\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rolls back all changes that we've made to the DOM so\n\t * that as part of animating.\n\t */\n\treset() {\n\n\t\t// Reset slides\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=\"\"])' ).forEach( element => {\n\t\t\telement.dataset.autoAnimate = '';\n\t\t} );\n\n\t\t// Reset elements\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate-target]' ).forEach( element => {\n\t\t\tdelete element.dataset.autoAnimateTarget;\n\t\t} );\n\n\t\t// Remove the animation sheet\n\t\tif( this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode ) {\n\t\t\tthis.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet );\n\t\t\tthis.autoAnimateStyleSheet = null;\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a FLIP animation where the `to` element starts out\n\t * in the `from` element position and animates to its original\n\t * state.\n\t *\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @param {Object} elementOptions Options for this element pair\n\t * @param {Object} animationOptions Options set at the slide level\n\t * @param {String} id Unique ID that we can use to identify this\n\t * auto-animate element in the DOM\n\t */\n\tautoAnimateElements( from, to, elementOptions, animationOptions, id ) {\n\n\t\t// 'from' elements are given a data-auto-animate-target with no value,\n\t\t// 'to' elements are are given a data-auto-animate-target with an ID\n\t\tfrom.dataset.autoAnimateTarget = '';\n\t\tto.dataset.autoAnimateTarget = id;\n\n\t\t// Each element may override any of the auto-animate options\n\t\t// like transition easing, duration and delay via data-attributes\n\t\tlet options = this.getAutoAnimateOptions( to, animationOptions );\n\n\t\t// If we're using a custom element matcher the element options\n\t\t// may contain additional transition overrides\n\t\tif( typeof elementOptions.delay !== 'undefined' ) options.delay = elementOptions.delay;\n\t\tif( typeof elementOptions.duration !== 'undefined' ) options.duration = elementOptions.duration;\n\t\tif( typeof elementOptions.easing !== 'undefined' ) options.easing = elementOptions.easing;\n\n\t\tlet fromProps = this.getAutoAnimatableProperties( 'from', from, elementOptions ),\n\t\t\ttoProps = this.getAutoAnimatableProperties( 'to', to, elementOptions );\n\n\t\t// Maintain fragment visibility for matching elements when\n\t\t// we're navigating forwards, this way the viewer won't need\n\t\t// to step through the same fragments twice\n\t\tif( to.classList.contains( 'fragment' ) ) {\n\n\t\t\t// Don't auto-animate the opacity of fragments to avoid\n\t\t\t// conflicts with fragment animations\n\t\t\tdelete toProps.styles['opacity'];\n\n\t\t\tif( from.classList.contains( 'fragment' ) ) {\n\n\t\t\t\tlet fromFragmentStyle = ( from.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\t\t\t\tlet toFragmentStyle = ( to.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\n\t\t\t\t// Only skip the fragment if the fragment animation style\n\t\t\t\t// remains unchanged\n\t\t\t\tif( fromFragmentStyle === toFragmentStyle && animationOptions.slideDirection === 'forward' ) {\n\t\t\t\t\tto.classList.add( 'visible', 'disabled' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If translation and/or scaling are enabled, css transform\n\t\t// the 'to' element so that it matches the position and size\n\t\t// of the 'from' element\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\n\t\t\tlet presentationScale = this.Reveal.getScale();\n\n\t\t\tlet delta = {\n\t\t\t\tx: ( fromProps.x - toProps.x ) / presentationScale,\n\t\t\t\ty: ( fromProps.y - toProps.y ) / presentationScale,\n\t\t\t\tscaleX: fromProps.width / toProps.width,\n\t\t\t\tscaleY: fromProps.height / toProps.height\n\t\t\t};\n\n\t\t\t// Limit decimal points to avoid 0.0001px blur and stutter\n\t\t\tdelta.x = Math.round( delta.x * 1000 ) / 1000;\n\t\t\tdelta.y = Math.round( delta.y * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\n\t\t\tlet translate = elementOptions.translate !== false && ( delta.x !== 0 || delta.y !== 0 ),\n\t\t\t\tscale = elementOptions.scale !== false && ( delta.scaleX !== 0 || delta.scaleY !== 0 );\n\n\t\t\t// No need to transform if nothing's changed\n\t\t\tif( translate || scale ) {\n\n\t\t\t\tlet transform = [];\n\n\t\t\t\tif( translate ) transform.push( `translate(${delta.x}px, ${delta.y}px)` );\n\t\t\t\tif( scale ) transform.push( `scale(${delta.scaleX}, ${delta.scaleY})` );\n\n\t\t\t\tfromProps.styles['transform'] = transform.join( ' ' );\n\t\t\t\tfromProps.styles['transform-origin'] = 'top left';\n\n\t\t\t\ttoProps.styles['transform'] = 'none';\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Delete all unchanged 'to' styles\n\t\tfor( let propertyName in toProps.styles ) {\n\t\t\tconst toValue = toProps.styles[propertyName];\n\t\t\tconst fromValue = fromProps.styles[propertyName];\n\n\t\t\tif( toValue === fromValue ) {\n\t\t\t\tdelete toProps.styles[propertyName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// If these property values were set via a custom matcher providing\n\t\t\t\t// an explicit 'from' and/or 'to' value, we always inject those values.\n\t\t\t\tif( toValue.explicitValue === true ) {\n\t\t\t\t\ttoProps.styles[propertyName] = toValue.value;\n\t\t\t\t}\n\n\t\t\t\tif( fromValue.explicitValue === true ) {\n\t\t\t\t\tfromProps.styles[propertyName] = fromValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet css = '';\n\n\t\tlet toStyleProperties = Object.keys( toProps.styles );\n\n\t\t// Only create animate this element IF at least one style\n\t\t// property has changed\n\t\tif( toStyleProperties.length > 0 ) {\n\n\t\t\t// Instantly move to the 'from' state\n\t\t\tfromProps.styles['transition'] = 'none';\n\n\t\t\t// Animate towards the 'to' state\n\t\t\ttoProps.styles['transition'] = `all ${options.duration}s ${options.easing} ${options.delay}s`;\n\t\t\ttoProps.styles['transition-property'] = toStyleProperties.join( ', ' );\n\t\t\ttoProps.styles['will-change'] = toStyleProperties.join( ', ' );\n\n\t\t\t// Build up our custom CSS. We need to override inline styles\n\t\t\t// so we need to make our styles vErY IMPORTANT!1!!\n\t\t\tlet fromCSS = Object.keys( fromProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + fromProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tlet toCSS = Object.keys( toProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + toProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tcss = \t'[data-auto-animate-target=\"'+ id +'\"] {'+ fromCSS +'}' +\n\t\t\t\t\t'[data-auto-animate=\"running\"] [data-auto-animate-target=\"'+ id +'\"] {'+ toCSS +'}';\n\n\t\t}\n\n\t\treturn css;\n\n\t}\n\n\t/**\n\t * Returns the auto-animate options for the given element.\n\t *\n\t * @param {HTMLElement} element Element to pick up options\n\t * from, either a slide or an animation target\n\t * @param {Object} [inheritedOptions] Optional set of existing\n\t * options\n\t */\n\tgetAutoAnimateOptions( element, inheritedOptions ) {\n\n\t\tlet options = {\n\t\t\teasing: this.Reveal.getConfig().autoAnimateEasing,\n\t\t\tduration: this.Reveal.getConfig().autoAnimateDuration,\n\t\t\tdelay: 0\n\t\t};\n\n\t\toptions = extend( options, inheritedOptions );\n\n\t\t// Inherit options from parent elements\n\t\tif( element.parentNode ) {\n\t\t\tlet autoAnimatedParent = closest( element.parentNode, '[data-auto-animate-target]' );\n\t\t\tif( autoAnimatedParent ) {\n\t\t\t\toptions = this.getAutoAnimateOptions( autoAnimatedParent, options );\n\t\t\t}\n\t\t}\n\n\t\tif( element.dataset.autoAnimateEasing ) {\n\t\t\toptions.easing = element.dataset.autoAnimateEasing;\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDuration ) {\n\t\t\toptions.duration = parseFloat( element.dataset.autoAnimateDuration );\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDelay ) {\n\t\t\toptions.delay = parseFloat( element.dataset.autoAnimateDelay );\n\t\t}\n\n\t\treturn options;\n\n\t}\n\n\t/**\n\t * Returns an object containing all of the properties\n\t * that can be auto-animated for the given element and\n\t * their current computed values.\n\t *\n\t * @param {String} direction 'from' or 'to'\n\t */\n\tgetAutoAnimatableProperties( direction, element, elementOptions ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\tlet properties = { styles: [] };\n\n\t\t// Position and size\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\t\t\tlet bounds;\n\n\t\t\t// Custom auto-animate may optionally return a custom tailored\n\t\t\t// measurement function\n\t\t\tif( typeof elementOptions.measure === 'function' ) {\n\t\t\t\tbounds = elementOptions.measure( element );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( config.center ) {\n\t\t\t\t\t// More precise, but breaks when used in combination\n\t\t\t\t\t// with zoom for scaling the deck ¯\\_(ツ)_/¯\n\t\t\t\t\tbounds = element.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet scale = this.Reveal.getScale();\n\t\t\t\t\tbounds = {\n\t\t\t\t\t\tx: element.offsetLeft * scale,\n\t\t\t\t\t\ty: element.offsetTop * scale,\n\t\t\t\t\t\twidth: element.offsetWidth * scale,\n\t\t\t\t\t\theight: element.offsetHeight * scale\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproperties.x = bounds.x;\n\t\t\tproperties.y = bounds.y;\n\t\t\tproperties.width = bounds.width;\n\t\t\tproperties.height = bounds.height;\n\t\t}\n\n\t\tconst computedStyles = getComputedStyle( element );\n\n\t\t// CSS styles\n\t\t( elementOptions.styles || config.autoAnimateStyles ).forEach( style => {\n\t\t\tlet value;\n\n\t\t\t// `style` is either the property name directly, or an object\n\t\t\t// definition of a style property\n\t\t\tif( typeof style === 'string' ) style = { property: style };\n\n\t\t\tif( typeof style.from !== 'undefined' && direction === 'from' ) {\n\t\t\t\tvalue = { value: style.from, explicitValue: true };\n\t\t\t}\n\t\t\telse if( typeof style.to !== 'undefined' && direction === 'to' ) {\n\t\t\t\tvalue = { value: style.to, explicitValue: true };\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = computedStyles[style.property];\n\t\t\t}\n\n\t\t\tif( value !== '' ) {\n\t\t\t\tproperties.styles[style.property] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn properties;\n\n\t}\n\n\t/**\n\t * Get a list of all element pairs that we can animate\n\t * between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t *\n\t * @return {Array} Each value is an array where [0] is\n\t * the element we're animating from and [1] is the\n\t * element we're animating to\n\t */\n\tgetAutoAnimatableElements( fromSlide, toSlide ) {\n\n\t\tlet matcher = typeof this.Reveal.getConfig().autoAnimateMatcher === 'function' ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs;\n\n\t\tlet pairs = matcher.call( this, fromSlide, toSlide );\n\n\t\tlet reserved = [];\n\n\t\t// Remove duplicate pairs\n\t\treturn pairs.filter( ( pair, index ) => {\n\t\t\tif( reserved.indexOf( pair.to ) === -1 ) {\n\t\t\t\treserved.push( pair.to );\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Identifies matching elements between slides.\n\t *\n\t * You can specify a custom matcher function by using\n\t * the `autoAnimateMatcher` config option.\n\t */\n\tgetAutoAnimatePairs( fromSlide, toSlide ) {\n\n\t\tlet pairs = [];\n\n\t\tconst codeNodes = 'pre';\n\t\tconst textNodes = 'h1, h2, h3, h4, h5, h6, p, li';\n\t\tconst mediaNodes = 'img, video, iframe';\n\n\t\t// Eplicit matches via data-id\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, '[data-id]', node => {\n\t\t\treturn node.nodeName + ':::' + node.getAttribute( 'data-id' );\n\t\t} );\n\n\t\t// Text\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, textNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\t// Media\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, mediaNodes, node => {\n\t\t\treturn node.nodeName + ':::' + ( node.getAttribute( 'src' ) || node.getAttribute( 'data-src' ) );\n\t\t} );\n\n\t\t// Code\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, codeNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\tpairs.forEach( pair => {\n\n\t\t\t// Disable scale transformations on text nodes, we transition\n\t\t\t// each individual text property instead\n\t\t\tif( matches( pair.from, textNodes ) ) {\n\t\t\t\tpair.options = { scale: false };\n\t\t\t}\n\t\t\t// Animate individual lines of code\n\t\t\telse if( matches( pair.from, codeNodes ) ) {\n\n\t\t\t\t// Transition the code block's width and height instead of scaling\n\t\t\t\t// to prevent its content from being squished\n\t\t\t\tpair.options = { scale: false, styles: [ 'width', 'height' ] };\n\n\t\t\t\t// Lines of code\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-code', node => {\n\t\t\t\t\treturn node.textContent;\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t\t// Line numbers\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-line[data-line-number]', node => {\n\t\t\t\t\treturn node.getAttribute( 'data-line-number' );\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [ 'width' ],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\treturn pairs;\n\n\t}\n\n\t/**\n\t * Helper method which returns a bounding box based on\n\t * the given elements offset coordinates.\n\t *\n\t * @param {HTMLElement} element\n\t * @return {Object} x, y, width, height\n\t */\n\tgetLocalBoundingBox( element ) {\n\n\t\tconst presentationScale = this.Reveal.getScale();\n\n\t\treturn {\n\t\t\tx: Math.round( ( element.offsetLeft * presentationScale ) * 100 ) / 100,\n\t\t\ty: Math.round( ( element.offsetTop * presentationScale ) * 100 ) / 100,\n\t\t\twidth: Math.round( ( element.offsetWidth * presentationScale ) * 100 ) / 100,\n\t\t\theight: Math.round( ( element.offsetHeight * presentationScale ) * 100 ) / 100\n\t\t};\n\n\t}\n\n\t/**\n\t * Finds matching elements between two slides.\n\t *\n\t * @param {Array} pairs \tList of pairs to push matches to\n\t * @param {HTMLElement} fromScope Scope within the from element exists\n\t * @param {HTMLElement} toScope Scope within the to element exists\n\t * @param {String} selector CSS selector of the element to match\n\t * @param {Function} serializer A function that accepts an element and returns\n\t * a stringified ID based on its contents\n\t * @param {Object} animationOptions Optional config options for this pair\n\t */\n\tfindAutoAnimateMatches( pairs, fromScope, toScope, selector, serializer, animationOptions ) {\n\n\t\tlet fromMatches = {};\n\t\tlet toMatches = {};\n\n\t\t[].slice.call( fromScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\tif( typeof key === 'string' && key.length ) {\n\t\t\t\tfromMatches[key] = fromMatches[key] || [];\n\t\t\t\tfromMatches[key].push( element );\n\t\t\t}\n\t\t} );\n\n\t\t[].slice.call( toScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\ttoMatches[key] = toMatches[key] || [];\n\t\t\ttoMatches[key].push( element );\n\n\t\t\tlet fromElement;\n\n\t\t\t// Retrieve the 'from' element\n\t\t\tif( fromMatches[key] ) {\n\t\t\t\tconst pimaryIndex = toMatches[key].length - 1;\n\t\t\t\tconst secondaryIndex = fromMatches[key].length - 1;\n\n\t\t\t\t// If there are multiple identical from elements, retrieve\n\t\t\t\t// the one at the same index as our to-element.\n\t\t\t\tif( fromMatches[key][ pimaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ pimaryIndex ];\n\t\t\t\t\tfromMatches[key][ pimaryIndex ] = null;\n\t\t\t\t}\n\t\t\t\t// If there are no matching from-elements at the same index,\n\t\t\t\t// use the last one.\n\t\t\t\telse if( fromMatches[key][ secondaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ secondaryIndex ];\n\t\t\t\t\tfromMatches[key][ secondaryIndex ] = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we've got a matching pair, push it to the list of pairs\n\t\t\tif( fromElement ) {\n\t\t\t\tpairs.push({\n\t\t\t\t\tfrom: fromElement,\n\t\t\t\t\tto: element,\n\t\t\t\t\toptions: animationOptions\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns a all elements within the given scope that should\n\t * be considered unmatched in an auto-animate transition. If\n\t * fading of unmatched elements is turned on, these elements\n\t * will fade when going between auto-animate slides.\n\t *\n\t * Note that parents of auto-animate targets are NOT considerd\n\t * unmatched since fading them would break the auto-animation.\n\t *\n\t * @param {HTMLElement} rootElement\n\t * @return {Array}\n\t */\n\tgetUnmatchedAutoAnimateElements( rootElement ) {\n\n\t\treturn [].slice.call( rootElement.children ).reduce( ( result, element ) => {\n\n\t\t\tconst containsAnimatedElements = element.querySelector( '[data-auto-animate-target]' );\n\n\t\t\t// The element is unmatched if\n\t\t\t// - It is not an auto-animate target\n\t\t\t// - It does not contain any auto-animate targets\n\t\t\tif( !element.hasAttribute( 'data-auto-animate-target' ) && !containsAnimatedElements ) {\n\t\t\t\tresult.push( element );\n\t\t\t}\n\n\t\t\tif( element.querySelector( '[data-auto-animate-target]' ) ) {\n\t\t\t\tresult = result.concat( this.getUnmatchedAutoAnimateElements( element ) );\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}, [] );\n\n\t}\n\n}\n","import { extend, queryAll } from '../utils/util.js'\n\n/**\n * Handles sorting and navigation of slide fragments.\n * Fragments are elements within a slide that are\n * revealed/animated incrementally.\n */\nexport default class Fragments {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.fragments === false ) {\n\t\t\tthis.disable();\n\t\t}\n\t\telse if( oldConfig.fragments === false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t}\n\n\t/**\n\t * If fragments are disabled in the deck, they should all be\n\t * visible rather than stepped through.\n\t */\n\tdisable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.add( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Reverse of #disable(). Only called if fragments have\n\t * previously been disabled.\n\t */\n\tenable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.remove( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns an object describing the available fragment\n\t * directions.\n\t *\n\t * @return {{prev: boolean, next: boolean}}\n\t */\n\tavailableRoutes() {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\t\t\tlet fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' );\n\t\t\tlet hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' );\n\n\t\t\treturn {\n\t\t\t\tprev: fragments.length - hiddenFragments.length > 0,\n\t\t\t\tnext: !!hiddenFragments.length\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn { prev: false, next: false };\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a sorted fragments list, ordered by an increasing\n\t * \"data-fragment-index\" attribute.\n\t *\n\t * Fragments will be revealed in the order that they are returned by\n\t * this function, so you can use the index attributes to control the\n\t * order of fragment appearance.\n\t *\n\t * To maintain a sensible default fragment order, fragments are presumed\n\t * to be passed in document order. This function adds a \"fragment-index\"\n\t * attribute to each node if such an attribute is not already present,\n\t * and sets that attribute to an integer value which is the position of\n\t * the fragment within the fragments list.\n\t *\n\t * @param {object[]|*} fragments\n\t * @param {boolean} grouped If true the returned array will contain\n\t * nested arrays for all fragments with the same index\n\t * @return {object[]} sorted Sorted array of fragments\n\t */\n\tsort( fragments, grouped = false ) {\n\n\t\tfragments = Array.from( fragments );\n\n\t\tlet ordered = [],\n\t\t\tunordered = [],\n\t\t\tsorted = [];\n\n\t\t// Group ordered and unordered elements\n\t\tfragments.forEach( fragment => {\n\t\t\tif( fragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\tlet index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );\n\n\t\t\t\tif( !ordered[index] ) {\n\t\t\t\t\tordered[index] = [];\n\t\t\t\t}\n\n\t\t\t\tordered[index].push( fragment );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tunordered.push( [ fragment ] );\n\t\t\t}\n\t\t} );\n\n\t\t// Append fragments without explicit indices in their\n\t\t// DOM order\n\t\tordered = ordered.concat( unordered );\n\n\t\t// Manually count the index up per group to ensure there\n\t\t// are no gaps\n\t\tlet index = 0;\n\n\t\t// Push all fragments in their sorted order to an array,\n\t\t// this flattens the groups\n\t\tordered.forEach( group => {\n\t\t\tgroup.forEach( fragment => {\n\t\t\t\tsorted.push( fragment );\n\t\t\t\tfragment.setAttribute( 'data-fragment-index', index );\n\t\t\t} );\n\n\t\t\tindex ++;\n\t\t} );\n\n\t\treturn grouped === true ? ordered : sorted;\n\n\t}\n\n\t/**\n\t * Sorts and formats all of fragments in the\n\t * presentation.\n\t */\n\tsortAll() {\n\n\t\tthis.Reveal.getHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tlet verticalSlides = queryAll( horizontalSlide, 'section' );\n\t\t\tverticalSlides.forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tthis.sort( verticalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\t}, this );\n\n\t\t\tif( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Refreshes the fragments on the current slide so that they\n\t * have the appropriate classes (.visible + .current-fragment).\n\t *\n\t * @param {number} [index] The index of the current fragment\n\t * @param {array} [fragments] Array containing all fragments\n\t * in the current slide\n\t *\n\t * @return {{shown: array, hidden: array}}\n\t */\n\tupdate( index, fragments ) {\n\n\t\tlet changedFragments = {\n\t\t\tshown: [],\n\t\t\thidden: []\n\t\t};\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tfragments = fragments || this.sort( currentSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\tif( fragments.length ) {\n\n\t\t\t\tlet maxIndex = 0;\n\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet currentFragment = this.sort( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();\n\t\t\t\t\tif( currentFragment ) {\n\t\t\t\t\t\tindex = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tArray.from( fragments ).forEach( ( el, i ) => {\n\n\t\t\t\t\tif( el.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\t\ti = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t\t}\n\n\t\t\t\t\tmaxIndex = Math.max( maxIndex, i );\n\n\t\t\t\t\t// Visible fragments\n\t\t\t\t\tif( i <= index ) {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.add( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( i === index ) {\n\t\t\t\t\t\t\t// Announce the fragments one by one to the Screen Reader\n\t\t\t\t\t\t\tthis.Reveal.announceStatus( this.Reveal.getStatusText( el ) );\n\n\t\t\t\t\t\t\tel.classList.add( 'current-fragment' );\n\t\t\t\t\t\t\tthis.Reveal.slideContent.startEmbeddedContent( el );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( !wasVisible ) {\n\t\t\t\t\t\t\tchangedFragments.shown.push( el )\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'visible',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Hidden fragments\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.remove( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( wasVisible ) {\n\t\t\t\t\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( el );\n\t\t\t\t\t\t\tchangedFragments.hidden.push( el );\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// Write the current fragment index to the slide
    .\n\t\t\t\t// This can be used by end users to apply styles based on\n\t\t\t\t// the current fragment index.\n\t\t\t\tindex = typeof index === 'number' ? index : -1;\n\t\t\t\tindex = Math.max( Math.min( index, maxIndex ), -1 );\n\t\t\t\tcurrentSlide.setAttribute( 'data-fragment', index );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn changedFragments;\n\n\t}\n\n\t/**\n\t * Formats the fragments on the given slide so that they have\n\t * valid indices. Call this if fragments are changed in the DOM\n\t * after reveal.js has already initialized.\n\t *\n\t * @param {HTMLElement} slide\n\t * @return {Array} a list of the HTML fragments that were synced\n\t */\n\tsync( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\treturn this.sort( slide.querySelectorAll( '.fragment' ) );\n\n\t}\n\n\t/**\n\t * Navigate to the specified slide fragment.\n\t *\n\t * @param {?number} index The index of the fragment that\n\t * should be shown, -1 means all are invisible\n\t * @param {number} offset Integer offset to apply to the\n\t * fragment index\n\t *\n\t * @return {boolean} true if a change was made in any\n\t * fragments visibility as part of this call\n\t */\n\tgoto( index, offset = 0 ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tlet fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) );\n\t\t\tif( fragments.length ) {\n\n\t\t\t\t// If no index is specified, find the current\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop();\n\n\t\t\t\t\tif( lastVisibleFragment ) {\n\t\t\t\t\t\tindex = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply the offset if there is one\n\t\t\t\tindex += offset;\n\n\t\t\t\tlet changedFragments = this.update( index, fragments );\n\n\t\t\t\tif( changedFragments.hidden.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmenthidden',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.hidden[0],\n\t\t\t\t\t\t\tfragments: changedFragments.hidden\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif( changedFragments.shown.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmentshown',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.shown[0],\n\t\t\t\t\t\t\tfragments: changedFragments.shown\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.Reveal.controls.update();\n\t\t\t\tthis.Reveal.progress.update();\n\n\t\t\t\tif( this.Reveal.getConfig().fragmentInURL ) {\n\t\t\t\t\tthis.Reveal.location.writeURL();\n\t\t\t\t}\n\n\t\t\t\treturn !!( changedFragments.shown.length || changedFragments.hidden.length );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Navigate to the next slide fragment.\n\t *\n\t * @return {boolean} true if there was a next fragment,\n\t * false otherwise\n\t */\n\tnext() {\n\n\t\treturn this.goto( null, 1 );\n\n\t}\n\n\t/**\n\t * Navigate to the previous slide fragment.\n\t *\n\t * @return {boolean} true if there was a previous fragment,\n\t * false otherwise\n\t */\n\tprev() {\n\n\t\treturn this.goto( null, -1 );\n\n\t}\n\n}","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { extend, queryAll, transformElement } from '../utils/util.js'\n\n/**\n * Handles all logic related to the overview mode\n * (birds-eye view of all slides).\n */\nexport default class Overview {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.active = false;\n\n\t\tthis.onSlideClicked = this.onSlideClicked.bind( this );\n\n\t}\n\n\t/**\n\t * Displays the overview of slides (quick nav) by scaling\n\t * down and arranging all slide elements.\n\t */\n\tactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview && !this.isActive() ) {\n\n\t\t\tthis.active = true;\n\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview' );\n\n\t\t\t// Don't auto-slide while in overview mode\n\t\t\tthis.Reveal.cancelAutoSlide();\n\n\t\t\t// Move the backgrounds element into the slide container to\n\t\t\t// that the same scaling is applied\n\t\t\tthis.Reveal.getSlidesElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clicking on an overview slide navigates to it\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\tif( !slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tslide.addEventListener( 'click', this.onSlideClicked, true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Calculate slide sizes\n\t\t\tconst margin = 70;\n\t\t\tconst slideSize = this.Reveal.getComputedSlideSize();\n\t\t\tthis.overviewSlideWidth = slideSize.width + margin;\n\t\t\tthis.overviewSlideHeight = slideSize.height + margin;\n\n\t\t\t// Reverse in RTL mode\n\t\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\t\tthis.overviewSlideWidth = -this.overviewSlideWidth;\n\t\t\t}\n\n\t\t\tthis.Reveal.updateSlidesVisibility();\n\n\t\t\tthis.layout();\n\t\t\tthis.update();\n\n\t\t\tthis.Reveal.layout();\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\t// Notify observers of the overview showing\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewshown',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses CSS transforms to position all slides in a grid for\n\t * display inside of the overview mode.\n\t */\n\tlayout() {\n\n\t\t// Layout slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( ( hslide, h ) => {\n\t\t\thslide.setAttribute( 'data-index-h', h );\n\t\t\ttransformElement( hslide, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tif( hslide.classList.contains( 'stack' ) ) {\n\n\t\t\t\tqueryAll( hslide, 'section' ).forEach( ( vslide, v ) => {\n\t\t\t\t\tvslide.setAttribute( 'data-index-h', h );\n\t\t\t\t\tvslide.setAttribute( 'data-index-v', v );\n\n\t\t\t\t\ttransformElement( vslide, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\t\t// Layout slide backgrounds\n\t\tArray.from( this.Reveal.getBackgroundsElement().childNodes ).forEach( ( hbackground, h ) => {\n\t\t\ttransformElement( hbackground, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tqueryAll( hbackground, '.slide-background' ).forEach( ( vbackground, v ) => {\n\t\t\t\ttransformElement( vbackground, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Moves the overview viewport to the current slides.\n\t * Called each time the current slide changes.\n\t */\n\tupdate() {\n\n\t\tconst vmin = Math.min( window.innerWidth, window.innerHeight );\n\t\tconst scale = Math.max( vmin / 5, 150 ) / vmin;\n\t\tconst indices = this.Reveal.getIndices();\n\n\t\tthis.Reveal.transformSlides( {\n\t\t\toverview: [\n\t\t\t\t'scale('+ scale +')',\n\t\t\t\t'translateX('+ ( -indices.h * this.overviewSlideWidth ) +'px)',\n\t\t\t\t'translateY('+ ( -indices.v * this.overviewSlideHeight ) +'px)'\n\t\t\t].join( ' ' )\n\t\t} );\n\n\t}\n\n\t/**\n\t * Exits the slide overview and enters the currently\n\t * active slide.\n\t */\n\tdeactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview ) {\n\n\t\t\tthis.active = false;\n\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview' );\n\n\t\t\t// Temporarily add a class so that transitions can do different things\n\t\t\t// depending on whether they are exiting/entering overview, or just\n\t\t\t// moving from slide to slide\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview-deactivating' );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview-deactivating' );\n\t\t\t}, 1 );\n\n\t\t\t// Move the background element back out\n\t\t\tthis.Reveal.getRevealElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clean up changes made to slides\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\ttransformElement( slide, '' );\n\n\t\t\t\tslide.removeEventListener( 'click', this.onSlideClicked, true );\n\t\t\t} );\n\n\t\t\t// Clean up changes made to backgrounds\n\t\t\tqueryAll( this.Reveal.getBackgroundsElement(), '.slide-background' ).forEach( background => {\n\t\t\t\ttransformElement( background, '' );\n\t\t\t} );\n\n\t\t\tthis.Reveal.transformSlides( { overview: '' } );\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\tthis.Reveal.slide( indices.h, indices.v );\n\t\t\tthis.Reveal.layout();\n\t\t\tthis.Reveal.cueAutoSlide();\n\n\t\t\t// Notify observers of the overview hiding\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewhidden',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the slide overview mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * overview is open, false means it's closed.\n\t */\n\ttoggle( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? this.activate() : this.deactivate();\n\t\t}\n\t\telse {\n\t\t\tthis.isActive() ? this.deactivate() : this.activate();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the overview is currently active.\n\t *\n\t * @return {Boolean} true if the overview is active,\n\t * false otherwise\n\t */\n\tisActive() {\n\n\t\treturn this.active;\n\n\t}\n\n\t/**\n\t * Invoked when a slide is and we're in the overview.\n\t *\n\t * @param {object} event\n\t */\n\tonSlideClicked( event ) {\n\n\t\tif( this.isActive() ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tlet element = event.target;\n\n\t\t\twhile( element && !element.nodeName.match( /section/gi ) ) {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\tif( element && !element.classList.contains( 'disabled' ) ) {\n\n\t\t\t\tthis.deactivate();\n\n\t\t\t\tif( element.nodeName.match( /section/gi ) ) {\n\t\t\t\t\tlet h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),\n\t\t\t\t\t\tv = parseInt( element.getAttribute( 'data-index-v' ), 10 );\n\n\t\t\t\t\tthis.Reveal.slide( h, v );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n}","import { enterFullscreen } from '../utils/util.js'\n\n/**\n * Handles all reveal.js keyboard interactions.\n */\nexport default class Keyboard {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// A key:value map of keyboard keys and descriptions of\n\t\t// the actions they trigger\n\t\tthis.shortcuts = {};\n\n\t\t// Holds custom key code mappings\n\t\tthis.bindings = {};\n\n\t\tthis.onDocumentKeyDown = this.onDocumentKeyDown.bind( this );\n\t\tthis.onDocumentKeyPress = this.onDocumentKeyPress.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.navigationMode === 'linear' ) {\n\t\t\tthis.shortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide';\n\t\t\tthis.shortcuts['← , ↑ , P , H , K'] = 'Previous slide';\n\t\t}\n\t\telse {\n\t\t\tthis.shortcuts['N , SPACE'] = 'Next slide';\n\t\t\tthis.shortcuts['P , Shift SPACE'] = 'Previous slide';\n\t\t\tthis.shortcuts['← , H'] = 'Navigate left';\n\t\t\tthis.shortcuts['→ , L'] = 'Navigate right';\n\t\t\tthis.shortcuts['↑ , K'] = 'Navigate up';\n\t\t\tthis.shortcuts['↓ , J'] = 'Navigate down';\n\t\t}\n\n\t\tthis.shortcuts['Alt + ←/↑/→/↓'] = 'Navigate without fragments';\n\t\tthis.shortcuts['Shift + ←/↑/→/↓'] = 'Jump to first/last slide';\n\t\tthis.shortcuts['B , .'] = 'Pause';\n\t\tthis.shortcuts['F'] = 'Fullscreen';\n\t\tthis.shortcuts['ESC, O'] = 'Slide overview';\n\n\t}\n\n\t/**\n\t * Starts listening for keyboard events.\n\t */\n\tbind() {\n\n\t\tdocument.addEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.addEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Stops listening for keyboard events.\n\t */\n\tunbind() {\n\n\t\tdocument.removeEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.removeEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Add a custom key binding with optional description to\n\t * be added to the help screen.\n\t */\n\taddKeyBinding( binding, callback ) {\n\n\t\tif( typeof binding === 'object' && binding.keyCode ) {\n\t\t\tthis.bindings[binding.keyCode] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: binding.key,\n\t\t\t\tdescription: binding.description\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tthis.bindings[binding] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: null,\n\t\t\t\tdescription: null\n\t\t\t};\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes the specified custom key binding.\n\t */\n\tremoveKeyBinding( keyCode ) {\n\n\t\tdelete this.bindings[keyCode];\n\n\t}\n\n\t/**\n\t * Programmatically triggers a keyboard event\n\t *\n\t * @param {int} keyCode\n\t */\n\ttriggerKey( keyCode ) {\n\n\t\tthis.onDocumentKeyDown( { keyCode } );\n\n\t}\n\n\t/**\n\t * Registers a new shortcut to include in the help overlay\n\t *\n\t * @param {String} key\n\t * @param {String} value\n\t */\n\tregisterKeyboardShortcut( key, value ) {\n\n\t\tthis.shortcuts[key] = value;\n\n\t}\n\n\tgetShortcuts() {\n\n\t\treturn this.shortcuts;\n\n\t}\n\n\tgetBindings() {\n\n\t\treturn this.bindings;\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keypress' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyPress( event ) {\n\n\t\t// Check if the pressed key is question mark\n\t\tif( event.shiftKey && event.charCode === 63 ) {\n\t\t\tthis.Reveal.toggleHelp();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keydown' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyDown( event ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// If there's a condition specified and it returns false,\n\t\t// ignore this event\n\t\tif( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If keyboardCondition is set, only capture keyboard events\n\t\t// for embedded decks when they are focused\n\t\tif( config.keyboardCondition === 'focused' && !this.Reveal.isFocused() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Shorthand\n\t\tlet keyCode = event.keyCode;\n\n\t\t// Remember if auto-sliding was paused so we can toggle it\n\t\tlet autoSlideWasPaused = !this.Reveal.isAutoSliding();\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\t// Is there a focused element that could be using the keyboard?\n\t\tlet activeElementIsCE = document.activeElement && document.activeElement.isContentEditable === true;\n\t\tlet activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );\n\t\tlet activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className);\n\n\t\t// Whitelist certain modifiers for slide navigation shortcuts\n\t\tlet isNavigationKey = [32, 37, 38, 39, 40, 78, 80].indexOf( event.keyCode ) !== -1;\n\n\t\t// Prevent all other events when a modifier is pressed\n\t\tlet unusedModifier = \t!( isNavigationKey && event.shiftKey || event.altKey ) &&\n\t\t\t\t\t\t\t\t( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey );\n\n\t\t// Disregard the event if there's a focused element or a\n\t\t// keyboard modifier key is present\n\t\tif( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return;\n\n\t\t// While paused only allow resume keyboard events; 'b', 'v', '.'\n\t\tlet resumeKeyCodes = [66,86,190,191];\n\t\tlet key;\n\n\t\t// Custom key bindings for togglePause should be able to resume\n\t\tif( typeof config.keyboard === 'object' ) {\n\t\t\tfor( key in config.keyboard ) {\n\t\t\t\tif( config.keyboard[key] === 'togglePause' ) {\n\t\t\t\t\tresumeKeyCodes.push( parseInt( key, 10 ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( this.Reveal.isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Use linear navigation if we're configured to OR if\n\t\t// the presentation is one-dimensional\n\t\tlet useLinearMode = config.navigationMode === 'linear' || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides();\n\n\t\tlet triggered = false;\n\n\t\t// 1. User defined key bindings\n\t\tif( typeof config.keyboard === 'object' ) {\n\n\t\t\tfor( key in config.keyboard ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet value = config.keyboard[ key ];\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof value === 'function' ) {\n\t\t\t\t\t\tvalue.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof value === 'string' && typeof this.Reveal[ value ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ value ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 2. Registered custom key bindings\n\t\tif( triggered === false ) {\n\n\t\t\tfor( key in this.bindings ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet action = this.bindings[ key ].callback;\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof action === 'function' ) {\n\t\t\t\t\t\taction.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof action === 'string' && typeof this.Reveal[ action ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ action ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 3. System defined key bindings\n\t\tif( triggered === false ) {\n\n\t\t\t// Assume true and try to prove false\n\t\t\ttriggered = true;\n\n\t\t\t// P, PAGE UP\n\t\t\tif( keyCode === 80 || keyCode === 33 ) {\n\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// N, PAGE DOWN\n\t\t\telse if( keyCode === 78 || keyCode === 34 ) {\n\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// H, LEFT\n\t\t\telse if( keyCode === 72 || keyCode === 37 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.left({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// L, RIGHT\n\t\t\telse if( keyCode === 76 || keyCode === 39 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.right({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// K, UP\n\t\t\telse if( keyCode === 75 || keyCode === 38 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.up({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// J, DOWN\n\t\t\telse if( keyCode === 74 || keyCode === 40 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, Number.MAX_VALUE );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.down({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// HOME\n\t\t\telse if( keyCode === 36 ) {\n\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t}\n\t\t\t// END\n\t\t\telse if( keyCode === 35 ) {\n\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t}\n\t\t\t// SPACE\n\t\t\telse if( keyCode === 32 ) {\n\t\t\t\tif( this.Reveal.overview.isActive() ) {\n\t\t\t\t\tthis.Reveal.overview.deactivate();\n\t\t\t\t}\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS \"BLACK SCREEN\" BUTTON\n\t\t\telse if( keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191 ) {\n\t\t\t\tthis.Reveal.togglePause();\n\t\t\t}\n\t\t\t// F\n\t\t\telse if( keyCode === 70 ) {\n\t\t\t\tenterFullscreen( config.embedded ? this.Reveal.getViewportElement() : document.documentElement );\n\t\t\t}\n\t\t\t// A\n\t\t\telse if( keyCode === 65 ) {\n\t\t\t\tif ( config.autoSlideStoppable ) {\n\t\t\t\t\tthis.Reveal.toggleAutoSlide( autoSlideWasPaused );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttriggered = false;\n\t\t\t}\n\n\t\t}\n\n\t\t// If the input resulted in a triggered action we should prevent\n\t\t// the browsers default behavior\n\t\tif( triggered ) {\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\t\t// ESC or O key\n\t\telse if( keyCode === 27 || keyCode === 79 ) {\n\t\t\tif( this.Reveal.closeOverlay() === false ) {\n\t\t\t\tthis.Reveal.overview.toggle();\n\t\t\t}\n\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tthis.Reveal.cueAutoSlide();\n\n\t}\n\n}","/**\n * Reads and writes the URL based on reveal.js' current state.\n */\nexport default class Location {\n\n\t// The minimum number of milliseconds that must pass between\n\t// calls to history.replaceState\n\tMAX_REPLACE_STATE_FREQUENCY = 1000\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Delays updates to the URL due to a Chrome thumbnailer bug\n\t\tthis.writeURLTimeout = 0;\n\n\t\tthis.replaceStateTimestamp = 0;\n\n\t\tthis.onWindowHashChange = this.onWindowHashChange.bind( this );\n\n\t}\n\n\tbind() {\n\n\t\twindow.addEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\tunbind() {\n\n\t\twindow.removeEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\t/**\n\t * Returns the slide indices for the given hash link.\n\t *\n\t * @param {string} [hash] the hash string that we want to\n\t * find the indices for\n\t *\n\t * @returns slide indices or null\n\t */\n\tgetIndicesFromHash( hash=window.location.hash ) {\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tlet name = hash.replace( /^#\\/?/, '' );\n\t\tlet bits = name.split( '/' );\n\n\t\t// If the first bit is not fully numeric and there is a name we\n\t\t// can assume that this is a named link\n\t\tif( !/^[0-9]*$/.test( bits[0] ) && name.length ) {\n\t\t\tlet element;\n\n\t\t\tlet f;\n\n\t\t\t// Parse named links with fragments (#/named-link/2)\n\t\t\tif( /\\/[-\\d]+$/g.test( name ) ) {\n\t\t\t\tf = parseInt( name.split( '/' ).pop(), 10 );\n\t\t\t\tf = isNaN(f) ? undefined : f;\n\t\t\t\tname = name.split( '/' ).shift();\n\t\t\t}\n\n\t\t\t// Ensure the named link is a valid HTML ID attribute\n\t\t\ttry {\n\t\t\t\telement = document.getElementById( decodeURIComponent( name ) );\n\t\t\t}\n\t\t\tcatch ( error ) { }\n\n\t\t\tif( element ) {\n\t\t\t\treturn { ...this.Reveal.getIndices( element ), f };\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst config = this.Reveal.getConfig();\n\t\t\tlet hashIndexBase = config.hashOneBasedIndex ? 1 : 0;\n\n\t\t\t// Read the index components of the hash\n\t\t\tlet h = ( parseInt( bits[0], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tv = ( parseInt( bits[1], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tf;\n\n\t\t\tif( config.fragmentInURL ) {\n\t\t\t\tf = parseInt( bits[2], 10 );\n\t\t\t\tif( isNaN( f ) ) {\n\t\t\t\t\tf = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { h, v, f };\n\t\t}\n\n\t\t// The hash couldn't be parsed or no matching named link was found\n\t\treturn null\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\treadURL() {\n\n\t\tconst currentIndices = this.Reveal.getIndices();\n\t\tconst newIndices = this.getIndicesFromHash();\n\n\t\tif( newIndices ) {\n\t\t\tif( ( newIndices.h !== currentIndices.h || newIndices.v !== currentIndices.v || newIndices.f !== undefined ) ) {\n\t\t\t\t\tthis.Reveal.slide( newIndices.h, newIndices.v, newIndices.f );\n\t\t\t}\n\t\t}\n\t\t// If no new indices are available, we're trying to navigate to\n\t\t// a slide hash that does not exist\n\t\telse {\n\t\t\tthis.Reveal.slide( currentIndices.h || 0, currentIndices.v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the page URL (hash) to reflect the current\n\t * state.\n\t *\n\t * @param {number} delay The time in ms to wait before\n\t * writing the hash\n\t */\n\twriteURL( delay ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\n\t\t// Make sure there's never more than one timeout running\n\t\tclearTimeout( this.writeURLTimeout );\n\n\t\t// If a delay is specified, timeout this call\n\t\tif( typeof delay === 'number' ) {\n\t\t\tthis.writeURLTimeout = setTimeout( this.writeURL, delay );\n\t\t}\n\t\telse if( currentSlide ) {\n\n\t\t\tlet hash = this.getHash();\n\n\t\t\t// If we're configured to push to history OR the history\n\t\t\t// API is not avaialble.\n\t\t\tif( config.history ) {\n\t\t\t\twindow.location.hash = hash;\n\t\t\t}\n\t\t\t// If we're configured to reflect the current slide in the\n\t\t\t// URL without pushing to history.\n\t\t\telse if( config.hash ) {\n\t\t\t\t// If the hash is empty, don't add it to the URL\n\t\t\t\tif( hash === '/' ) {\n\t\t\t\t\tthis.debouncedReplaceState( window.location.pathname + window.location.search );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.debouncedReplaceState( '#' + hash );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// UPDATE: The below nuking of all hash changes breaks\n\t\t\t// anchors on pages where reveal.js is running. Removed\n\t\t\t// in 4.0. Why was it here in the first place? ¯\\_(ツ)_/¯\n\t\t\t//\n\t\t\t// If history and hash are both disabled, a hash may still\n\t\t\t// be added to the URL by clicking on a href with a hash\n\t\t\t// target. Counter this by always removing the hash.\n\t\t\t// else {\n\t\t\t// \twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t// }\n\n\t\t}\n\n\t}\n\n\treplaceState( url ) {\n\n\t\twindow.history.replaceState( null, null, url );\n\t\tthis.replaceStateTimestamp = Date.now();\n\n\t}\n\n\tdebouncedReplaceState( url ) {\n\n\t\tclearTimeout( this.replaceStateTimeout );\n\n\t\tif( Date.now() - this.replaceStateTimestamp > this.MAX_REPLACE_STATE_FREQUENCY ) {\n\t\t\tthis.replaceState( url );\n\t\t}\n\t\telse {\n\t\t\tthis.replaceStateTimeout = setTimeout( () => this.replaceState( url ), this.MAX_REPLACE_STATE_FREQUENCY );\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a hash URL that will resolve to the given slide location.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to link to\n\t */\n\tgetHash( slide ) {\n\n\t\tlet url = '/';\n\n\t\t// Attempt to create a named link based on the slide's ID\n\t\tlet s = slide || this.Reveal.getCurrentSlide();\n\t\tlet id = s ? s.getAttribute( 'id' ) : null;\n\t\tif( id ) {\n\t\t\tid = encodeURIComponent( id );\n\t\t}\n\n\t\tlet index = this.Reveal.getIndices( slide );\n\t\tif( !this.Reveal.getConfig().fragmentInURL ) {\n\t\t\tindex.f = undefined;\n\t\t}\n\n\t\t// If the current slide has an ID, use that as a named link,\n\t\t// but we don't support named links with a fragment index\n\t\tif( typeof id === 'string' && id.length ) {\n\t\t\turl = '/' + id;\n\n\t\t\t// If there is also a fragment, append that at the end\n\t\t\t// of the named link, like: #/named-link/2\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\t\t// Otherwise use the /h/v index\n\t\telse {\n\t\t\tlet hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0;\n\t\t\tif( index.h > 0 || index.v > 0 || index.f >= 0 ) url += index.h + hashIndexBase;\n\t\t\tif( index.v > 0 || index.f >= 0 ) url += '/' + (index.v + hashIndexBase );\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\n\t\treturn url;\n\n\t}\n\n\t/**\n\t * Handler for the window level 'hashchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tonWindowHashChange( event ) {\n\n\t\tthis.readURL();\n\n\t}\n\n}","import { queryAll } from '../utils/util.js'\nimport { isAndroid } from '../utils/device.js'\n\n/**\n * Manages our presentation controls. This includes both\n * the built-in control arrows as well as event monitoring\n * of any elements within the presentation with either of the\n * following helper classes:\n * - .navigate-up\n * - .navigate-right\n * - .navigate-down\n * - .navigate-left\n * - .navigate-next\n * - .navigate-prev\n */\nexport default class Controls {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );\n\t\tthis.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );\n\t\tthis.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );\n\t\tthis.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );\n\t\tthis.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );\n\t\tthis.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tconst rtl = this.Reveal.getConfig().rtl;\n\t\tconst revealElement = this.Reveal.getRevealElement();\n\n\t\tthis.element = document.createElement( 'aside' );\n\t\tthis.element.className = 'controls';\n\t\tthis.element.innerHTML =\n\t\t\t`\n\t\t\t\n\t\t\t\n\t\t\t`;\n\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\t// There can be multiple instances of controls throughout the page\n\t\tthis.controlsLeft = queryAll( revealElement, '.navigate-left' );\n\t\tthis.controlsRight = queryAll( revealElement, '.navigate-right' );\n\t\tthis.controlsUp = queryAll( revealElement, '.navigate-up' );\n\t\tthis.controlsDown = queryAll( revealElement, '.navigate-down' );\n\t\tthis.controlsPrev = queryAll( revealElement, '.navigate-prev' );\n\t\tthis.controlsNext = queryAll( revealElement, '.navigate-next' );\n\n\t\t// The left, right and down arrows in the standard reveal.js controls\n\t\tthis.controlsRightArrow = this.element.querySelector( '.navigate-right' );\n\t\tthis.controlsLeftArrow = this.element.querySelector( '.navigate-left' );\n\t\tthis.controlsDownArrow = this.element.querySelector( '.navigate-down' );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.controls ? 'block' : 'none';\n\n\t\tthis.element.setAttribute( 'data-controls-layout', config.controlsLayout );\n\t\tthis.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );\n\n\t}\n\n\tbind() {\n\n\t\t// Listen to both touch and click events, in case the device\n\t\t// supports both\n\t\tlet pointerEvents = [ 'touchstart', 'click' ];\n\n\t\t// Only support touch for Android, fixes double navigations in\n\t\t// stock browser\n\t\tif( isAndroid ) {\n\t\t\tpointerEvents = [ 'touchstart' ];\n\t\t}\n\n\t\tpointerEvents.forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\tunbind() {\n\n\t\t[ 'touchstart', 'click' ].forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates the state of all control/navigation arrows.\n\t */\n\tupdate() {\n\n\t\tlet routes = this.Reveal.availableRoutes();\n\n\t\t// Remove the 'enabled' class from all directions\n\t\t[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {\n\t\t\tnode.classList.remove( 'enabled', 'fragmented' );\n\n\t\t\t// Set 'disabled' attribute on all directions\n\t\t\tnode.setAttribute( 'disabled', 'disabled' );\n\t\t} );\n\n\t\t// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons\n\t\tif( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Prev/next buttons\n\t\tif( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Highlight fragment directions\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide ) {\n\n\t\t\tlet fragmentsRoutes = this.Reveal.fragments.availableRoutes();\n\n\t\t\t// Always apply fragment decorator to prev/next buttons\n\t\t\tif( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\tif( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t\t// Apply fragment decorators to directional buttons based on\n\t\t\t// what slide axis they are in\n\t\t\tif( this.Reveal.isVerticalSlide( currentSlide ) ) {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\n\t\t}\n\n\t\tif( this.Reveal.getConfig().controlsTutorial ) {\n\n\t\t\tlet indices = this.Reveal.getIndices();\n\n\t\t\t// Highlight control arrows with an animation to ensure\n\t\t\t// that the viewer knows how to navigate\n\t\t\tif( !this.Reveal.hasNavigatedVertically() && routes.down ) {\n\t\t\t\tthis.controlsDownArrow.classList.add( 'highlight' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.controlsDownArrow.classList.remove( 'highlight' );\n\n\t\t\t\tif( this.Reveal.getConfig().rtl ) {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\n\t\tthis.unbind();\n\t\tthis.element.remove();\n\n\t}\n\n\t/**\n\t * Event handlers for navigation control buttons.\n\t */\n\tonNavigateLeftClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.prev();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.left();\n\t\t}\n\n\t}\n\n\tonNavigateRightClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.next();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.right();\n\t\t}\n\n\t}\n\n\tonNavigateUpClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.up();\n\n\t}\n\n\tonNavigateDownClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.down();\n\n\t}\n\n\tonNavigatePrevClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.prev();\n\n\t}\n\n\tonNavigateNextClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.next();\n\n\t}\n\n\n}","/**\n * Creates a visual progress bar for the presentation.\n */\nexport default class Progress {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onProgressClicked = this.onProgressClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'progress';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\tthis.bar = document.createElement( 'span' );\n\t\tthis.element.appendChild( this.bar );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.progress ? 'block' : 'none';\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.addEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tif ( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.removeEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the progress bar to reflect the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update progress if enabled\n\t\tif( this.Reveal.getConfig().progress && this.bar ) {\n\n\t\t\tlet scale = this.Reveal.getProgress();\n\n\t\t\t// Don't fill the progress bar if there's only one slide\n\t\t\tif( this.Reveal.getTotalSlides() < 2 ) {\n\t\t\t\tscale = 0;\n\t\t\t}\n\n\t\t\tthis.bar.style.transform = 'scaleX('+ scale +')';\n\n\t\t}\n\n\t}\n\n\tgetMaxWidth() {\n\n\t\treturn this.Reveal.getRevealElement().offsetWidth;\n\n\t}\n\n\t/**\n\t * Clicking on the progress bar results in a navigation to the\n\t * closest approximate horizontal slide using this equation:\n\t *\n\t * ( clickX / presentationWidth ) * numberOfSlides\n\t *\n\t * @param {object} event\n\t */\n\tonProgressClicked( event ) {\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\tevent.preventDefault();\n\n\t\tlet slides = this.Reveal.getSlides();\n\t\tlet slidesTotal = slides.length;\n\t\tlet slideIndex = Math.floor( ( event.clientX / this.getMaxWidth() ) * slidesTotal );\n\n\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\tslideIndex = slidesTotal - slideIndex;\n\t\t}\n\n\t\tlet targetIndices = this.Reveal.getIndices(slides[slideIndex]);\n\t\tthis.Reveal.slide( targetIndices.h, targetIndices.v );\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}","/**\n * Handles hiding of the pointer/cursor when inactive.\n */\nexport default class Pointer {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Throttles mouse wheel navigation\n\t\tthis.lastMouseWheelStep = 0;\n\n\t\t// Is the mouse pointer currently hidden from view\n\t\tthis.cursorHidden = false;\n\n\t\t// Timeout used to determine when the cursor is inactive\n\t\tthis.cursorInactiveTimeout = 0;\n\n\t\tthis.onDocumentCursorActive = this.onDocumentCursorActive.bind( this );\n\t\tthis.onDocumentMouseScroll = this.onDocumentMouseScroll.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.mouseWheel ) {\n\t\t\tdocument.addEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.addEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\t\telse {\n\t\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\n\t\t// Auto-hide the mouse pointer when its inactive\n\t\tif( config.hideInactiveCursor ) {\n\t\t\tdocument.addEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.addEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\t\telse {\n\t\t\tthis.showCursor();\n\n\t\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Shows the mouse pointer after it has been hidden with\n\t * #hideCursor.\n\t */\n\tshowCursor() {\n\n\t\tif( this.cursorHidden ) {\n\t\t\tthis.cursorHidden = false;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = '';\n\t\t}\n\n\t}\n\n\t/**\n\t * Hides the mouse pointer when it's on top of the .reveal\n\t * container.\n\t */\n\thideCursor() {\n\n\t\tif( this.cursorHidden === false ) {\n\t\t\tthis.cursorHidden = true;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = 'none';\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.showCursor();\n\n\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\n\t}\n\n\t/**\n\t * Called whenever there is mouse input at the document level\n\t * to determine if the cursor is active or not.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentCursorActive( event ) {\n\n\t\tthis.showCursor();\n\n\t\tclearTimeout( this.cursorInactiveTimeout );\n\n\t\tthis.cursorInactiveTimeout = setTimeout( this.hideCursor.bind( this ), this.Reveal.getConfig().hideCursorTime );\n\n\t}\n\n\t/**\n\t * Handles mouse wheel scrolling, throttled to avoid skipping\n\t * multiple slides.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentMouseScroll( event ) {\n\n\t\tif( Date.now() - this.lastMouseWheelStep > 1000 ) {\n\n\t\t\tthis.lastMouseWheelStep = Date.now();\n\n\t\t\tlet delta = event.detail || -event.wheelDelta;\n\t\t\tif( delta > 0 ) {\n\t\t\t\tthis.Reveal.next();\n\t\t\t}\n\t\t\telse if( delta < 0 ) {\n\t\t\t\tthis.Reveal.prev();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}","/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to load\n * @param {function} callback Method to invoke when the script\n * has loaded and executed\n */\nexport const loadScript = ( url, callback ) => {\n\n\tconst script = document.createElement( 'script' );\n\tscript.type = 'text/javascript';\n\tscript.async = false;\n\tscript.defer = false;\n\tscript.src = url;\n\n\tif( typeof callback === 'function' ) {\n\n\t\t// Success callback\n\t\tscript.onload = script.onreadystatechange = event => {\n\t\t\tif( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t// Kill event listeners\n\t\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\t\tcallback();\n\n\t\t\t}\n\t\t};\n\n\t\t// Error callback\n\t\tscript.onerror = err => {\n\n\t\t\t// Kill event listeners\n\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\tcallback( new Error( 'Failed loading script: ' + script.src + '\\n' + err ) );\n\n\t\t};\n\n\t}\n\n\t// Append the script at the end of \n\tconst head = document.querySelector( 'head' );\n\thead.insertBefore( script, head.lastChild );\n\n}","import { loadScript } from '../utils/loader.js'\n\n/**\n * Manages loading and registering of reveal.js plugins.\n */\nexport default class Plugins {\n\n\tconstructor( reveal ) {\n\n\t\tthis.Reveal = reveal;\n\n\t\t// Flags our current state (idle -> loading -> loaded)\n\t\tthis.state = 'idle';\n\n\t\t// An id:instance map of currently registed plugins\n\t\tthis.registeredPlugins = {};\n\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n\t/**\n\t * Loads reveal.js dependencies, registers and\n\t * initializes plugins.\n\t *\n\t * Plugins are direct references to a reveal.js plugin\n\t * object that we register and initialize after any\n\t * synchronous dependencies have loaded.\n\t *\n\t * Dependencies are defined via the 'dependencies' config\n\t * option and will be loaded prior to starting reveal.js.\n\t * Some dependencies may have an 'async' flag, if so they\n\t * will load after reveal.js has been started up.\n\t */\n\tload( plugins, dependencies ) {\n\n\t\tthis.state = 'loading';\n\n\t\tplugins.forEach( this.registerPlugin.bind( this ) );\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet scripts = [],\n\t\t\t\tscriptsToLoad = 0;\n\n\t\t\tdependencies.forEach( s => {\n\t\t\t\t// Load if there's no condition or the condition is truthy\n\t\t\t\tif( !s.condition || s.condition() ) {\n\t\t\t\t\tif( s.async ) {\n\t\t\t\t\t\tthis.asyncDependencies.push( s );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tscripts.push( s );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( scripts.length ) {\n\t\t\t\tscriptsToLoad = scripts.length;\n\n\t\t\t\tconst scriptLoadedCallback = (s) => {\n\t\t\t\t\tif( s && typeof s.callback === 'function' ) s.callback();\n\n\t\t\t\t\tif( --scriptsToLoad === 0 ) {\n\t\t\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Load synchronous scripts\n\t\t\t\tscripts.forEach( s => {\n\t\t\t\t\tif( typeof s.id === 'string' ) {\n\t\t\t\t\t\tthis.registerPlugin( s );\n\t\t\t\t\t\tscriptLoadedCallback( s );\n\t\t\t\t\t}\n\t\t\t\t\telse if( typeof s.src === 'string' ) {\n\t\t\t\t\t\tloadScript( s.src, () => scriptLoadedCallback(s) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.warn( 'Unrecognized plugin format', s );\n\t\t\t\t\t\tscriptLoadedCallback();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Initializes our plugins and waits for them to be ready\n\t * before proceeding.\n\t */\n\tinitPlugins() {\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet pluginValues = Object.values( this.registeredPlugins );\n\t\t\tlet pluginsToInitialize = pluginValues.length;\n\n\t\t\t// If there are no plugins, skip this step\n\t\t\tif( pluginsToInitialize === 0 ) {\n\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t}\n\t\t\t// ... otherwise initialize plugins\n\t\t\telse {\n\n\t\t\t\tlet initNextPlugin;\n\n\t\t\t\tlet afterPlugInitialized = () => {\n\t\t\t\t\tif( --pluginsToInitialize === 0 ) {\n\t\t\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinitNextPlugin();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet i = 0;\n\n\t\t\t\t// Initialize plugins serially\n\t\t\t\tinitNextPlugin = () => {\n\n\t\t\t\t\tlet plugin = pluginValues[i++];\n\n\t\t\t\t\t// If the plugin has an 'init' method, invoke it\n\t\t\t\t\tif( typeof plugin.init === 'function' ) {\n\t\t\t\t\t\tlet promise = plugin.init( this.Reveal );\n\n\t\t\t\t\t\t// If the plugin returned a Promise, wait for it\n\t\t\t\t\t\tif( promise && typeof promise.then === 'function' ) {\n\t\t\t\t\t\t\tpromise.then( afterPlugInitialized );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tinitNextPlugin();\n\n\t\t\t}\n\n\t\t} )\n\n\t}\n\n\t/**\n\t * Loads all async reveal.js dependencies.\n\t */\n\tloadAsync() {\n\n\t\tthis.state = 'loaded';\n\n\t\tif( this.asyncDependencies.length ) {\n\t\t\tthis.asyncDependencies.forEach( s => {\n\t\t\t\tloadScript( s.src, s.callback );\n\t\t\t} );\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n\t/**\n\t * Registers a new plugin with this reveal.js instance.\n\t *\n\t * reveal.js waits for all regisered plugins to initialize\n\t * before considering itself ready, as long as the plugin\n\t * is registered before calling `Reveal.initialize()`.\n\t */\n\tregisterPlugin( plugin ) {\n\n\t\t// Backwards compatibility to make reveal.js ~3.9.0\n\t\t// plugins work with reveal.js 4.0.0\n\t\tif( arguments.length === 2 && typeof arguments[0] === 'string' ) {\n\t\t\tplugin = arguments[1];\n\t\t\tplugin.id = arguments[0];\n\t\t}\n\t\t// Plugin can optionally be a function which we call\n\t\t// to create an instance of the plugin\n\t\telse if( typeof plugin === 'function' ) {\n\t\t\tplugin = plugin();\n\t\t}\n\n\t\tlet id = plugin.id;\n\n\t\tif( typeof id !== 'string' ) {\n\t\t\tconsole.warn( 'Unrecognized plugin format; can\\'t find plugin.id', plugin );\n\t\t}\n\t\telse if( this.registeredPlugins[id] === undefined ) {\n\t\t\tthis.registeredPlugins[id] = plugin;\n\n\t\t\t// If a plugin is registered after reveal.js is loaded,\n\t\t\t// initialize it right away\n\t\t\tif( this.state === 'loaded' && typeof plugin.init === 'function' ) {\n\t\t\t\tplugin.init( this.Reveal );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.warn( 'reveal.js: \"'+ id +'\" plugin has already been registered' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if a specific plugin has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\thasPlugin( id ) {\n\n\t\treturn !!this.registeredPlugins[id];\n\n\t}\n\n\t/**\n\t * Returns the specific plugin instance, if a plugin\n\t * with the given ID has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\tgetPlugin( id ) {\n\n\t\treturn this.registeredPlugins[id];\n\n\t}\n\n\tgetRegisteredPlugins() {\n\n\t\treturn this.registeredPlugins;\n\n\t}\n\n\tdestroy() {\n\n\t\tObject.values( this.registeredPlugins ).forEach( plugin => {\n\t\t\tif( typeof plugin.destroy === 'function' ) {\n\t\t\t\tplugin.destroy();\n\t\t\t}\n\t\t} );\n\n\t\tthis.registeredPlugins = {};\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n}\n","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { queryAll, createStyleSheet } from '../utils/util.js'\n\n/**\n * Setups up our presentation for printing/exporting to PDF.\n */\nexport default class Print {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Configures the presentation for printing to a static\n\t * PDF.\n\t */\n\tasync setupPDF() {\n\n\t\tconst config = this.Reveal.getConfig();\n\t\tconst slides = queryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR )\n\n\t\t// Compute slide numbers now, before we start duplicating slides\n\t\tconst doingSlideNumbers = config.slideNumber && /all|print/i.test( config.showSlideNumber );\n\n\t\tconst slideSize = this.Reveal.getComputedSlideSize( window.innerWidth, window.innerHeight );\n\n\t\t// Dimensions of the PDF pages\n\t\tconst pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ),\n\t\t\tpageHeight = Math.floor( slideSize.height * ( 1 + config.margin ) );\n\n\t\t// Dimensions of slides within the pages\n\t\tconst slideWidth = slideSize.width,\n\t\t\tslideHeight = slideSize.height;\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\t// Let the browser know what page size we want to print\n\t\tcreateStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0px;}' );\n\n\t\t// Limit the size of certain elements to the dimensions of the slide\n\t\tcreateStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' );\n\n\t\tdocument.documentElement.classList.add( 'print-pdf' );\n\t\tdocument.body.style.width = pageWidth + 'px';\n\t\tdocument.body.style.height = pageHeight + 'px';\n\n\t\tconst viewportElement = document.querySelector( '.reveal-viewport' );\n\t\tlet presentationBackground;\n\t\tif( viewportElement ) {\n\t\t\tconst viewportStyles = window.getComputedStyle( viewportElement );\n\t\t\tif( viewportStyles && viewportStyles.background ) {\n\t\t\t\tpresentationBackground = viewportStyles.background;\n\t\t\t}\n\t\t}\n\n\t\t// Make sure stretch elements fit on slide\n\t\tawait new Promise( requestAnimationFrame );\n\t\tthis.Reveal.layoutSlideContents( slideWidth, slideHeight );\n\n\t\t// Batch scrollHeight access to prevent layout thrashing\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tconst slideScrollHeights = slides.map( slide => slide.scrollHeight );\n\n\t\tconst pages = [];\n\t\tconst pageContainer = slides[0].parentNode;\n\n\t\t// Slide and slide background layout\n\t\tslides.forEach( function( slide, index ) {\n\n\t\t\t// Vertical stacks are not centred since their section\n\t\t\t// children will be\n\t\t\tif( slide.classList.contains( 'stack' ) === false ) {\n\t\t\t\t// Center the slide inside of the page, giving the slide some margin\n\t\t\t\tlet left = ( pageWidth - slideWidth ) / 2;\n\t\t\t\tlet top = ( pageHeight - slideHeight ) / 2;\n\n\t\t\t\tconst contentHeight = slideScrollHeights[ index ];\n\t\t\t\tlet numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );\n\n\t\t\t\t// Adhere to configured pages per slide limit\n\t\t\t\tnumberOfPages = Math.min( numberOfPages, config.pdfMaxPagesPerSlide );\n\n\t\t\t\t// Center slides vertically\n\t\t\t\tif( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\ttop = Math.max( ( pageHeight - contentHeight ) / 2, 0 );\n\t\t\t\t}\n\n\t\t\t\t// Wrap the slide in a page element and hide its overflow\n\t\t\t\t// so that no page ever flows onto another\n\t\t\t\tconst page = document.createElement( 'div' );\n\t\t\t\tpages.push( page );\n\n\t\t\t\tpage.className = 'pdf-page';\n\t\t\t\tpage.style.height = ( ( pageHeight + config.pdfPageHeightOffset ) * numberOfPages ) + 'px';\n\n\t\t\t\t// Copy the presentation-wide background to each individual\n\t\t\t\t// page when printing\n\t\t\t\tif( presentationBackground ) {\n\t\t\t\t\tpage.style.background = presentationBackground;\n\t\t\t\t}\n\n\t\t\t\tpage.appendChild( slide );\n\n\t\t\t\t// Position the slide inside of the page\n\t\t\t\tslide.style.left = left + 'px';\n\t\t\t\tslide.style.top = top + 'px';\n\t\t\t\tslide.style.width = slideWidth + 'px';\n\n\t\t\t\t// Re-run the slide layout so that r-fit-text is applied based on\n\t\t\t\t// the printed slide size\n\t\t\t\tthis.Reveal.slideContent.layout( slide )\n\n\t\t\t\tif( slide.slideBackgroundElement ) {\n\t\t\t\t\tpage.insertBefore( slide.slideBackgroundElement, slide );\n\t\t\t\t}\n\n\t\t\t\t// Inject notes if `showNotes` is enabled\n\t\t\t\tif( config.showNotes ) {\n\n\t\t\t\t\t// Are there notes for this slide?\n\t\t\t\t\tconst notes = this.Reveal.getSlideNotes( slide );\n\t\t\t\t\tif( notes ) {\n\n\t\t\t\t\t\tconst notesSpacing = 8;\n\t\t\t\t\t\tconst notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline';\n\t\t\t\t\t\tconst notesElement = document.createElement( 'div' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes-pdf' );\n\t\t\t\t\t\tnotesElement.setAttribute( 'data-layout', notesLayout );\n\t\t\t\t\t\tnotesElement.innerHTML = notes;\n\n\t\t\t\t\t\tif( notesLayout === 'separate-page' ) {\n\t\t\t\t\t\t\tpages.push( notesElement );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesElement.style.left = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.bottom = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.width = ( pageWidth - notesSpacing*2 ) + 'px';\n\t\t\t\t\t\t\tpage.appendChild( notesElement );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Inject slide numbers if `slideNumbers` are enabled\n\t\t\t\tif( doingSlideNumbers ) {\n\t\t\t\t\tconst slideNumber = index + 1;\n\t\t\t\t\tconst numberElement = document.createElement( 'div' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number-pdf' );\n\t\t\t\t\tnumberElement.innerHTML = slideNumber;\n\t\t\t\t\tpage.appendChild( numberElement );\n\t\t\t\t}\n\n\t\t\t\t// Copy page and show fragments one after another\n\t\t\t\tif( config.pdfSeparateFragments ) {\n\n\t\t\t\t\t// Each fragment 'group' is an array containing one or more\n\t\t\t\t\t// fragments. Multiple fragments that appear at the same time\n\t\t\t\t\t// are part of the same group.\n\t\t\t\t\tconst fragmentGroups = this.Reveal.fragments.sort( page.querySelectorAll( '.fragment' ), true );\n\n\t\t\t\t\tlet previousFragmentStep;\n\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\n\t\t\t\t\t\t// Remove 'current-fragment' from the previous group\n\t\t\t\t\t\tif( previousFragmentStep ) {\n\t\t\t\t\t\t\tpreviousFragmentStep.forEach( function( fragment ) {\n\t\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show the fragments for the current index\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible', 'current-fragment' );\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\t// Create a separate page for the current fragment state\n\t\t\t\t\t\tconst clonedPage = page.cloneNode( true );\n\t\t\t\t\t\tpages.push( clonedPage );\n\n\t\t\t\t\t\tpreviousFragmentStep = fragments;\n\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// Reset the first/original page so that all fragments are hidden\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t\t// Show all fragments\n\t\t\t\telse {\n\t\t\t\t\tqueryAll( page, '.fragment:not(.fade-out)' ).forEach( function( fragment ) {\n\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tpages.forEach( page => pageContainer.appendChild( page ) );\n\n\t\t// Notify subscribers that the PDF layout is good to go\n\t\tthis.Reveal.dispatchEvent({ type: 'pdf-ready' });\n\n\t}\n\n\t/**\n\t * Checks if this instance is being used to print a PDF.\n\t */\n\tisPrintingPDF() {\n\n\t\treturn ( /print-pdf/gi ).test( window.location.search );\n\n\t}\n\n}\n","import { isAndroid } from '../utils/device.js'\nimport { matches } from '../utils/util.js'\n\nconst SWIPE_THRESHOLD = 40;\n\n/**\n * Controls all touch interactions and navigations for\n * a presentation.\n */\nexport default class Touch {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Holds information about the currently ongoing touch interaction\n\t\tthis.touchStartX = 0;\n\t\tthis.touchStartY = 0;\n\t\tthis.touchStartCount = 0;\n\t\tthis.touchCaptured = false;\n\n\t\tthis.onPointerDown = this.onPointerDown.bind( this );\n\t\tthis.onPointerMove = this.onPointerMove.bind( this );\n\t\tthis.onPointerUp = this.onPointerUp.bind( this );\n\t\tthis.onTouchStart = this.onTouchStart.bind( this );\n\t\tthis.onTouchMove = this.onTouchMove.bind( this );\n\t\tthis.onTouchEnd = this.onTouchEnd.bind( this );\n\n\t}\n\n\t/**\n\t *\n\t */\n\tbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\tif( 'onpointerdown' in window ) {\n\t\t\t// Use W3C pointer events\n\t\t\trevealElement.addEventListener( 'pointerdown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'pointermove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'pointerup', this.onPointerUp, false );\n\t\t}\n\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\t// IE 10 uses prefixed version of pointer events\n\t\t\trevealElement.addEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'MSPointerUp', this.onPointerUp, false );\n\t\t}\n\t\telse {\n\t\t\t// Fall back to touch events\n\t\t\trevealElement.addEventListener( 'touchstart', this.onTouchStart, false );\n\t\t\trevealElement.addEventListener( 'touchmove', this.onTouchMove, false );\n\t\t\trevealElement.addEventListener( 'touchend', this.onTouchEnd, false );\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t */\n\tunbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\trevealElement.removeEventListener( 'pointerdown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'pointermove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'pointerup', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'MSPointerUp', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'touchstart', this.onTouchStart, false );\n\t\trevealElement.removeEventListener( 'touchmove', this.onTouchMove, false );\n\t\trevealElement.removeEventListener( 'touchend', this.onTouchEnd, false );\n\n\t}\n\n\t/**\n\t * Checks if the target element prevents the triggering of\n\t * swipe navigation.\n\t */\n\tisSwipePrevented( target ) {\n\n\t\t// Prevent accidental swipes when scrubbing timelines\n\t\tif( matches( target, 'video, audio' ) ) return true;\n\n\t\twhile( target && typeof target.hasAttribute === 'function' ) {\n\t\t\tif( target.hasAttribute( 'data-prevent-swipe' ) ) return true;\n\t\t\ttarget = target.parentNode;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchstart' event, enables support for\n\t * swipe and pinch gestures.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchStart( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tthis.touchStartX = event.touches[0].clientX;\n\t\tthis.touchStartY = event.touches[0].clientY;\n\t\tthis.touchStartCount = event.touches.length;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchmove' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchMove( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// Each touch should only trigger one action\n\t\tif( !this.touchCaptured ) {\n\t\t\tthis.Reveal.onUserInput( event );\n\n\t\t\tlet currentX = event.touches[0].clientX;\n\t\t\tlet currentY = event.touches[0].clientY;\n\n\t\t\t// There was only one touch point, look for a swipe\n\t\t\tif( event.touches.length === 1 && this.touchStartCount !== 2 ) {\n\n\t\t\t\tlet availableRoutes = this.Reveal.availableRoutes({ includeFragments: true });\n\n\t\t\t\tlet deltaX = currentX - this.touchStartX,\n\t\t\t\t\tdeltaY = currentY - this.touchStartY;\n\n\t\t\t\tif( deltaX > SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.left();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaX < -SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.right();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY > SWIPE_THRESHOLD && availableRoutes.up ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.up();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY < -SWIPE_THRESHOLD && availableRoutes.down ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.down();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we're embedded, only block touch events if they have\n\t\t\t\t// triggered an action\n\t\t\t\tif( config.embedded ) {\n\t\t\t\t\tif( this.touchCaptured || this.Reveal.isVerticalSlide() ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not embedded? Block them all to avoid needless tossing\n\t\t\t\t// around of the viewport in iOS\n\t\t\t\telse {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t// There's a bug with swiping on some Android devices unless\n\t\t// the default action is always prevented\n\t\telse if( isAndroid ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchend' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchEnd( event ) {\n\n\t\tthis.touchCaptured = false;\n\n\t}\n\n\t/**\n\t * Convert pointer down to touch start.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerDown( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchStart( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer move to touch move.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerMove( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchMove( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer up to touch end.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerUp( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchEnd( event );\n\t\t}\n\n\t}\n\n}","import { closest } from '../utils/util.js'\n\n/**\n * Manages focus when a presentation is embedded. This\n * helps us only capture keyboard from the presentation\n * a user is currently interacting with in a page where\n * multiple presentations are embedded.\n */\n\nconst STATE_FOCUS = 'focus';\nconst STATE_BLUR = 'blur';\n\nexport default class Focus {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onRevealPointerDown = this.onRevealPointerDown.bind( this );\n\t\tthis.onDocumentPointerDown = this.onDocumentPointerDown.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.embedded ) {\n\t\t\tthis.blur();\n\t\t}\n\t\telse {\n\t\t\tthis.focus();\n\t\t\tthis.unbind();\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().embedded ) {\n\t\t\tthis.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tthis.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\n\t}\n\n\tfocus() {\n\n\t\tif( this.state !== STATE_FOCUS ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'focused' );\n\t\t\tdocument.addEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_FOCUS;\n\n\t}\n\n\tblur() {\n\n\t\tif( this.state !== STATE_BLUR ) {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\t\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_BLUR;\n\n\t}\n\n\tisFocused() {\n\n\t\treturn this.state === STATE_FOCUS;\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\n\t}\n\n\tonRevealPointerDown( event ) {\n\n\t\tthis.focus();\n\n\t}\n\n\tonDocumentPointerDown( event ) {\n\n\t\tlet revealElement = closest( event.target, '.reveal' );\n\t\tif( !revealElement || revealElement !== this.Reveal.getRevealElement() ) {\n\t\t\tthis.blur();\n\t\t}\n\n\t}\n\n}","/**\n * Handles the showing and \n */\nexport default class Notes {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'speaker-notes';\n\t\tthis.element.setAttribute( 'data-prevent-swipe', '' );\n\t\tthis.element.setAttribute( 'tabindex', '0' );\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.showNotes ) {\n\t\t\tthis.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pick up notes from the current slide and display them\n\t * to the viewer.\n\t *\n\t * @see {@link config.showNotes}\n\t */\n\tupdate() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.print.isPrintingPDF() ) {\n\n\t\t\tthis.element.innerHTML = this.getSlideNotes() || 'No notes on this slide.';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the visibility of the speaker notes sidebar that\n\t * is used to share annotated slides. The notes sidebar is\n\t * only visible if showNotes is true and there are notes on\n\t * one or more slides in the deck.\n\t */\n\tupdateVisibility() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.print.isPrintingPDF() ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'show-notes' );\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'show-notes' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if there are speaker notes for ANY slide in the\n\t * presentation.\n\t */\n\thasNotes() {\n\n\t\treturn this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0;\n\n\t}\n\n\t/**\n\t * Checks if this presentation is running inside of the\n\t * speaker notes window.\n\t *\n\t * @return {boolean}\n\t */\n\tisSpeakerNotesWindow() {\n\n\t\treturn !!window.location.search.match( /receiver/gi );\n\n\t}\n\n\t/**\n\t * Retrieves the speaker notes from a slide. Notes can be\n\t * defined in two ways:\n\t * 1. As a data-notes attribute on the slide
    \n\t * 2. As an